[svn:parrot] r48799 - in branches/gc_massacre: . compilers/imcc compilers/opsc compilers/opsc/src/Ops compilers/opsc/src/Ops/Trans compilers/pct/src/PAST compilers/pct/src/PCT config/auto config/auto/llvm config/gen config/gen/config_h config/gen/makefiles config/gen/platform/ansi config/gen/platform/generic config/gen/platform/win32 config/inter docs docs/project examples/japh examples/languages/squaak examples/languages/squaak/doc examples/languages/squaak/src examples/tools ext/nqp-rx/src/stage0 include/parrot include/parrot/oplib lib/Parrot/Configure lib/Parrot/Configure/Step lib/Parrot/Docs/Section lib/Parrot/Pmc2c ports/debian runtime/parrot/library runtime/parrot/library/Digest runtime/parrot/library/HTTP src src/call src/dynoplibs src/dynpmc 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/imcc/syn t/compilers/pge/p5regex t/dynoplibs t/examples t/native_pbc t/native_pbc /testdata t/oo t/op t/perl t/pmc t/pmc/testlib t/run t/src t/steps/auto t/tools tools/build tools/dev tools/release tools/util

bacek at svn.parrot.org bacek at svn.parrot.org
Sun Sep 5 13:20:35 UTC 2010


Author: bacek
Date: Sun Sep  5 13:20:27 2010
New Revision: 48799
URL: https://trac.parrot.org/parrot/changeset/48799

Log:
Merge branch 'master' into gc_massacre

Conflicts:
	MANIFEST
	MANIFEST.SKIP
	src/gc/alloc_resources.c
	src/gc/gc_ms.c
	src/gc/gc_private.h
	src/gc/mark_sweep.c
	src/pmc/imageio.pmc
	src/string/api.c
	src/string/encoding/utf8.c
	t/op/gc-leaky-box.t

Added:
   branches/gc_massacre/config/auto/llvm/
   branches/gc_massacre/config/auto/llvm.pm
   branches/gc_massacre/config/auto/llvm/hello.c
   branches/gc_massacre/config/gen/platform/ansi/pid.c
   branches/gc_massacre/config/gen/platform/generic/pid.c
   branches/gc_massacre/config/gen/platform/win32/pid.c
   branches/gc_massacre/examples/tools/pgegrep
      - copied, changed from r48798, branches/gc_massacre/tools/util/pgegrep
   branches/gc_massacre/src/packfile/byteorder.h
      - copied, changed from r48798, branches/gc_massacre/src/byteorder.c
   branches/gc_massacre/src/pmc/nativepccmethod.pmc
   branches/gc_massacre/t/codingstd/pmc_docs.t
   branches/gc_massacre/t/examples/pgegrep.t
      - copied, changed from r48798, branches/gc_massacre/t/tools/pgegrep.t
   branches/gc_massacre/t/op/gc-active-buffers.t
   branches/gc_massacre/t/op/gc-leaky-box.t
      - copied, changed from r48798, branches/gc_massacre/t/op/gc-leaky.t
   branches/gc_massacre/t/op/gc-leaky-call.t
   branches/gc_massacre/t/pmc/testlib/annotations.pir
      - copied, changed from r48798, branches/gc_massacre/t/native_pbc/testdata/annotations.pir
   branches/gc_massacre/t/pmc/testlib/number.pasm
   branches/gc_massacre/t/steps/auto/llvm-01.t
   branches/gc_massacre/tools/build/README
   branches/gc_massacre/tools/dev/README
   branches/gc_massacre/tools/dev/addopstags.pl
      - copied, changed from r48798, branches/gc_massacre/tools/build/addopstags.pl
   branches/gc_massacre/tools/dev/dump_pbc.pl
      - copied, changed from r48798, branches/gc_massacre/tools/util/dump_pbc.pl
   branches/gc_massacre/tools/dev/headerizer.pl
      - copied, changed from r48798, branches/gc_massacre/tools/build/headerizer.pl
   branches/gc_massacre/tools/dev/mk_language_shell.in
      - copied, changed from r48798, branches/gc_massacre/tools/dev/mk_language_shell.pl
   branches/gc_massacre/tools/dev/ncidef2pasm.pl
      - copied, changed from r48798, branches/gc_massacre/tools/util/ncidef2pasm.pl
   branches/gc_massacre/tools/dev/parrot-config.pir
      - copied, changed from r48798, branches/gc_massacre/tools/util/parrot-config.pir
   branches/gc_massacre/tools/dev/perlcritic-cage.conf
      - copied, changed from r48798, branches/gc_massacre/tools/util/perlcritic-cage.conf
   branches/gc_massacre/tools/dev/perlcritic.conf
      - copied, changed from r48798, branches/gc_massacre/tools/util/perlcritic.conf
   branches/gc_massacre/tools/dev/perltidy.conf
      - copied, changed from r48798, branches/gc_massacre/tools/util/perltidy.conf
   branches/gc_massacre/tools/dev/update_copyright.pl
      - copied, changed from r48798, branches/gc_massacre/tools/util/update_copyright.pl
   branches/gc_massacre/tools/release/
   branches/gc_massacre/tools/release/README
   branches/gc_massacre/tools/release/crow.pir
      - copied, changed from r48798, branches/gc_massacre/tools/util/crow.pir
   branches/gc_massacre/tools/release/gen_release_info.pl
      - copied, changed from r48798, branches/gc_massacre/tools/util/gen_release_info.pl
   branches/gc_massacre/tools/release/inc_ver.pir
      - copied, changed from r48798, branches/gc_massacre/tools/util/inc_ver.pir
   branches/gc_massacre/tools/release/release.json
      - copied, changed from r48798, branches/gc_massacre/tools/util/release.json
   branches/gc_massacre/tools/release/templates.json
      - copied, changed from r48798, branches/gc_massacre/tools/util/templates.json
Deleted:
   branches/gc_massacre/examples/japh/README
   branches/gc_massacre/examples/japh/japh1.pasm
   branches/gc_massacre/examples/japh/japh3.pasm
   branches/gc_massacre/examples/japh/japh4.pasm
   branches/gc_massacre/examples/japh/japh5.pasm
   branches/gc_massacre/src/byteorder.c
   branches/gc_massacre/src/frame_builder.c
   branches/gc_massacre/src/frame_builder.h
   branches/gc_massacre/t/examples/japh.t
   branches/gc_massacre/t/native_pbc/annotations.pbc
   branches/gc_massacre/t/native_pbc/testdata/annotations.pir
   branches/gc_massacre/t/op/gc-leaky.t
   branches/gc_massacre/t/tools/pgegrep.t
   branches/gc_massacre/tools/build/addopstags.pl
   branches/gc_massacre/tools/build/headerizer.pl
   branches/gc_massacre/tools/dev/mk_language_shell.pl
   branches/gc_massacre/tools/util/crow.pir
   branches/gc_massacre/tools/util/dump_pbc.pl
   branches/gc_massacre/tools/util/gen_release_info.pl
   branches/gc_massacre/tools/util/inc_ver.pir
   branches/gc_massacre/tools/util/ncidef2pasm.pl
   branches/gc_massacre/tools/util/parrot-config.pir
   branches/gc_massacre/tools/util/perlcritic-cage.conf
   branches/gc_massacre/tools/util/perlcritic.conf
   branches/gc_massacre/tools/util/perltidy.conf
   branches/gc_massacre/tools/util/pgegrep
   branches/gc_massacre/tools/util/release.json
   branches/gc_massacre/tools/util/templates.json
   branches/gc_massacre/tools/util/update_copyright.pl
Modified:
   branches/gc_massacre/CREDITS
   branches/gc_massacre/ChangeLog
   branches/gc_massacre/DEPRECATED.pod
   branches/gc_massacre/MANIFEST
   branches/gc_massacre/MANIFEST.SKIP
   branches/gc_massacre/MANIFEST.generated
   branches/gc_massacre/NEWS
   branches/gc_massacre/PBC_COMPAT
   branches/gc_massacre/README
   branches/gc_massacre/RESPONSIBLE_PARTIES
   branches/gc_massacre/VERSION
   branches/gc_massacre/compilers/imcc/cfg.c
   branches/gc_massacre/compilers/imcc/imc.c
   branches/gc_massacre/compilers/imcc/imcc.l
   branches/gc_massacre/compilers/imcc/imcc.y
   branches/gc_massacre/compilers/imcc/imclexer.c
   branches/gc_massacre/compilers/imcc/imcparser.c
   branches/gc_massacre/compilers/imcc/imcparser.h
   branches/gc_massacre/compilers/imcc/instructions.c
   branches/gc_massacre/compilers/imcc/optimizer.c
   branches/gc_massacre/compilers/imcc/parser_util.c
   branches/gc_massacre/compilers/imcc/pbc.c
   branches/gc_massacre/compilers/imcc/pcc.c
   branches/gc_massacre/compilers/imcc/sets.c
   branches/gc_massacre/compilers/imcc/sets.h
   branches/gc_massacre/compilers/imcc/symreg.c
   branches/gc_massacre/compilers/imcc/symreg.h
   branches/gc_massacre/compilers/imcc/unit.h
   branches/gc_massacre/compilers/opsc/ops2c.nqp
   branches/gc_massacre/compilers/opsc/src/Ops/Emitter.pm
   branches/gc_massacre/compilers/opsc/src/Ops/File.pm
   branches/gc_massacre/compilers/opsc/src/Ops/Trans/C.pm
   branches/gc_massacre/compilers/pct/src/PAST/Compiler.pir
   branches/gc_massacre/compilers/pct/src/PCT/HLLCompiler.pir
   branches/gc_massacre/config/auto/pmc.pm
   branches/gc_massacre/config/gen/config_h/config_h.in
   branches/gc_massacre/config/gen/makefiles.pm
   branches/gc_massacre/config/gen/makefiles/root.in
   branches/gc_massacre/config/gen/platform.pm
   branches/gc_massacre/config/inter/progs.pm
   branches/gc_massacre/docs/embed.pod
   branches/gc_massacre/docs/parrothist.pod
   branches/gc_massacre/docs/project/release_manager_guide.pod
   branches/gc_massacre/examples/languages/squaak/doc/tutorial_episode_1.pod
   branches/gc_massacre/examples/languages/squaak/doc/tutorial_episode_2.pod
   branches/gc_massacre/examples/languages/squaak/setup.pir
   branches/gc_massacre/examples/languages/squaak/src/squaak.pir
   branches/gc_massacre/ext/nqp-rx/src/stage0/HLL-s0.pir
   branches/gc_massacre/ext/nqp-rx/src/stage0/NQP-s0.pir
   branches/gc_massacre/ext/nqp-rx/src/stage0/P6Regex-s0.pir
   branches/gc_massacre/ext/nqp-rx/src/stage0/Regex-s0.pir
   branches/gc_massacre/ext/nqp-rx/src/stage0/nqp-setting.nqp
   branches/gc_massacre/include/parrot/call.h
   branches/gc_massacre/include/parrot/encoding.h
   branches/gc_massacre/include/parrot/hash.h
   branches/gc_massacre/include/parrot/interpreter.h
   branches/gc_massacre/include/parrot/io.h
   branches/gc_massacre/include/parrot/memory.h
   branches/gc_massacre/include/parrot/namespace.h
   branches/gc_massacre/include/parrot/nci.h
   branches/gc_massacre/include/parrot/op.h
   branches/gc_massacre/include/parrot/oplib/core_ops.h
   branches/gc_massacre/include/parrot/packfile.h
   branches/gc_massacre/include/parrot/platform_interface.h
   branches/gc_massacre/include/parrot/pmc_freeze.h
   branches/gc_massacre/include/parrot/pobj.h
   branches/gc_massacre/include/parrot/runcore_api.h
   branches/gc_massacre/include/parrot/scheduler_private.h
   branches/gc_massacre/include/parrot/string.h
   branches/gc_massacre/include/parrot/string_funcs.h
   branches/gc_massacre/lib/Parrot/Configure/Compiler.pm
   branches/gc_massacre/lib/Parrot/Configure/Step/List.pm
   branches/gc_massacre/lib/Parrot/Docs/Section/Tools.pm
   branches/gc_massacre/lib/Parrot/Pmc2c/PMCEmitter.pm
   branches/gc_massacre/ports/debian/rules
   branches/gc_massacre/runtime/parrot/library/Digest/MD5.pir
   branches/gc_massacre/runtime/parrot/library/HTTP/Message.pir
   branches/gc_massacre/runtime/parrot/library/distutils.pir
   branches/gc_massacre/src/call/args.c
   branches/gc_massacre/src/call/context.c
   branches/gc_massacre/src/debug.c
   branches/gc_massacre/src/dynext.c
   branches/gc_massacre/src/dynoplibs/math.ops
   branches/gc_massacre/src/dynoplibs/trans.ops
   branches/gc_massacre/src/dynpmc/dynlexpad.pmc
   branches/gc_massacre/src/dynpmc/rational.pmc
   branches/gc_massacre/src/embed.c
   branches/gc_massacre/src/exceptions.c
   branches/gc_massacre/src/gc/alloc_memory.c
   branches/gc_massacre/src/gc/alloc_resources.c
   branches/gc_massacre/src/gc/api.c
   branches/gc_massacre/src/gc/gc_ms.c
   branches/gc_massacre/src/gc/gc_private.h
   branches/gc_massacre/src/gc/mark_sweep.c
   branches/gc_massacre/src/hash.c
   branches/gc_massacre/src/hll.c
   branches/gc_massacre/src/interp/inter_misc.c
   branches/gc_massacre/src/io/socket_api.c
   branches/gc_massacre/src/io/utf8.c
   branches/gc_massacre/src/multidispatch.c
   branches/gc_massacre/src/namespace.c
   branches/gc_massacre/src/oo.c
   branches/gc_massacre/src/ops/core.ops
   branches/gc_massacre/src/ops/core_ops.c
   branches/gc_massacre/src/ops/object.ops
   branches/gc_massacre/src/ops/pmc.ops
   branches/gc_massacre/src/ops/set.ops
   branches/gc_massacre/src/ops/var.ops
   branches/gc_massacre/src/packdump.c
   branches/gc_massacre/src/packfile.c
   branches/gc_massacre/src/packfile/pf_items.c
   branches/gc_massacre/src/packout.c
   branches/gc_massacre/src/pbc_dump.c
   branches/gc_massacre/src/pbc_merge.c
   branches/gc_massacre/src/pmc.c
   branches/gc_massacre/src/pmc/addrregistry.pmc
   branches/gc_massacre/src/pmc/bigint.pmc
   branches/gc_massacre/src/pmc/bignum.pmc
   branches/gc_massacre/src/pmc/boolean.pmc
   branches/gc_massacre/src/pmc/callcontext.pmc
   branches/gc_massacre/src/pmc/capture.pmc
   branches/gc_massacre/src/pmc/class.pmc
   branches/gc_massacre/src/pmc/complex.pmc
   branches/gc_massacre/src/pmc/coroutine.pmc
   branches/gc_massacre/src/pmc/default.pmc
   branches/gc_massacre/src/pmc/env.pmc
   branches/gc_massacre/src/pmc/eval.pmc
   branches/gc_massacre/src/pmc/exception.pmc
   branches/gc_massacre/src/pmc/fixedintegerarray.pmc
   branches/gc_massacre/src/pmc/fixedpmcarray.pmc
   branches/gc_massacre/src/pmc/fixedstringarray.pmc
   branches/gc_massacre/src/pmc/float.pmc
   branches/gc_massacre/src/pmc/hash.pmc
   branches/gc_massacre/src/pmc/hashiterator.pmc
   branches/gc_massacre/src/pmc/imageio.pmc
   branches/gc_massacre/src/pmc/imageiosize.pmc
   branches/gc_massacre/src/pmc/imageiostrings.pmc
   branches/gc_massacre/src/pmc/integer.pmc
   branches/gc_massacre/src/pmc/lexinfo.pmc
   branches/gc_massacre/src/pmc/multisub.pmc
   branches/gc_massacre/src/pmc/namespace.pmc
   branches/gc_massacre/src/pmc/nci.pmc
   branches/gc_massacre/src/pmc/null.pmc
   branches/gc_massacre/src/pmc/object.pmc
   branches/gc_massacre/src/pmc/opcode.pmc
   branches/gc_massacre/src/pmc/oplib.pmc
   branches/gc_massacre/src/pmc/orderedhash.pmc
   branches/gc_massacre/src/pmc/packfile.pmc
   branches/gc_massacre/src/pmc/packfiledirectory.pmc
   branches/gc_massacre/src/pmc/parrotinterpreter.pmc
   branches/gc_massacre/src/pmc/parrotlibrary.pmc
   branches/gc_massacre/src/pmc/resizablepmcarray.pmc
   branches/gc_massacre/src/pmc/role.pmc
   branches/gc_massacre/src/pmc/stringbuilder.pmc
   branches/gc_massacre/src/pmc/stringhandle.pmc
   branches/gc_massacre/src/pmc/stringiterator.pmc
   branches/gc_massacre/src/pmc/sub.pmc
   branches/gc_massacre/src/pmc/threadinterpreter.pmc
   branches/gc_massacre/src/pmc/undef.pmc
   branches/gc_massacre/src/pmc_freeze.c
   branches/gc_massacre/src/runcore/cores.c
   branches/gc_massacre/src/runcore/main.c
   branches/gc_massacre/src/runcore/profiling.c
   branches/gc_massacre/src/runcore/trace.c
   branches/gc_massacre/src/scheduler.c
   branches/gc_massacre/src/string/api.c
   branches/gc_massacre/src/string/charset/ascii.c
   branches/gc_massacre/src/string/charset/iso-8859-1.c
   branches/gc_massacre/src/string/charset/unicode.c
   branches/gc_massacre/src/string/encoding/fixed_8.c
   branches/gc_massacre/src/string/encoding/ucs2.c
   branches/gc_massacre/src/string/encoding/ucs4.c
   branches/gc_massacre/src/string/encoding/utf16.c
   branches/gc_massacre/src/string/encoding/utf8.c
   branches/gc_massacre/src/string/primitives.c
   branches/gc_massacre/src/sub.c
   branches/gc_massacre/t/codingstd/c_macro_args.t
   branches/gc_massacre/t/codingstd/c_operator.t
   branches/gc_massacre/t/codingstd/c_todo.t
   branches/gc_massacre/t/codingstd/perlcritic.t
   branches/gc_massacre/t/codingstd/pir_code_coda.t
   branches/gc_massacre/t/compilers/imcc/syn/const.t
   branches/gc_massacre/t/compilers/pge/p5regex/p5rx.t
   branches/gc_massacre/t/dynoplibs/debug.t
   branches/gc_massacre/t/dynoplibs/deprecated.t
   branches/gc_massacre/t/dynoplibs/trans-infnan.t
   branches/gc_massacre/t/dynoplibs/trans.t
   branches/gc_massacre/t/examples/pir.t
   branches/gc_massacre/t/native_pbc/integer.pbc
   branches/gc_massacre/t/native_pbc/integer_1.pbc
   branches/gc_massacre/t/native_pbc/integer_2.pbc
   branches/gc_massacre/t/native_pbc/number.pbc
   branches/gc_massacre/t/native_pbc/number_1.pbc
   branches/gc_massacre/t/native_pbc/number_2.pbc
   branches/gc_massacre/t/native_pbc/string.pbc
   branches/gc_massacre/t/native_pbc/string_1.pbc
   branches/gc_massacre/t/native_pbc/string_2.pbc
   branches/gc_massacre/t/oo/isa.t
   branches/gc_massacre/t/op/calling.t
   branches/gc_massacre/t/op/cmp-nonbranch.t
   branches/gc_massacre/t/op/integer.t
   branches/gc_massacre/t/op/lexicals.t
   branches/gc_massacre/t/op/string.t
   branches/gc_massacre/t/perl/Parrot_Test.t
   branches/gc_massacre/t/pmc/bigint.t
   branches/gc_massacre/t/pmc/exception.t
   branches/gc_massacre/t/pmc/exceptionhandler.t
   branches/gc_massacre/t/pmc/float.t
   branches/gc_massacre/t/pmc/hash.t
   branches/gc_massacre/t/pmc/lexinfo.t
   branches/gc_massacre/t/pmc/object-meths.t
   branches/gc_massacre/t/pmc/oplib.t
   branches/gc_massacre/t/pmc/packfile.t
   branches/gc_massacre/t/pmc/packfileannotations.t
   branches/gc_massacre/t/pmc/packfileconstanttable.t
   branches/gc_massacre/t/pmc/packfiledirectory.t
   branches/gc_massacre/t/pmc/packfilefixupentry.t
   branches/gc_massacre/t/pmc/packfilefixuptable.t
   branches/gc_massacre/t/pmc/packfilerawsegment.t
   branches/gc_massacre/t/pmc/pmc.t
   branches/gc_massacre/t/pmc/stringbuilder.t
   branches/gc_massacre/t/pmc/stringiterator.t
   branches/gc_massacre/t/pmc/testlib/packfile_common.pir
   branches/gc_massacre/t/pmc/timer.t
   branches/gc_massacre/t/run/options.t
   branches/gc_massacre/t/src/extend.t
   branches/gc_massacre/t/src/warnings.t
   branches/gc_massacre/t/steps/auto/pmc-01.t
   branches/gc_massacre/t/tools/dump_pbc.t
   branches/gc_massacre/tools/dev/as2c.pl   (contents, props changed)
   branches/gc_massacre/tools/dev/faces.pl
   branches/gc_massacre/tools/dev/fetch_languages.pl
   branches/gc_massacre/tools/dev/mk_native_pbc
   branches/gc_massacre/tools/dev/pbc_to_exe.pir

Modified: branches/gc_massacre/CREDITS
==============================================================================
--- branches/gc_massacre/CREDITS	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/CREDITS	Sun Sep  5 13:20:27 2010	(r48799)
@@ -248,7 +248,7 @@
 A: christoph_googleacct at mksig.org
 A: christop... at mksig.org
 A: Christoph Otto
-D: Pipp
+D: Pipp, Lorito taskmaster
 E: christoph at mksig.org
 
 N: chromatic
@@ -642,6 +642,10 @@
 E: lt at toetsch.at
 S: Herrnbaumgarten, Austria
 
+N: Luben Karavelov
+U: luben
+E: luben at unixsol.org
+
 N: Luca Barbato
 D: fix to make installable
 E: lu_zero at gentoo.org
@@ -769,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
 
@@ -810,6 +819,12 @@
 D: Pynie
 E: pmichaud at pobox.com
 
+N: Paul C. Anagnostopoulos
+U: Paul_the_Greek
+A: Paul C. Anagnostopoulos
+E: paul at windfall.com
+D: Improving memory management documentation
+
 N: Paul Cochrane
 U: paultcochrane
 D: Changing the newspaper in the parrot cage

Modified: branches/gc_massacre/ChangeLog
==============================================================================
--- branches/gc_massacre/ChangeLog	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/ChangeLog	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/DEPRECATED.pod
==============================================================================
--- branches/gc_massacre/DEPRECATED.pod	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/DEPRECATED.pod	Sun Sep  5 13:20:27 2010	(r48799)
@@ -71,13 +71,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/103>
 
-=item NCI without signature ("raw" pointers) [eligible in 2.4]
-
-No equivalent functionality is promised. You shouldn't be using this. Here be
-segfaults.
-
-L<https://trac.parrot.org/parrot/ticket/1549>
-
 =item UnManagedStruct handling nested structure [eligible in 2.4]
 
 UnManagedStruct will be simplified to only support flat structures. This means
@@ -147,6 +140,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
@@ -249,6 +248,10 @@
 
 L<https://trac.parrot.org/parrot/ticket/1655>
 
+=item errorson, errorsoff operations [eligible in 2.10]
+
+The C<.PARROT_ERRORS_GLOBAL_FLAG> flag will be eliminated. It is not used by Parrot.
+
 =back
 
 =head1 Bytecode
@@ -344,12 +347,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/443>
 
-=item C<Parrot_find_global_s> and C<Parrot_store_global_s>
-
-This function is not used or tested anywhere.
-
-http://trac.parrot.org/parrot/ticket/1660
-
 =item PMC Attributes Allocation Functions [experimental]
 
  Parrot_gc_allocate_pmc_attributes
@@ -385,6 +382,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/gc_massacre/MANIFEST
==============================================================================
--- branches/gc_massacre/MANIFEST	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/MANIFEST	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Tue Aug  3 22:47:23 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sun Sep  5 23:53:29 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -214,6 +214,8 @@
 config/auto/isreg.pm                                        []
 config/auto/isreg/test_c.in                                 []
 config/auto/jit.pm                                          []
+config/auto/llvm.pm                                         []
+config/auto/llvm/hello.c                                    []
 config/auto/memalign.pm                                     []
 config/auto/memalign/test2_c.in                             []
 config/auto/memalign/test_c.in                              []
@@ -275,6 +277,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 +292,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 +317,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                            []
@@ -600,11 +605,6 @@
 examples/io/http.pir                                        [examples]
 examples/io/httpd.pir                                       [examples]
 examples/io/post.pir                                        [examples]
-examples/japh/README                                        [examples]
-examples/japh/japh1.pasm                                    [examples]
-examples/japh/japh3.pasm                                    [examples]
-examples/japh/japh4.pasm                                    [examples]
-examples/japh/japh5.pasm                                    [examples]
 examples/json/postalcodes.pir                               [examples]
 examples/json/test.pir                                      [examples]
 examples/languages/abc/MAINTAINER                           [examples]
@@ -822,6 +822,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]
@@ -1244,7 +1245,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                                []
@@ -1283,8 +1283,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                                                []
@@ -1351,6 +1349,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                                       []
@@ -1400,6 +1399,7 @@
 src/pmc/managedstruct.pmc                                   []
 src/pmc/multisub.pmc                                        []
 src/pmc/namespace.pmc                                       []
+src/pmc/nativepccmethod.pmc                                 []
 src/pmc/nci.pmc                                             []
 src/pmc/null.pmc                                            []
 src/pmc/object.pmc                                          []
@@ -1512,6 +1512,7 @@
 t/codingstd/pdd_format.t                                    [test]
 t/codingstd/perlcritic.t                                    [test]
 t/codingstd/pir_code_coda.t                                 [test]
+t/codingstd/pmc_docs.t                                      [test]
 t/codingstd/pod_description.t                               [test]
 t/codingstd/pod_syntax.t                                    [test]
 t/codingstd/pod_todo.t                                      [test]
@@ -1690,11 +1691,11 @@
 t/dynpmc/subclass_with_pir_method.t                         [test]
 t/dynpmc/subproxy.t                                         [test]
 t/examples/catchall.t                                       [test]
-t/examples/japh.t                                           [test]
 t/examples/library.t                                        [test]
 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]
@@ -1745,7 +1746,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]
@@ -1774,7 +1774,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]
@@ -1813,7 +1812,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]
@@ -1956,6 +1957,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]
@@ -1995,6 +1998,7 @@
 t/steps/auto/inline-01.t                                    [test]
 t/steps/auto/isreg-01.t                                     [test]
 t/steps/auto/jit-01.t                                       [test]
+t/steps/auto/llvm-01.t                                      [test]
 t/steps/auto/memalign-01.t                                  [test]
 t/steps/auto/msvc-01.t                                      [test]
 t/steps/auto/neg_0-01.t                                     [test]
@@ -2086,7 +2090,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]
@@ -2095,11 +2098,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                                 []
@@ -2107,18 +2109,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                                  []
@@ -2128,7 +2134,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                                  []
@@ -2136,9 +2142,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                                     []
@@ -2147,6 +2155,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]
@@ -2154,6 +2165,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                                         []
@@ -2164,19 +2176,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/gc_massacre/MANIFEST.SKIP
==============================================================================
--- branches/gc_massacre/MANIFEST.SKIP	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/MANIFEST.SKIP	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Tue Aug  3 22:47:23 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
@@ -1041,6 +1041,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/.*_.*/
@@ -1072,6 +1075,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/gc_massacre/MANIFEST.generated
==============================================================================
--- branches/gc_massacre/MANIFEST.generated	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/MANIFEST.generated	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/NEWS
==============================================================================
--- branches/gc_massacre/NEWS	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/NEWS	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/PBC_COMPAT
==============================================================================
--- branches/gc_massacre/PBC_COMPAT	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/PBC_COMPAT	Sun Sep  5 13:20:27 2010	(r48799)
@@ -28,6 +28,8 @@
 
 # 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)
 6.6	2010.04.17	bacek	add replace op

Modified: branches/gc_massacre/README
==============================================================================
--- branches/gc_massacre/README	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/README	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/RESPONSIBLE_PARTIES
==============================================================================
--- branches/gc_massacre/RESPONSIBLE_PARTIES	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/RESPONSIBLE_PARTIES	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/VERSION
==============================================================================
--- branches/gc_massacre/VERSION	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/VERSION	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1 +1 @@
-2.6.0
+2.7.0

Modified: branches/gc_massacre/compilers/imcc/cfg.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/cfg.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/cfg.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -463,7 +463,7 @@
     if (r && (r->type & VTADDRESS) && r->first_ins)
         bb_add_edge(interp, unit, from, unit->bb_list[r->first_ins->bbindex]);
     else {
-        IMCC_debug(interp, DEBUG_CFG, "register branch %I ", from->end);
+        IMCC_debug(interp, DEBUG_CFG, "register branch %d ", from->end);
         for (ins = from->end; ins; ins = ins->prev) {
             if ((ins->type & ITBRANCH)
             &&   STREQ(ins->opname, "set_addr")

Modified: branches/gc_massacre/compilers/imcc/imc.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/imc.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/imc.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -97,6 +97,7 @@
     }
 
     IMCC_INFO(interp)->imc_units = NULL;
+    IMCC_INFO(interp)->cur_unit  = NULL;
     IMCC_INFO(interp)->last_unit = NULL;
 }
 

Modified: branches/gc_massacre/compilers/imcc/imcc.l
==============================================================================
--- branches/gc_massacre/compilers/imcc/imcc.l	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/imcc.l	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1457,7 +1457,7 @@
             if (((r->pcc_sub->pragma & P_METHOD)
             ||   (IMCC_INFO(interp)->cur_unit->is_vtable_method))
             &&   !strcmp(text, "self")) {
-                valp->sr = mk_ident(interp, "self", 'P');
+                valp->sr = mk_ident(interp, "self", 'P', VTIDENTIFIER);
                 IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
                 return VAR;
             }

Modified: branches/gc_massacre/compilers/imcc/imcc.y
==============================================================================
--- branches/gc_massacre/compilers/imcc/imcc.y	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/imcc.y	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1447,7 +1447,7 @@
            }
            if ($3 & VT_NAMED && !($3 & VT_FLAT) && !IMCC_INFO(interp)->adv_named_id)
                adv_named_set(interp, $2);
-           $$ = mk_ident(interp, $2, $1);
+           $$ = mk_ident(interp, $2, $1, VTIDENTIFIER);
            $$->type |= $3;
            mem_sys_free($2);
           }
@@ -1730,7 +1730,7 @@
          {
            IdList * const l = $4;
            SymReg *ignored;
-           ignored = mk_ident(interp, l->id, $3);
+           ignored = mk_ident(interp, l->id, $3, VTIDENTIFIER);
            UNUSED(ignored);
            IMCC_INFO(interp)->is_def = 0;
            $$ = 0;
@@ -1959,7 +1959,7 @@
            IdList *l = $4;
            while (l) {
                IdList *l1;
-               mk_ident(interp, l->id, $3);
+               mk_ident(interp, l->id, $3, VTIDENTIFIER);
                l1 = l;
                l  = l->next;
                mem_sys_free(l1->id);

Modified: branches/gc_massacre/compilers/imcc/imclexer.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/imclexer.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/imclexer.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -75,7 +75,6 @@
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -106,6 +105,8 @@
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#endif /* ! C99 */
+
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -179,7 +180,15 @@
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -2514,7 +2523,7 @@
 
 
 
-#line 2518 "compilers/imcc/imclexer.c"
+#line 2527 "compilers/imcc/imclexer.c"
 
 #define INITIAL 0
 #define emit 1
@@ -2649,7 +2658,12 @@
     
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -2657,7 +2671,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -2668,7 +2682,7 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		int n; \
+		size_t n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -2773,7 +2787,7 @@
             return 0;
         }
 
-#line 2777 "compilers/imcc/imclexer.c"
+#line 2791 "compilers/imcc/imclexer.c"
 
 	if ( !yyg->yy_init )
 		{
@@ -3967,7 +3981,7 @@
 #line 725 "compilers/imcc/imcc.l"
 ECHO;
 	YY_BREAK
-#line 3971 "compilers/imcc/imclexer.c"
+#line 3985 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -4756,8 +4770,8 @@
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
@@ -5914,7 +5928,7 @@
             if (((r->pcc_sub->pragma & P_METHOD)
             ||   (IMCC_INFO(interp)->cur_unit->is_vtable_method))
             &&   !strcmp(text, "self")) {
-                valp->sr = mk_ident(interp, "self", 'P');
+                valp->sr = mk_ident(interp, "self", 'P', VTIDENTIFIER);
                 IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
                 return VAR;
             }

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

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

Modified: branches/gc_massacre/compilers/imcc/instructions.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/instructions.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/instructions.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -826,7 +826,7 @@
         (emitters[emitter]).new_sub(interp, param, unit);
 
     for (ins = unit->instructions; ins; ins = ins->next) {
-        IMCC_debug(interp, DEBUG_IMC, "emit %I\n", ins);
+        IMCC_debug(interp, DEBUG_IMC, "emit %d\n", ins);
         (emitters[emitter]).emit(interp, param, unit, ins);
     }
 

Modified: branches/gc_massacre/compilers/imcc/optimizer.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/optimizer.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/optimizer.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -461,12 +461,12 @@
                 ins->opnum == PARROT_OP_mul_n_nc_n) &&
              (ins->symregs[0] == ins->symregs[1] ||
               ins->symregs[0] == ins->symregs[2]))) {
-            IMCC_debug(interp, DEBUG_OPT1, "opt1 %I => ", ins);
+            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             if (ins->symregs[0] == ins->symregs[1]) {
                 ins->symregs[1] = ins->symregs[2];
             }
             tmp = INS(interp, unit, ins->opname, "", ins->symregs, 2, 0, 0);
-            IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
+            IMCC_debug(interp, DEBUG_OPT1, "%d\n", tmp);
             subst_ins(unit, ins, tmp, 1);
             ins = tmp;
             changes = 1;
@@ -497,7 +497,7 @@
                 ins->opnum == PARROT_OP_div_n_nc ||
                 ins->opnum == PARROT_OP_fdiv_n_nc) &&
                       atof(ins->symregs[1]->name) == 1.0)) {
-            IMCC_debug(interp, DEBUG_OPT1, "opt1 %I => ", ins);
+            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             ins = delete_ins(unit, ins);
             if (ins)
                 ins = ins->prev ? ins->prev : unit->instructions;
@@ -519,7 +519,7 @@
           || ((ins->opnum == PARROT_OP_add_n_nc ||
                 ins->opnum == PARROT_OP_sub_n_nc) &&
                       atof(ins->symregs[1]->name) == 1.0)) {
-            IMCC_debug(interp, DEBUG_OPT1, "opt1 %I => ", ins);
+            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             --ins->symregs[1]->use_count;
             if (ins->opnum == PARROT_OP_add_i_ic ||
                 ins->opnum == PARROT_OP_add_n_nc)
@@ -527,7 +527,7 @@
             else
                 tmp = INS(interp, unit, "dec", "", ins->symregs, 1, 0, 0);
             subst_ins(unit, ins, tmp, 1);
-            IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
+            IMCC_debug(interp, DEBUG_OPT1, "%d\n", tmp);
             ins = tmp;
             changes = 1;
             continue;
@@ -570,7 +570,7 @@
                       atof(ins->symregs[2]->name) == 1.0)
           || (ins->opnum == PARROT_OP_mul_n_nc_n &&
                       atof(ins->symregs[1]->name) == 1.0)) {
-            IMCC_debug(interp, DEBUG_OPT1, "opt1 %I => ", ins);
+            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             if (ins->symregs[1]->type == VTCONST) {
                 --ins->symregs[1]->use_count;
                 ins->symregs[1] = ins->symregs[2];
@@ -579,7 +579,7 @@
                 --ins->symregs[2]->use_count;
             }
             tmp = INS(interp, unit, "set", "", ins->symregs, 2, 0, 0);
-            IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
+            IMCC_debug(interp, DEBUG_OPT1, "%d\n", tmp);
             subst_ins(unit, ins, tmp, 1);
             ins = tmp;
             changes = 1;
@@ -600,14 +600,14 @@
           || ((ins->opnum == PARROT_OP_mul_n_nc_n ||
                 ins->opnum == PARROT_OP_mul_n_nc) &&
                 (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f)))) {
-            IMCC_debug(interp, DEBUG_OPT1, "opt1 %I => ", ins);
+            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             r = mk_const(interp, "0", ins->symregs[0]->set);
             --ins->symregs[1]->use_count;
             if (ins->opsize == 4)
                 --ins->symregs[2]->use_count;
             ins->symregs[1] = r;
             tmp = INS(interp, unit, "set", "", ins->symregs, 2, 0, 0);
-            IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
+            IMCC_debug(interp, DEBUG_OPT1, "%d\n", tmp);
             subst_ins(unit, ins, tmp, 1);
             ins = tmp;
             changes = 1;
@@ -621,11 +621,11 @@
           || (ins->opnum == PARROT_OP_set_n_nc &&
              (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f)) &&
               ins->symregs[1]->name[0] != '-')) {
-            IMCC_debug(interp, DEBUG_OPT1, "opt1 %I => ", ins);
+            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             --ins->symregs[1]->use_count;
             tmp = INS(interp, unit, "null", "", ins->symregs, 1, 0, 0);
             subst_ins(unit, ins, tmp, 1);
-            IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
+            IMCC_debug(interp, DEBUG_OPT1, "%d\n", tmp);
             ins = tmp;
             changes = 1;
             continue;
@@ -677,7 +677,7 @@
             Instruction *ins2;
 
             IMCC_debug(interp, DEBUG_OPT2,
-                    "propagating constant %I => \n", ins);
+                    "propagating constant %d => \n", ins);
             for (ins2 = ins->next; ins2; ins2 = ins2->next) {
                 int i;
                 if (ins2->bbindex != ins->bbindex)
@@ -694,7 +694,7 @@
                             SymReg *old;
 
                             IMCC_debug(interp, DEBUG_OPT2,
-                                    "\tpropagating into %I register %i",
+                                    "\tpropagating into %d register %i",
                                     ins2, i);
                             old = ins2->symregs[i];
                             ins2->symregs[i] = c;
@@ -708,7 +708,7 @@
                                     subst_ins(unit, ins2, tmp, 1);
                                     any = 1;
                                     IMCC_debug(interp, DEBUG_OPT2,
-                                            " reduced to %I\n", tmp);
+                                            " reduced to %d\n", tmp);
                                     ins2 = prev->next;
                                 }
                             }
@@ -726,7 +726,7 @@
                                     ins2->opnum = op;
                                     any = 1;
                                     IMCC_debug(interp, DEBUG_OPT2,
-                                            " -> %I\n", ins2);
+                                            " -> %d\n", ins2);
                                 }
                             }
                         }
@@ -777,7 +777,7 @@
             strcpy(b, r[1]->name);
             r[1] = mk_const(interp, b, 'N');
             tmp = INS(interp, unit, name, "", r, 2, 0, 0);
-            IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
+            IMCC_debug(interp, DEBUG_OPT1, "%d\n", tmp);
         }
     }
     return tmp;
@@ -1067,7 +1067,7 @@
         tmp = INS(interp, unit, "set", "", r, 2, 0, 0);
     }
     if (tmp) {
-        IMCC_debug(interp, DEBUG_OPT1, "%I\n", tmp);
+        IMCC_debug(interp, DEBUG_OPT1, "%d\n", tmp);
     }
     *ok = 1;
     return tmp;
@@ -1116,7 +1116,7 @@
                         !STREQ(next->symregs[0]->name, get_branch_reg(ins)->name)) {
                     const int regno = get_branch_regno(ins);
                     IMCC_debug(interp, DEBUG_OPT1,
-                            "found branch to branch '%s' %I\n",
+                            "found branch to branch '%s' %d\n",
                             r->first_ins->symregs[0]->name, next);
                     unit->ostat.branch_branch++;
                     if (regno < 0)
@@ -1209,7 +1209,7 @@
                         start->prev = ins;
 
                         IMCC_debug(interp, DEBUG_OPT1,
-                                "found branch to reorganize '%s' %I\n",
+                                "found branch to reorganize '%s' %d\n",
                                 r->first_ins->symregs[0]->name, ins);
 
                         /* unconditional jump can be eliminated */
@@ -1507,7 +1507,7 @@
 
             for (ins = bb->start; ins && ins->bbindex == bbi;) {
                 IMCC_debug(interp, DEBUG_OPT1,
-                        "\tins deleted (dead block) %I\n", ins);
+                        "\tins deleted (dead block) %d\n", ins);
                 ins = delete_ins(unit, ins);
                 unit->ostat.deleted_ins++;
                 changed++;
@@ -1525,7 +1525,7 @@
         if ((last->type & IF_goto) && !(ins->type & ITLABEL) &&
             STREQ(last->opname, "branch")) {
             IMCC_debug(interp, DEBUG_OPT1,
-                    "unreachable ins deleted (after branch) %I\n", ins);
+                    "unreachable ins deleted (after branch) %d\n", ins);
             ins = delete_ins(unit, ins);
             unit->ostat.deleted_ins++;
             changed++;
@@ -1538,7 +1538,7 @@
         if (ins && last && (last->type & IF_goto) && (ins->type & ITLABEL) &&
                 STREQ(last->opname, "branch") &&
                 STREQ(last->symregs[0]->name, ins->symregs[0]->name)) {
-            IMCC_debug(interp, DEBUG_OPT1, "dead branch deleted %I\n", ins);
+            IMCC_debug(interp, DEBUG_OPT1, "dead branch deleted %d\n", ins);
             ins = delete_ins(unit, last);
             unit->ostat.deleted_ins++;
             changed++;
@@ -1572,7 +1572,7 @@
         if (ins->symregs) {
             SymReg * const r = ins->symregs[0];
             if (r && (r->use_count == 1 && r->lhs_use_count == 1)) {
-                IMCC_debug(interp, DEBUG_OPT2, "used once '%I' deleted\n", ins);
+                IMCC_debug(interp, DEBUG_OPT2, "used once '%d' deleted\n", ins);
                 ins = delete_ins(unit, ins);
 
                 /* find previous instruction or first instruction of this CU

Modified: branches/gc_massacre/compilers/imcc/parser_util.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/parser_util.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/parser_util.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/compilers/imcc/pbc.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/pbc.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/pbc.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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);
@@ -666,7 +666,7 @@
             (*src_lines)++;
             if (ins->opnum < 0)
                 IMCC_fatal(interp, 1, "get_code_size: "
-                        "no opnum ins#%d %I\n",
+                        "no opnum ins#%d %d\n",
                         ins->index, ins);
 
             if (ins->opnum == PARROT_OP_set_p_pc) {
@@ -691,6 +691,85 @@
 
 /*
 
+=item C<opcode_t bytecode_map_op(PARROT_INTERP, opcode_t op)>
+
+Lookup the mapping of an op for the current bytecode segment or make one if
+none exists.
+
+=cut
+
+*/
+
+static
+opcode_t
+bytecode_map_op(PARROT_INTERP, opcode_t op) {
+    int i;
+    op_info_t         *info    = &interp->op_info_table[op];
+    op_lib_t          *lib     = info->lib;
+    op_func_t         op_func  = interp->op_func_table[op];
+    PackFile_ByteCode *bc      = interp->code;
+    PackFile_ByteCode_OpMappingEntry *om;
+
+    for (i = 0; i < bc->op_mapping.n_libs; i++) {
+        if (lib == bc->op_mapping.libs[i].lib) {
+            om = &bc->op_mapping.libs[i];
+            goto found_lib;
+        }
+    }
+
+    /* library not yet mapped */
+    bc->op_mapping.n_libs++;
+    bc->op_mapping.libs = mem_gc_realloc_n_typed_zeroed(interp, bc->op_mapping.libs,
+                            bc->op_mapping.n_libs, bc->op_mapping.n_libs - 1,
+                            PackFile_ByteCode_OpMappingEntry);
+
+    /* initialize a new lib entry */
+    om            = &bc->op_mapping.libs[bc->op_mapping.n_libs - 1];
+    om->lib       = lib;
+    om->n_ops     = 0;
+    om->lib_ops   = mem_gc_allocate_n_zeroed_typed(interp, 0, opcode_t);
+    om->table_ops = mem_gc_allocate_n_zeroed_typed(interp, 0, opcode_t);
+
+  found_lib:
+    for (i = 0; i < om->n_ops; i++) {
+        if (bc->op_func_table[om->table_ops[i]] == op_func)
+            return om->table_ops[i];
+    }
+
+    /* op not yet mapped */
+    bc->op_count++;
+    bc->op_func_table =
+        mem_gc_realloc_n_typed_zeroed(interp, bc->op_func_table, bc->op_count, bc->op_count - 1,
+                                        op_func_t);
+    bc->op_func_table[bc->op_count - 1] = op_func;
+    bc->op_info_table =
+        mem_gc_realloc_n_typed_zeroed(interp, bc->op_info_table, bc->op_count, bc->op_count - 1,
+                                        op_info_t *);
+    bc->op_info_table[bc->op_count - 1] = info;
+
+    /* initialize new op mapping */
+    om->n_ops++;
+
+    om->lib_ops =
+        mem_gc_realloc_n_typed_zeroed(interp, om->lib_ops, om->n_ops, om->n_ops - 1, opcode_t);
+    for (i = 0; i < lib->op_count; i++) {
+        if (lib->op_func_table[i] == op_func) {
+            om->lib_ops[om->n_ops - 1] = i;
+            break;
+        }
+    }
+    PARROT_ASSERT(om->lib_ops[om->n_ops - 1] || !i);
+
+    om->table_ops =
+        mem_gc_realloc_n_typed_zeroed(interp, om->table_ops, om->n_ops, om->n_ops - 1, opcode_t);
+    om->table_ops[om->n_ops - 1] = bc->op_count - 1;
+
+    return bc->op_count - 1;
+}
+
+
+/*
+
 =item C<static subs_t * find_global_label(PARROT_INTERP, const char *name, const
 subs_t *sym, int *pc)>
 
@@ -836,7 +915,7 @@
                     const int op = interp->op_lib->op_code(interp, "find_sub_not_null_p_sc", 1);
                     PARROT_ASSERT(op);
 
-                    interp->code->base.data[addr] = op;
+                    interp->code->base.data[addr] = bytecode_map_op(interp, op);
 
                     if (nam->color < 0)
                         nam->color = add_const_str(interp, IMCC_string_from_reg(interp, nam));
@@ -1437,7 +1516,7 @@
     sub->namespace_name = ns_pmc;
     sub->start_offs     = offs;
     sub->end_offs       = end;
-    sub->HLL_id         = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp));
+    sub->HLL_id         = unit->hll_id;
 
     for (i = 0; i < 4; ++i)
         sub->n_regs_used[i] = unit->n_regs_used[i];
@@ -1643,22 +1722,20 @@
 
     for (key_length = 0; reg ; reg = reg->nextkey, key_length++) {
         SymReg *r = reg;
-        int     type;
 
         if (key_length >= MAX_KEY_LEN)
             IMCC_fatal(interp, 1, "build_key:"
                     "Key too long, increase MAX_KEY_LEN.\n");
 
-        /* if key is a register, the original sym is in r->reg */
-        type = r->type;
-
-        if (r->reg)
-            r = r->reg;
-
-        switch (type) {
+        switch (r->type) {
           case VTIDENTIFIER:       /* P[S0] */
           case VTPASM:             /* P[S0] */
           case VTREG:              /* P[S0] */
+
+            /* if key is a register, the original sym is in r->reg */
+            if (r->reg)
+                r = r->reg;
+
             if (r->set == 'I')
                 *pc++ = PARROT_ARG_I;    /* register type */
             else if (r->set == 'S')
@@ -1678,7 +1755,9 @@
                     " keypart reg %s %c%d\n",
                     r->name, r->set, (int)r->color);
             break;
+
           case VT_CONSTP:
+            r = r->reg;
           case VTCONST:
           case VTCONST|VT_ENCODED:
             switch (r->set) {
@@ -1711,7 +1790,7 @@
             break;
           default:
             IMCC_fatal(interp, 1, "build_key: "
-                    "unknown type 0x%x on %s\n", type, r->name);
+                    "unknown type 0x%x on %s\n", r->type, r->name);
         }
     }
 
@@ -1969,7 +2048,7 @@
             SymReg *key = r;
 
             for (r = r->nextkey; r; r = r->nextkey)
-                if (r->type & VTCONST)
+                if (r->type & (VTCONST|VT_CONSTP))
                     add_1_const(interp, r);
                 build_key(interp, key);
         }
@@ -2297,7 +2376,7 @@
                     &interp->initial_pf->directory;
             interp->code->annotations = (PackFile_Annotations *)
                     PackFile_Segment_new_seg(interp, dir,
-                        PF_ANNOTATIONS_SEG, name, add);
+                        PF_ANNOTATIONS_SEG, name, 1);
             interp->code->annotations->code = interp->code;
 
             /* Create initial group. */
@@ -2351,15 +2430,15 @@
 
         op = (opcode_t)ins->opnum;
 
-        /* Start generating the bytecode */
-        *(IMCC_INFO(interp)->pc)++   = op;
-
         /* Get the info for that opcode */
         op_info = &interp->op_info_table[op];
 
         IMCC_debug(interp, DEBUG_PBC, "%d %s", IMCC_INFO(interp)->npc,
             op_info->full_name);
 
+        /* Start generating the bytecode */
+        *(IMCC_INFO(interp)->pc)++ = bytecode_map_op(interp, op);
+
         for (i = 0; i < op_info->op_count-1; i++) {
             switch (op_info->types[i]) {
               case PARROT_ARG_IC:
@@ -2429,7 +2508,7 @@
             }
         }
 
-        IMCC_debug(interp, DEBUG_PBC, "\t%I\n", ins);
+        IMCC_debug(interp, DEBUG_PBC, "\t%d\n", ins);
         IMCC_INFO(interp)->npc += ins->opsize;
     }
 

Modified: branches/gc_massacre/compilers/imcc/pcc.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/pcc.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/pcc.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -471,7 +471,7 @@
             tmp = INS(interp, unit, "returncc", NULL, regs, 0, 0, 0);
         }
 
-        IMCC_debug(interp, DEBUG_IMC, "add sub ret - %I\n", tmp);
+        IMCC_debug(interp, DEBUG_IMC, "add sub ret - %d\n", tmp);
         insert_ins(unit, unit->last_ins, tmp);
     }
 }

Modified: branches/gc_massacre/compilers/imcc/sets.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/sets.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/sets.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -154,6 +154,7 @@
 
 */
 
+PARROT_PURE_FUNCTION
 int
 set_equal(ARGIN(const Set *s1), ARGIN(const Set *s2))
 {

Modified: branches/gc_massacre/compilers/imcc/sets.h
==============================================================================
--- branches/gc_massacre/compilers/imcc/sets.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/sets.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/compilers/imcc/symreg.c
==============================================================================
--- branches/gc_massacre/compilers/imcc/symreg.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/symreg.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -298,7 +298,7 @@
 mk_symreg(PARROT_INTERP, ARGIN(const char *name), int t)
 {
     ASSERT_ARGS(mk_symreg)
-    IMC_Unit * const unit = IMCC_INFO(interp)->last_unit;
+    IMC_Unit * const unit = IMCC_INFO(interp)->cur_unit;
 
     /* Check for the condition that fires up a segfault in TT #162 */
     PARROT_ASSERT(unit != NULL);
@@ -393,7 +393,7 @@
 mk_pcc_sub(PARROT_INTERP, ARGIN(const char *name), int proto)
 {
     ASSERT_ARGS(mk_pcc_sub)
-    IMC_Unit * const unit = IMCC_INFO(interp)->last_unit;
+    IMC_Unit * const unit = IMCC_INFO(interp)->cur_unit;
     SymReg   * const r    = _mk_symreg(interp, &unit->hash, name, proto);
 
     r->type    = VT_PCC_SUB;
@@ -407,7 +407,7 @@
 
 =item C<void add_namespace(PARROT_INTERP, IMC_Unit *unit)>
 
-Add the current namespace to a sub declaration.
+Add the current namespace (and HLL id) to a sub declaration.
 
 =cut
 
@@ -419,6 +419,8 @@
     ASSERT_ARGS(add_namespace)
     SymReg * const ns = IMCC_INFO(interp)->cur_namespace;
 
+    unit->hll_id = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp));
+
     if (!ns)
         return;
 
@@ -632,7 +634,7 @@
 
 /*
 
-=item C<SymReg * mk_ident(PARROT_INTERP, const char *name, int t)>
+=item C<SymReg * mk_ident(PARROT_INTERP, const char *name, int t, INTVAL type)>
 
 Makes a new identifier.
 
@@ -643,18 +645,17 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_IGNORABLE_RESULT
 SymReg *
-mk_ident(PARROT_INTERP, ARGIN(const char *name), int t)
+mk_ident(PARROT_INTERP, ARGIN(const char *name), int t, INTVAL type)
 {
     ASSERT_ARGS(mk_ident)
     char   * const fullname = _mk_fullname(interp, IMCC_INFO(interp)->namespace_stack, name);
-    SymReg *r = get_sym_by_name(&(IMCC_INFO(interp)->last_unit->hash), name);
-    if (r && r->set != t)
+    SymReg *r = get_sym_by_name(&(IMCC_INFO(interp)->cur_unit->hash), name);
+    if (r && (r->set != t || r->type != type))
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                 "syntax error, duplicated IDENTIFIER '%s'\n", fullname);
 
     r = mk_symreg(interp, fullname, t);
-    r->type = VTIDENTIFIER;
-
+    r->type = type;
 
     if (IMCC_INFO(interp)->namespace_stack) {
         Identifier * const ident = mem_gc_allocate_zeroed_typed(interp, Identifier);
@@ -766,16 +767,17 @@
                     "global PMC constant not allowed");
 
         r = _mk_symreg(interp, &IMCC_INFO(interp)->ghash, name, t);
+
+        r->type = VT_CONSTP;
     }
     else {
-        r = mk_ident(interp, name, t);
+        r = mk_ident(interp, name, t, VT_CONSTP);
 
         if (t == 'P')
             return mk_pmc_const_2(interp, IMCC_INFO(interp)->cur_unit, r, val);
     }
 
-    r->type = VT_CONSTP;
-    r->reg  = val;
+    r->reg = val;
 
     return r;
 }
@@ -1075,7 +1077,7 @@
 mk_local_label(PARROT_INTERP, ARGIN(const char *name))
 {
     ASSERT_ARGS(mk_local_label)
-    IMC_Unit * const unit = IMCC_INFO(interp)->last_unit;
+    IMC_Unit * const unit = IMCC_INFO(interp)->cur_unit;
     return _mk_address(interp, &unit->hash, name, U_add_uniq_label);
 }
 
@@ -1096,7 +1098,7 @@
 mk_label_address(PARROT_INTERP, ARGIN(const char *name))
 {
     ASSERT_ARGS(mk_label_address)
-    IMC_Unit * const unit = IMCC_INFO(interp)->last_unit;
+    IMC_Unit * const unit = IMCC_INFO(interp)->cur_unit;
     return _mk_address(interp, &unit->hash, name, U_add_once);
 }
 

Modified: branches/gc_massacre/compilers/imcc/symreg.h
==============================================================================
--- branches/gc_massacre/compilers/imcc/symreg.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/symreg.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -239,7 +239,10 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_IGNORABLE_RESULT
-SymReg * mk_ident(PARROT_INTERP, ARGIN(const char *name), int t)
+SymReg * mk_ident(PARROT_INTERP,
+    ARGIN(const char *name),
+    int t,
+    INTVAL type)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 

Modified: branches/gc_massacre/compilers/imcc/unit.h
==============================================================================
--- branches/gc_massacre/compilers/imcc/unit.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/imcc/unit.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -69,8 +69,8 @@
     char             *vtable_name;      /* vtable name, if any */
     char             *method_name;      /* method name, if any */
     char             *ns_entry_name;    /* ns entry name, if any */
-    char             *instance_of;      /* PMC or class this is an instance of
-                                         * if any */
+    char             *instance_of;      /* PMC or class this is an instance of if any */
+    INTVAL            hll_id;           /* HLL ID for this sub */
     SymReg           *subid;            /* Unique subroutine id */
 
     struct            imcc_ostat ostat;

Modified: branches/gc_massacre/compilers/opsc/ops2c.nqp
==============================================================================
--- branches/gc_massacre/compilers/opsc/ops2c.nqp	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/opsc/ops2c.nqp	Sun Sep  5 13:20:27 2010	(r48799)
@@ -75,7 +75,7 @@
  -h --help                print this usage information
  -n --no-lines            do not print #line directives in generated C code (line numbers are not currently supported)
 
-#debugging options:
+debugging options:
  -g --debug               perform all processing but do not write to any files
 ");
     pir::exit(0);

Modified: branches/gc_massacre/compilers/opsc/src/Ops/Emitter.pm
==============================================================================
--- branches/gc_massacre/compilers/opsc/src/Ops/Emitter.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/opsc/src/Ops/Emitter.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -217,6 +217,9 @@
 
 {self.trans.defines(self)}
 
+/* XXX should be static, but C++ doesn't want to play ball */
+extern op_lib_t {self.bs}op_lib;
+
 |);
 
     $fh.print(self.ops_file.preamble);
@@ -230,9 +233,10 @@
 ** op lib descriptor:
 */
 
-static op_lib_t | ~ self.bs ~ q|op_lib = {| ~ qq|
-  "{self.base}",               /* name */
-  "{self.suffix}",             /* suffix */
+/* XXX should be static, but C++ doesn't want to play ball */
+op_lib_t | ~ self.bs ~ q|op_lib = {| ~ qq|
+  "{self.base}_ops",                /* name */
+  "{self.suffix}",                  /* suffix */
   $core_type,                       /* core_type = PARROT_XX_CORE */
   0,                                /* flags */
   {self.ops_file.version_major},    /* major_version */

Modified: branches/gc_massacre/compilers/opsc/src/Ops/File.pm
==============================================================================
--- branches/gc_massacre/compilers/opsc/src/Ops/File.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/opsc/src/Ops/File.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -296,13 +296,37 @@
 
 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';
+    }
+
+    grammar VERSION {
+        rule TOP { <version> }
+        rule version { $<major>=(\d+) '.' $<minor>=(\d+) '.' $<patch>=(\d+) }
+    }
+
+    my $version       := slurp($version_filename);
+    my $version_match := VERSION.parse($version);
     #say("# $version");
-    my @bits := split('.', $version);
-    self<version_major> := @bits[0];
-    self<version_minor> := @bits[1];
-    self<version_patch> := @bits[2];
-    self<version>       := @bits;
+    self<version_major> := +$version_match<version><major>;
+    self<version_minor> := +$version_match<version><minor>;
+    self<version_patch> := +$version_match<version><patch>;
+    self<version>       := [
+        +self<version_major>,
+        +self<version_minor>,
+        +self<version_match>,
+    ];
 }
 
 # Local Variables:

Modified: branches/gc_massacre/compilers/opsc/src/Ops/Trans/C.pm
==============================================================================
--- branches/gc_massacre/compilers/opsc/src/Ops/Trans/C.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/opsc/src/Ops/Trans/C.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -180,6 +180,7 @@
 |);
 
     my $index := 0;
+    my $op_lib_ref := '&' ~ $emitter.bs() ~ 'op_lib';
 
     for $emitter.ops_file.ops -> $op {
         my $type := sprintf( "PARROT_%s_OP", uc($op.type ?? 'INLINE' !! 'FUNCTION') );
@@ -218,7 +219,8 @@
     $arg_count,
     $arg_types,
     $arg_dirs,
-    $labels
+    $labels,
+    $op_lib_ref
   | ~ '},
 ',
             );
@@ -278,11 +280,13 @@
     op_info_t * info;
     struct hop *next;
 } HOP;
+
+static HOP *hop_buckets;
 static HOP **hop;
 
 static void hop_init(PARROT_INTERP);
 static size_t hash_str(const char *str);
-static void store_op(PARROT_INTERP, op_info_t *info, int full);
+static void store_op(PARROT_INTERP, op_info_t *info, HOP *p, const char *name);
 
 /* XXX on changing interpreters, this should be called,
    through a hook */
@@ -314,60 +318,65 @@
     return key;
 }
 
-static void store_op(PARROT_INTERP, op_info_t *info, int full)
+
+static void store_op(PARROT_INTERP, op_info_t *info, HOP *p, const char *name)
 {
-    HOP * const p     = mem_gc_allocate_zeroed_typed(interp, HOP);
-    const size_t hidx =
-        hash_str(full ? info->full_name : info->name) % OP_HASH_SIZE;
+    const size_t hidx = hash_str(name) % OP_HASH_SIZE;
 
-    p->info   = info;
-    p->next   = hop[hidx];
-    hop[hidx] = p;
+    p->info           = info;
+    p->next           = hop[hidx];
+    hop[hidx]         = p;
 }
 
-static int get_op(PARROT_INTERP, const char * name, int full)
+static int get_op(PARROT_INTERP, const char *name, int full)
 {
-    const HOP * p;
+    const HOP   *p;
     const size_t hidx = hash_str(name) % OP_HASH_SIZE;
+
     if (!hop) {
         hop = mem_gc_allocate_n_zeroed_typed(interp, OP_HASH_SIZE,HOP *);
         hop_init(interp);
     }
+
     for (p = hop[hidx]; p; p = p->next) {
-        if(STREQ(name, full ? p->info->full_name : p->info->name))
+        if (STREQ(name, full ? p->info->full_name : p->info->name))
             return p->info - [[BS]]op_lib.op_info_table;
     }
+
     return -1;
 }
 
+
 static void hop_init(PARROT_INTERP)
 {
-    size_t i;
     op_info_t * const info = [[BS]]op_lib.op_info_table;
+
+    /* allocate the storage all in one chunk
+     * yes, this is profligate, but we can tighten it later */
+    HOP *hops = hop_buckets =
+        mem_gc_allocate_n_zeroed_typed(interp, [[BS]]op_lib.op_count * 2, HOP );
+
+    size_t i;
+
     /* store full names */
-    for (i = 0; i < [[BS]]op_lib.op_count; i++)
-        store_op(interp, info + i, 1);
-    /* plus one short name */
-    for (i = 0; i < [[BS]]op_lib.op_count; i++)
-        if (get_op(interp, info[i].name, 0) == -1)
-            store_op(interp, info + i, 0);
+    for (i = 0; i < [[BS]]op_lib.op_count; i++) {
+        store_op(interp, info + i, hops++, info[i].full_name);
+
+        /* plus one short name */
+        if (i && info[i - 1].name != info[i].name)
+            store_op(interp, info + i, hops++, info[i].name);
+    }
 }
 
 static void hop_deinit(PARROT_INTERP)
 {
-    if (hop) {
-        size_t i;
-        for (i = 0; i < OP_HASH_SIZE; i++) {
-            HOP *p = hop[i];
-            while (p) {
-                HOP * const next = p->next;
-                mem_gc_free(interp, p);
-                p = next;
-            }
-        }
+    if (hop)
         mem_sys_free(hop);
-        hop = NULL;
-    }
+    if (hop_buckets)
+        mem_gc_free(interp, hop_buckets);
+
+    hop         = NULL;
+    hop_buckets = NULL;
 }|;
 
     $fh.print(subst($res, /'[[' BS ']]'/, $emitter.bs, :global));

Modified: branches/gc_massacre/compilers/pct/src/PAST/Compiler.pir
==============================================================================
--- branches/gc_massacre/compilers/pct/src/PAST/Compiler.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/pct/src/PAST/Compiler.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -81,7 +81,11 @@
     piropsig['find_codepoint']   = 'Is'
     piropsig['find_dynamic_lex'] = 'Ps'
     piropsig['find_name']  = 'Ps'
+    piropsig['getinterp']  = 'P'
     piropsig['getprop']    = 'P~P'
+    piropsig['getstderr']  = 'P'
+    piropsig['getstdin']   = 'P'
+    piropsig['getstdout']  = 'P'
     piropsig['index']      = 'Issi'
     piropsig['isa']        = 'IP~'
     piropsig['isfalse']    = 'IP'
@@ -92,9 +96,11 @@
     piropsig['length']     = 'Is'
     piropsig['load_bytecode'] = 'vs'
     piropsig['load_language'] = 'vs'
+    piropsig['loadlib']    = 'P~'
     piropsig['mod']        = 'PP+'
     piropsig['mul']        = 'PP+'
     piropsig['neg']        = 'PP'
+    piropsig['new']        = 'P~'
     piropsig['newclosure'] = 'PP'
     piropsig['not']        = 'PP'
     piropsig['ord']        = 'Isi'
@@ -117,7 +123,9 @@
     piropsig['split']      = 'Pss'
     piropsig['sub']        = 'PP+'
     piropsig['substr']     = 'Ssii'
+    piropsig['titlecase']  = 'Ss'
     piropsig['trace']      = 'vi'
+    piropsig['typeof']     = 'SP'
     piropsig['unshift']    = '0P*'
     piropsig['upcase']     = 'Ss'
     set_global '%piropsig', piropsig

Modified: branches/gc_massacre/compilers/pct/src/PCT/HLLCompiler.pir
==============================================================================
--- branches/gc_massacre/compilers/pct/src/PCT/HLLCompiler.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/compilers/pct/src/PCT/HLLCompiler.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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
@@ -335,7 +335,10 @@
     $P1.'print'("Stage '")
     $P1.'print'(stagename)
     $P1.'print'("': ")
-    $P1.'print'($N2)
+    $P2 = new ['ResizablePMCArray']
+    push $P2, $N2
+    $S0 = sprintf "%.3f", $P2
+    $P1.'print'($S0)
     $P1.'print'(" sec\n")
     if target == stagename goto have_result
     goto stagestats_loop

Added: branches/gc_massacre/config/auto/llvm.pm
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/config/auto/llvm.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -0,0 +1,247 @@
+# Copyright (C) 2009, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+config/auto/llvm - Check whether the Low Level Virtual Machine is present
+
+=head1 DESCRIPTION
+
+Determines whether the Low Level Virtual Machine (LLVM) is installed and
+functional on the system.  It is OK when it
+doesn't exist.
+
+=cut
+
+package auto::llvm;
+
+use strict;
+use warnings;
+
+use base qw(Parrot::Configure::Step);
+
+use Parrot::Configure::Utils ':auto';
+
+sub _init {
+    my $self = shift;
+    my %data;
+    $data{description} = q{Is LLVM installed};
+    $data{result}      = q{};
+    $data{llvm_components} = [
+        [ 'llvm-gcc'    => 'llvm-gcc' ],
+        [ 'lli'         => 'Low Level Virtual Machine' ],
+        [ 'llc'         => 'Low Level Virtual Machine' ],
+    ];
+    return \%data;
+}
+
+sub runstep {
+    my ( $self, $conf ) = @_;
+
+    my $verbose = $conf->options->get( 'verbose' );
+
+    # We start by seeing whether we can run three LLVM component executables,
+    # each with the '--version' option, and get the expected output.
+
+    my $llvm_lacking = 0;
+    foreach my $prog ( @{ $self->{llvm_components} } ) {
+        my $output = capture_output( $prog->[0], '--version' );
+        $llvm_lacking = _handle_component_version_output(
+          $prog, $output, $llvm_lacking, $verbose
+        );
+    }
+    my $output = q{};
+    $output = capture_output( 'llvm-gcc', '--version' );
+
+    # Next, we make sure we have at least major version 4 of 'llvm-gcc'
+    $llvm_lacking = _examine_llvm_gcc_version(
+        $output, $llvm_lacking, $verbose
+    );
+
+    # Finally, we see whether our LLVM actually works.
+    if ( $llvm_lacking ) {
+        $self->_handle_result( $conf, 0 );
+    }
+    else {
+
+        # Here we will take a simple C file, compile it into an LLVM bitcode
+        # file, execute it as bitcode, then compile it to native assembly
+        # using the LLC code generator, then assemble the native assembly
+        # language file into a program and execute it.  Cf.:
+        # http://llvm.org/releases/2.5/docs/GettingStarted.html#overview
+
+        my $stem = q|hello|;
+        my $cfile = qq|$stem.c|;
+        my $fullcfile = qq|config/auto/llvm/$cfile|;
+        my $bcfile = qq|$stem.bc|;
+        my $sfile = qq|$stem.s|;
+        my $nativefile = qq|$stem.native|;
+        eval {
+            system(qq{llvm-gcc -O3 -emit-llvm $fullcfile -c -o $bcfile});
+        };
+        if ($@) {
+            $self->_handle_failure_to_compile_into_bitcode( $conf, $verbose );
+        }
+        else {
+            my $output;
+            eval {
+                $output = capture_output( 'lli', $bcfile );
+            };
+            if ( $@ or $output !~ /hello world/ ) {
+                $self->_handle_failure_to_execute_bitcode( $conf, $verbose );
+            }
+            else {
+                eval {
+                    system(qq{llc $bcfile -o $sfile});
+                };
+                if ( $@ or (! -e $sfile) ) {
+                    $self->_handle_failure_to_compile_to_assembly(
+                        $conf, $verbose );
+                }
+                else {
+                    eval {
+                        my $cc = $conf->data->get('cc');
+                        system(qq{$cc $sfile -o $nativefile});
+                    };
+                    if ( $@ or (! -e $nativefile) ) {
+                        $self->_handle_failure_to_assemble_assembly(
+                            $conf, $verbose );
+                    }
+                    else {
+                        eval {
+                            $output = capture_output(qq{./$nativefile});
+                        };
+                        $self->_handle_native_assembly_output(
+                            $conf, $output, $verbose
+                        );
+                    }
+                }
+            }
+        }
+        my $count_unlinked = _cleanup_llvm_files(
+            $bcfile, $sfile, $nativefile
+        );
+        $conf->cc_clean();
+    }
+
+    return 1;
+}
+
+sub _handle_component_version_output {
+    my ($prog, $output, $llvm_lacking, $verbose) = @_;
+    my $exp = $prog->[1];
+    unless ( defined($output) and $output =~ m/$exp/s ) {
+        $llvm_lacking++;
+        print "Could not get expected '--version' output for $prog->[0]\n"
+            if $verbose;
+    }
+    else {
+        print $output, "\n" if $verbose;
+    }
+    return $llvm_lacking;
+}
+
+sub _examine_llvm_gcc_version {
+    my ( $output, $llvm_lacking, $verbose ) = @_;
+    if (! $output) {
+        $llvm_lacking++;
+    }
+    else {
+        my @line = split /\n+/, $output;
+        if ( $line[0] =~ m/\b(\d+)\.(\d+)\.(\d+)\b/ ) {
+            my @version = ($1, $2, $3);
+            if ($version[0] < 4) {
+                print "llvm-gcc must be at least major version 4\n"
+                    if $verbose;
+                $llvm_lacking++;
+            }
+        }
+        else {
+            print "Unable to extract llvm-gcc major, minor and patch versions\n"
+                if $verbose;
+            $llvm_lacking++;
+        }
+    }
+    return $llvm_lacking;
+}
+
+sub _handle_failure_to_compile_into_bitcode {
+    my ($self, $conf, $verbose ) = @_;
+    print "Unable to compile C file into LLVM bitcode file\n"
+        if $verbose;
+    $self->_handle_result( $conf, 0 );
+}
+
+sub _handle_failure_to_execute_bitcode {
+    my ($self, $conf, $verbose ) = @_;
+    print "Unable to run LLVM bitcode file with 'lli'\n"
+    if $verbose;
+    $self->_handle_result( $conf, 0 );
+}
+
+sub _handle_failure_to_compile_to_assembly {
+    my ($self, $conf, $verbose ) = @_;
+    print "Unable to compile program to native assembly using 'llc'\n"
+        if $verbose;
+    $self->_handle_result( $conf, 0 );
+}
+
+sub _handle_failure_to_assemble_assembly {
+    my ($self, $conf, $verbose ) = @_;
+    print "Unable to assemble native assembly into program\n"
+         if $verbose;
+    $self->_handle_result( $conf, 0 );
+}
+
+sub _handle_result {
+    my ($self, $conf, $result) = @_;
+    if ( $result ) {
+        $self->set_result('yes');
+        $conf->data->set( has_llvm => 1 );
+    }
+    else {
+        $self->set_result('no');
+        $conf->data->set( has_llvm => '' );
+    }
+    return 1;
+}
+
+sub _handle_native_assembly_output {
+    my ($self, $conf, $output, $verbose) = @_;
+    if ( $@ or ( $output !~ /hello world/ ) ) {
+        print "Unable to execute native assembly program successfully\n"
+            if $verbose;
+        $self->_handle_result( $conf, 0 );
+    }
+    else {
+        $self->_handle_result( $conf, 1 );
+    }
+}
+
+sub _cleanup_llvm_files {
+   my @llvm_files = @_;
+   my $count_unlinked = 0;
+   foreach my $f ( @llvm_files ) {
+      if ( defined($f) and ( -e $f ) ) {
+          unlink $f;
+          $count_unlinked++;
+      }
+   }
+   return $count_unlinked;
+};
+
+1;
+
+=head1 AUTHOR
+
+James E Keenan
+
+=cut
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
+

Added: branches/gc_massacre/config/auto/llvm/hello.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/config/auto/llvm/hello.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -0,0 +1,41 @@
+/*
+ *
+Copyright (C) 2009, Parrot Foundation.
+$Id$
+
+=head1
+
+Test file only.
+
+=over 4
+
+=item C<int main()>
+
+Test file only.
+
+=cut
+
+*/
+
+#include <stdio.h>
+
+int main() {
+  printf("hello world\n");
+  return 0;
+}
+
+/*
+
+=back
+
+=cut
+
+*/
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/gc_massacre/config/auto/pmc.pm
==============================================================================
--- branches/gc_massacre/config/auto/pmc.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/config/auto/pmc.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/config/gen/config_h/config_h.in
==============================================================================
--- branches/gc_massacre/config/gen/config_h/config_h.in	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/config/gen/config_h/config_h.in	Sun Sep  5 13:20:27 2010	(r48799)
@@ -150,7 +150,7 @@
 #define PARROT_ at jitcpu@ 1
 
 /* Oplib and dynamic ops related. */
-#define PARROT_CORE_OPLIB_NAME "core"
+#define PARROT_CORE_OPLIB_NAME "core_ops"
 #define PARROT_CORE_OPLIB_INIT Parrot_DynOp_core_ at MAJOR@_ at MINOR@_ at PATCH@
 
 /* ICU. */

Modified: branches/gc_massacre/config/gen/makefiles.pm
==============================================================================
--- branches/gc_massacre/config/gen/makefiles.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/config/gen/makefiles.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/config/gen/makefiles/root.in
==============================================================================
--- branches/gc_massacre/config/gen/makefiles/root.in	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/config/gen/makefiles/root.in	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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
 
 
 ###############################################################################
@@ -435,7 +441,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) \
@@ -475,7 +480,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) \
@@ -681,7 +685,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 \
@@ -850,12 +853,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
@@ -866,8 +869,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) \
@@ -946,10 +949,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
 
@@ -979,7 +982,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)
@@ -1246,8 +1249,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) \
@@ -1263,7 +1264,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
@@ -1507,13 +1508,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
@@ -1695,10 +1689,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,
@@ -1722,7 +1728,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
@@ -1972,6 +1978,7 @@
 	$(RM_F) t/compilers/pge/*.pir
 	$(RM_F) t/compilers/tge/*.pir
 	$(RM_F) \
+    $(PBC_TEST_FILES) \
     "t/*/*$(O)" \
     "t/*/*.out" \
     "t/*/*.pasm" \
@@ -2014,19 +2021,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
 
 ###############################################################################
 #
@@ -2378,7 +2385,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) \
@@ -2392,7 +2399,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) \
@@ -2407,7 +2414,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) \
@@ -2436,7 +2443,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
 
 ###############################################################################
@@ -2530,7 +2537,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:
 
@@ -2542,12 +2549,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/gc_massacre/config/gen/platform.pm
==============================================================================
--- branches/gc_massacre/config/gen/platform.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/config/gen/platform.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -197,6 +197,7 @@
         exec.c
         misc.c
         hires_timer.c
+        pid.c
         /;
 
     my $plat_c = q{src/platform.c};

Added: branches/gc_massacre/config/gen/platform/ansi/pid.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/config/gen/platform/ansi/pid.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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:
+ */

Added: branches/gc_massacre/config/gen/platform/generic/pid.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/config/gen/platform/generic/pid.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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:
+ */

Added: branches/gc_massacre/config/gen/platform/win32/pid.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/config/gen/platform/win32/pid.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/config/inter/progs.pm
==============================================================================
--- branches/gc_massacre/config/inter/progs.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/config/inter/progs.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -103,13 +103,16 @@
     $conf->debug("\nccflags: $ccflags\n");
 
     $linkflags = $conf->data->get('linkflags');
-    $linkflags =~ s/-libpath:\S+//g;    # TT #854: No idea why.
+    # Remove the path to the Perl library (from Win32 config).
+    # See TT #854.
+    $linkflags =~ s/-libpath:\S+//g;
     $linkflags = integrate( $linkflags, $conf->options->get('linkflags') );
     $linkflags = prompt( "And flags for your linker?", $linkflags ) if $ask;
     $conf->data->set( linkflags => $linkflags );
 
     $ldflags = $conf->data->get('ldflags');
-    $ldflags =~ s/-libpath:\S+//g;      # TT #854: No idea why.
+    # For substitution below, see comment for $linkflags above.
+    $ldflags =~ s/-libpath:\S+//g;
     $ldflags = integrate( $ldflags, $conf->options->get('ldflags') );
     $ldflags = prompt( "And your $ld flags for building shared libraries?", $ldflags )
         if $ask;

Modified: branches/gc_massacre/docs/embed.pod
==============================================================================
--- branches/gc_massacre/docs/embed.pod	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/docs/embed.pod	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/docs/parrothist.pod
==============================================================================
--- branches/gc_massacre/docs/parrothist.pod	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/docs/parrothist.pod	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/docs/project/release_manager_guide.pod
==============================================================================
--- branches/gc_massacre/docs/project/release_manager_guide.pod	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/docs/project/release_manager_guide.pod	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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  - ??

Deleted: branches/gc_massacre/examples/japh/README
==============================================================================
--- branches/gc_massacre/examples/japh/README	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,13 +0,0 @@
-# Copyright (C) 2001-2005, Parrot Foundation.
-$Id$
-
-These programs show very different ways how to print a simple
-string. Some are obfuscated, some are horribly platform dependent.
-
-To run them all (from the top level directory)
-
-$ make
-$ for f in examples/japh/japh*.pasm; do ./parrot $f ; done
-
-These JAPHs are also tested by 'make test' in the Parrot root directory.
-The test file is 't/examples/japh.t'.

Deleted: branches/gc_massacre/examples/japh/japh1.pasm
==============================================================================
--- branches/gc_massacre/examples/japh/japh1.pasm	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,29 +0,0 @@
-# Copyright (C) 2004-2009, Parrot Foundation.
-# $Id$
-
-	newclass P0, "Japh"
-	new P0, "Japh"
-	set I0, 0
-	set S0, P0[I0]
-	print S0
-	inc I0
-	set S0, P0[I0]
-	print S0
-	end
-.namespace ["Japh"]
-.pcc_sub :vtable get_string_keyed:
-	get_params "0,0", P1, I1
-	unless I1, x
-	set S1, "Parrot Hacker\n"
-	set_returns "0", S1
-	returncc
-x:
-	set S1, "Just another "
-	set_returns "0", S1
-	returncc
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Deleted: branches/gc_massacre/examples/japh/japh3.pasm
==============================================================================
--- branches/gc_massacre/examples/japh/japh3.pasm	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,19 +0,0 @@
-# Copyright (C) 2004-2010, Parrot Foundation.
-# $Id$
-
-# the substr JaPH
-    set S0, "Hacker\n"
-    set S1, "Parrot "
-    set S2, "another "
-    set S3, "Just "
-    replace S3, S3, 5,  1, S2
-    replace S3, S3, 13, 1, S1
-    replace S3, S3, 20, 1, S0
-    print S3
-    end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Deleted: branches/gc_massacre/examples/japh/japh4.pasm
==============================================================================
--- branches/gc_massacre/examples/japh/japh4.pasm	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,19 +0,0 @@
-# Copyright (C) 2004-2009, Parrot Foundation.
-# $Id$
-
-newclass P1, "Japh"
-new P2, "Japh"
-print P2
-end
-
-.namespace ["Japh"]
-.pcc_sub :vtable get_string:
-	set S3, "Just another Parrot Hacker\n"
-	set_returns "0", S3
-	returncc
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Deleted: branches/gc_massacre/examples/japh/japh5.pasm
==============================================================================
--- branches/gc_massacre/examples/japh/japh5.pasm	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,27 +0,0 @@
-# Copyright (C) 2004-2009, Parrot Foundation.
-# $Id$
-
-# JaPH utilizing an object
-    newclass P0, "Japh"
-    new P0, "Japh"
-    set P0[1], "Just"
-    set P0[2], "another"
-    set P0[3], "Parrot"
-    set P0[0], "Hacker"
-    end
-.namespace ["Japh"]
-.pcc_sub :vtable set_string_keyed:
-    get_params "0,0,0", P5, I5, S5
-    print S5
-    if I5, sp
-    print "\n"
-    returncc
-sp:
-    print " "
-    returncc
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/gc_massacre/examples/languages/squaak/doc/tutorial_episode_1.pod
==============================================================================
--- branches/gc_massacre/examples/languages/squaak/doc/tutorial_episode_1.pod	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/examples/languages/squaak/doc/tutorial_episode_1.pod	Sun Sep  5 13:20:27 2010	(r48799)
@@ -30,7 +30,7 @@
 
 The Facts: 1) Parrot is suitable for running virtually any dynamic language
 known, but before doing so, compilers must be written, and 2) writing compilers
-is rather difficult.
+from scratch is rather difficult.
 
 =head2 The Parrot Compiler Toolkit
 
@@ -42,24 +42,28 @@
 designed to do just that: provide powerful tools to make writing a compiler for
 Parrot childishly easy.
 
-This tutorial will introduce the PCT by demonstrating the ease with which a
-(simple) language can be implemented for Parrot. The case study language is not
-as complex as a real-world language, but this tutorial is written to whet your
-appetite and show the power of the PCT. This tutorial will also present some
+This tutorial introduces the PCT by showing how a simple case study language is
+implemented for Parrot. The sample language is not
+as complex as a real-world language, but is interesting enough to whet your
+appetite and show the power of the PCT.
+
+This tutorial also presents some
 exercises which you can explore in order to learn more details of the PCT not
 covered in this tutorial.
 
 =head2 Squaak: A Simple Language
 
-The case study language, named Squaak, that we will be implementing on Parrot
-will be a full-fledged compiler that can compile a program from source into
-Parrot Intermediate Representation (PIR) (or run the PIR immediately). It can
-also be used as a command-line interpreter. Squaak demonstrates some common
-language constructs, but at the same time is lacking some other, seemingly
-simple features. For instance, our language will not have return, break or
+The case study language is named Squaak. We will be implementing on Parrot
+a full-fledged compiler that can compile a Squaak program from source into
+Parrot Intermediate Representation (PIR) or run a Squaak program immediately.
+The compiler can also be used as an interactive interpreter, REPL, for Squaak.
+
+Squaak demonstrates some common language constructs,
+but is lacking some other, seemingly simple, features.
+For instance, our language will have no return, break or
 continue statements (or equivalents in your favorite syntax).
 
-Squaak will have the following features:
+Squaak has the following features:
 
 =over 4
 
@@ -92,20 +96,19 @@
 
 =back
 
-=head2 The Compiler Tools
+=head2 The Tools
 
-The Parrot Compiler Tools we'll use to implement Squaak consist of the following
-parts:
+The Parrot Compiler Toolkit consists of the following tools:
 
 =over 4
 
 =item B<N>ot B<Q>uite B<P>erl (6) (NQP-rx).
 
-NQP is a lightweight language inspired by Perl 6 and can be used to write the
+NQP is a lightweight language inspired by Perl 6 which can be used to write the
 methods that must be executed during the parsing phase, just as you can write
-actions in a Yacc/Bison input file. It also provides the regular expression engine we'll use to 
+actions in a Yacc/Bison input file. It also provides the regular expression engine we'll use to
 write our grammar. In addition to the capabilities of Perl 5's regexes, the Perl 6 regexes that NQP
- implements can be used to define language grammars. (Check the references for the specification.)
+implements can be used to define language grammars. (Check the references for the specification.)
 
 =item B<P>arrot B<A>bstract B<S>yntax B<T>ree (PAST).
 
@@ -121,30 +124,33 @@
 =head2 Getting Started
 
 For this tutorial, it is assumed you have successfully compiled parrot
-(and maybe even run the test suite). If, after reading this tutorial, you feel like
-contributing to one of these languages, you can check out the mailing list or
+(and maybe even run the test suite).
+
+If, after reading this tutorial, you feel like
+contributing to one of the already implemented languages, you can check out the mailing list or
 join IRC (see the references section for details).
 
-The languages subdirectory is the right spot to put our language implementation.
-Parrot comes with a special shell script to generate the necessary files for a
-language implementation. In order to generate these files for our language,
-type (assuming you're in Parrot's root directory):
+Parrot comes with a Perl 5  script that generates the necessary files for a
+language implementation. In order to generate these files for our sample language,
+go the Parrot's root directory and type:
 
  $ perl tools/dev/mk_language_shell.pl Squaak ~/src/squaak
 
 (Note: if you're on Windows, you should use backslashes.) This will generate the
-files in a directory F<~/src/squaak>, and use the name Squaak as the language's
-name.
+files in the directory F<~/src/squaak>. The name of the language will be Squaak.
 
 After this, go to the directory F<~/src/squaak> and type:
 
  $ parrot setup.pir test
 
-This will compile the generated files and run the test suite. If you want more
+This will compile the grammar and the actions and run the test suite.
+For running F<setup.pir> you can either use an installed parrot executable
+from your distribution or the one you have just compiled.
+
+If you want more
 information on what files are being generated, please check out the references
 at the end of this episode or read the documentation included in the file
-F<mk_language_shell.pl>. For that you can use an installed parrot executable
-from your distribution or one you have just compiled.
+F<tools/dev/mk_language_shell.pl>.
 
 Note that we didn't write a single line of code, and already we have the basic
 infrastructure in place to get us started. Of course, the generated compiler
@@ -213,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.
 
@@ -267,7 +274,8 @@
 
 =item * Perl 6/NQP rules syntax: Synopsis 5 at http://perlcabal.org/syn/S05.html or http://svn.pugscode.org/pugs/docs/Perl6/Spec/S05-regex.pod
 
-=back
+=item * List of HLL projects: http://trac.parrot.org/parrot/wiki/Languages
 
+=back
 
 =cut

Modified: branches/gc_massacre/examples/languages/squaak/doc/tutorial_episode_2.pod
==============================================================================
--- branches/gc_massacre/examples/languages/squaak/doc/tutorial_episode_2.pod	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/examples/languages/squaak/doc/tutorial_episode_2.pod	Sun Sep  5 13:20:27 2010	(r48799)
@@ -24,7 +24,7 @@
 compiler enters the interactive mode. Consider the first case, passing the file
 test.sq, just as we did before:
 
- $ ./installable_squeak test.sq
+ $ ./installable_squaak test.sq
 
 When invoking our compiler like this, the file test.sq is compiled and the
 generated code (bytecode) is executed immediately by Parrot. How does this work,
@@ -50,7 +50,7 @@
 This is an example of using the target option set to "parse", which will print
 the parse tree of the input to stdout:
 
- $ ./installable_squeak --target=parse test.sq
+ $ ./installable_squaak --target=parse test.sq
 
 In interactive mode, giving this input:
 
@@ -235,9 +235,8 @@
 
 =over 4
 
-=item 1. PIR language specification: docs/pdds/draft/PDD19_pir.pod
+=item 1. PIR language specification: docs/pdds/pdd19_pir.pod
 
 =back
 
 =cut
-

Modified: branches/gc_massacre/examples/languages/squaak/setup.pir
==============================================================================
--- branches/gc_massacre/examples/languages/squaak/setup.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/examples/languages/squaak/setup.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -23,29 +23,6 @@
     $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'] = 'Squaak'
     $P0['abstract'] = 'the Squaak compiler'

Modified: branches/gc_massacre/examples/languages/squaak/src/squaak.pir
==============================================================================
--- branches/gc_massacre/examples/languages/squaak/src/squaak.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/examples/languages/squaak/src/squaak.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 and modified: branches/gc_massacre/examples/tools/pgegrep (from r48798, branches/gc_massacre/tools/util/pgegrep)
==============================================================================

Modified: branches/gc_massacre/ext/nqp-rx/src/stage0/HLL-s0.pir
==============================================================================
--- branches/gc_massacre/ext/nqp-rx/src/stage0/HLL-s0.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/ext/nqp-rx/src/stage0/HLL-s0.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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_1283368192.21885")
 .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_1283368192.21885" 
     .return ($P334)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post107") :outer("10_1280467467.13603")
+.sub "" :load :init :subid("post107") :outer("10_1283368192.21885")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467467.13603" 
+    .const 'Sub' $P12 = "10_1283368192.21885" 
     .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_1283368192.21885") :outer("10_1283368192.21885")
 .annotate 'line', 5
-    .const 'Sub' $P319 = "103_1280467467.13603" 
+    .const 'Sub' $P319 = "103_1283368192.21885" 
     capture_lex $P319
-    .const 'Sub' $P313 = "101_1280467467.13603" 
+    .const 'Sub' $P313 = "101_1283368192.21885" 
     capture_lex $P313
-    .const 'Sub' $P300 = "98_1280467467.13603" 
+    .const 'Sub' $P300 = "98_1283368192.21885" 
     capture_lex $P300
-    .const 'Sub' $P268 = "93_1280467467.13603" 
+    .const 'Sub' $P268 = "93_1283368192.21885" 
     capture_lex $P268
-    .const 'Sub' $P262 = "91_1280467467.13603" 
+    .const 'Sub' $P262 = "91_1283368192.21885" 
     capture_lex $P262
-    .const 'Sub' $P257 = "89_1280467467.13603" 
+    .const 'Sub' $P257 = "89_1283368192.21885" 
     capture_lex $P257
-    .const 'Sub' $P251 = "87_1280467467.13603" 
+    .const 'Sub' $P251 = "87_1283368192.21885" 
     capture_lex $P251
-    .const 'Sub' $P245 = "85_1280467467.13603" 
+    .const 'Sub' $P245 = "85_1283368192.21885" 
     capture_lex $P245
-    .const 'Sub' $P240 = "83_1280467467.13603" 
+    .const 'Sub' $P240 = "83_1283368192.21885" 
     capture_lex $P240
-    .const 'Sub' $P235 = "81_1280467467.13603" 
+    .const 'Sub' $P235 = "81_1283368192.21885" 
     capture_lex $P235
-    .const 'Sub' $P230 = "79_1280467467.13603" 
+    .const 'Sub' $P230 = "79_1283368192.21885" 
     capture_lex $P230
-    .const 'Sub' $P225 = "77_1280467467.13603" 
+    .const 'Sub' $P225 = "77_1283368192.21885" 
     capture_lex $P225
-    .const 'Sub' $P220 = "75_1280467467.13603" 
+    .const 'Sub' $P220 = "75_1283368192.21885" 
     capture_lex $P220
-    .const 'Sub' $P215 = "73_1280467467.13603" 
+    .const 'Sub' $P215 = "73_1283368192.21885" 
     capture_lex $P215
-    .const 'Sub' $P210 = "71_1280467467.13603" 
+    .const 'Sub' $P210 = "71_1283368192.21885" 
     capture_lex $P210
-    .const 'Sub' $P205 = "69_1280467467.13603" 
+    .const 'Sub' $P205 = "69_1283368192.21885" 
     capture_lex $P205
-    .const 'Sub' $P195 = "65_1280467467.13603" 
+    .const 'Sub' $P195 = "65_1283368192.21885" 
     capture_lex $P195
-    .const 'Sub' $P182 = "63_1280467467.13603" 
+    .const 'Sub' $P182 = "63_1283368192.21885" 
     capture_lex $P182
-    .const 'Sub' $P170 = "61_1280467467.13603" 
+    .const 'Sub' $P170 = "61_1283368192.21885" 
     capture_lex $P170
-    .const 'Sub' $P164 = "59_1280467467.13603" 
+    .const 'Sub' $P164 = "59_1283368192.21885" 
     capture_lex $P164
-    .const 'Sub' $P157 = "57_1280467467.13603" 
+    .const 'Sub' $P157 = "57_1283368192.21885" 
     capture_lex $P157
-    .const 'Sub' $P151 = "55_1280467467.13603" 
+    .const 'Sub' $P151 = "55_1283368192.21885" 
     capture_lex $P151
-    .const 'Sub' $P144 = "53_1280467467.13603" 
+    .const 'Sub' $P144 = "53_1283368192.21885" 
     capture_lex $P144
-    .const 'Sub' $P138 = "51_1280467467.13603" 
+    .const 'Sub' $P138 = "51_1283368192.21885" 
     capture_lex $P138
-    .const 'Sub' $P131 = "49_1280467467.13603" 
+    .const 'Sub' $P131 = "49_1283368192.21885" 
     capture_lex $P131
-    .const 'Sub' $P125 = "47_1280467467.13603" 
+    .const 'Sub' $P125 = "47_1283368192.21885" 
     capture_lex $P125
-    .const 'Sub' $P119 = "45_1280467467.13603" 
+    .const 'Sub' $P119 = "45_1283368192.21885" 
     capture_lex $P119
-    .const 'Sub' $P110 = "43_1280467467.13603" 
+    .const 'Sub' $P110 = "43_1283368192.21885" 
     capture_lex $P110
-    .const 'Sub' $P102 = "41_1280467467.13603" 
+    .const 'Sub' $P102 = "41_1283368192.21885" 
     capture_lex $P102
-    .const 'Sub' $P92 = "40_1280467467.13603" 
+    .const 'Sub' $P92 = "40_1283368192.21885" 
     capture_lex $P92
-    .const 'Sub' $P86 = "38_1280467467.13603" 
+    .const 'Sub' $P86 = "38_1283368192.21885" 
     capture_lex $P86
-    .const 'Sub' $P81 = "36_1280467467.13603" 
+    .const 'Sub' $P81 = "36_1283368192.21885" 
     capture_lex $P81
-    .const 'Sub' $P73 = "34_1280467467.13603" 
+    .const 'Sub' $P73 = "34_1283368192.21885" 
     capture_lex $P73
-    .const 'Sub' $P67 = "32_1280467467.13603" 
+    .const 'Sub' $P67 = "32_1283368192.21885" 
     capture_lex $P67
-    .const 'Sub' $P61 = "30_1280467467.13603" 
+    .const 'Sub' $P61 = "30_1283368192.21885" 
     capture_lex $P61
-    .const 'Sub' $P55 = "28_1280467467.13603" 
+    .const 'Sub' $P55 = "28_1283368192.21885" 
     capture_lex $P55
-    .const 'Sub' $P22 = "14_1280467467.13603" 
+    .const 'Sub' $P22 = "14_1283368192.21885" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1280467467.13603" 
+    .const 'Sub' $P15 = "12_1283368192.21885" 
     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_1283368192.21885" 
     capture_lex $P319
 .annotate 'line', 5
     .return ($P319)
-    .const 'Sub' $P329 = "105_1280467467.13603" 
+    .const 'Sub' $P329 = "105_1283368192.21885" 
     .return ($P329)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "ws"  :subid("12_1280467467.13603") :method :outer("11_1280467467.13603")
+.sub "ws"  :subid("12_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .annotate 'line', 33
-    .const 'Sub' $P288 = "97_1280467467.13603" 
+    .const 'Sub' $P288 = "97_1283368192.21885" 
     capture_lex $P288
-    .const 'Sub' $P281 = "96_1280467467.13603" 
+    .const 'Sub' $P281 = "96_1283368192.21885" 
     capture_lex $P281
-    .const 'Sub' $P276 = "95_1280467467.13603" 
+    .const 'Sub' $P276 = "95_1283368192.21885" 
     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_1283368192.21885" 
     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_1283368192.21885" 
     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_1283368192.21885" 
     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_1283368192.21885") :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_1283368192.21885") :outer("93_1283368192.21885")
 .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_1283368192.21885") :method :outer("93_1283368192.21885")
 .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_1283368192.21885") :outer("93_1283368192.21885")
 .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_1283368192.21885") :method :outer("11_1283368192.21885")
 .annotate 'line', 33
-    .const 'Sub' $P310 = "100_1280467467.13603" 
+    .const 'Sub' $P310 = "100_1283368192.21885" 
     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_1283368192.21885" 
     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_1283368192.21885") :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_1283368192.21885") :method :outer("98_1283368192.21885")
 .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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885") :method :outer("11_1283368192.21885")
 .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_1283368192.21885") :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_1283368192.21885")
 .annotate 'line', 5
-    .const 'Sub' $P330 = "11_1280467467.13603" 
+    .const 'Sub' $P330 = "11_1283368192.21885" 
     $P331 = $P330()
     .return ($P331)
 .end
 
 
 .namespace []
-.sub "_block333" :load :anon :subid("106_1280467467.13603")
+.sub "_block333" :load :anon :subid("106_1283368192.21885")
 .annotate 'line', 1
-    .const 'Sub' $P335 = "10_1280467467.13603" 
+    .const 'Sub' $P335 = "10_1283368192.21885" 
     $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_1283368194.22514")
 .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_1283368194.22514" 
     .return ($P629)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post56") :outer("10_1280467468.44761")
+.sub "" :load :init :subid("post56") :outer("10_1283368194.22514")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467468.44761" 
+    .const 'Sub' $P12 = "10_1283368194.22514" 
     .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_1283368194.22514") :outer("10_1283368194.22514")
 .annotate 'line', 3
-    .const 'Sub' $P605 = "53_1280467468.44761" 
+    .const 'Sub' $P605 = "53_1283368194.22514" 
     capture_lex $P605
-    .const 'Sub' $P580 = "51_1280467468.44761" 
+    .const 'Sub' $P580 = "51_1283368194.22514" 
     capture_lex $P580
-    .const 'Sub' $P550 = "50_1280467468.44761" 
+    .const 'Sub' $P550 = "50_1283368194.22514" 
     capture_lex $P550
-    .const 'Sub' $P531 = "49_1280467468.44761" 
+    .const 'Sub' $P531 = "49_1283368194.22514" 
     capture_lex $P531
-    .const 'Sub' $P524 = "48_1280467468.44761" 
+    .const 'Sub' $P524 = "48_1283368194.22514" 
     capture_lex $P524
-    .const 'Sub' $P514 = "47_1280467468.44761" 
+    .const 'Sub' $P514 = "47_1283368194.22514" 
     capture_lex $P514
-    .const 'Sub' $P497 = "46_1280467468.44761" 
+    .const 'Sub' $P497 = "46_1283368194.22514" 
     capture_lex $P497
-    .const 'Sub' $P480 = "45_1280467468.44761" 
+    .const 'Sub' $P480 = "45_1283368194.22514" 
     capture_lex $P480
-    .const 'Sub' $P473 = "44_1280467468.44761" 
+    .const 'Sub' $P473 = "44_1283368194.22514" 
     capture_lex $P473
-    .const 'Sub' $P466 = "43_1280467468.44761" 
+    .const 'Sub' $P466 = "43_1283368194.22514" 
     capture_lex $P466
-    .const 'Sub' $P459 = "42_1280467468.44761" 
+    .const 'Sub' $P459 = "42_1283368194.22514" 
     capture_lex $P459
-    .const 'Sub' $P452 = "41_1280467468.44761" 
+    .const 'Sub' $P452 = "41_1283368194.22514" 
     capture_lex $P452
-    .const 'Sub' $P445 = "40_1280467468.44761" 
+    .const 'Sub' $P445 = "40_1283368194.22514" 
     capture_lex $P445
-    .const 'Sub' $P438 = "39_1280467468.44761" 
+    .const 'Sub' $P438 = "39_1283368194.22514" 
     capture_lex $P438
-    .const 'Sub' $P428 = "38_1280467468.44761" 
+    .const 'Sub' $P428 = "38_1283368194.22514" 
     capture_lex $P428
-    .const 'Sub' $P421 = "37_1280467468.44761" 
+    .const 'Sub' $P421 = "37_1283368194.22514" 
     capture_lex $P421
-    .const 'Sub' $P405 = "36_1280467468.44761" 
+    .const 'Sub' $P405 = "36_1283368194.22514" 
     capture_lex $P405
-    .const 'Sub' $P330 = "34_1280467468.44761" 
+    .const 'Sub' $P330 = "34_1283368194.22514" 
     capture_lex $P330
-    .const 'Sub' $P267 = "31_1280467468.44761" 
+    .const 'Sub' $P267 = "31_1283368194.22514" 
     capture_lex $P267
-    .const 'Sub' $P258 = "30_1280467468.44761" 
+    .const 'Sub' $P258 = "30_1283368194.22514" 
     capture_lex $P258
-    .const 'Sub' $P249 = "29_1280467468.44761" 
+    .const 'Sub' $P249 = "29_1283368194.22514" 
     capture_lex $P249
-    .const 'Sub' $P240 = "28_1280467468.44761" 
+    .const 'Sub' $P240 = "28_1283368194.22514" 
     capture_lex $P240
-    .const 'Sub' $P231 = "27_1280467468.44761" 
+    .const 'Sub' $P231 = "27_1283368194.22514" 
     capture_lex $P231
-    .const 'Sub' $P222 = "26_1280467468.44761" 
+    .const 'Sub' $P222 = "26_1283368194.22514" 
     capture_lex $P222
-    .const 'Sub' $P212 = "25_1280467468.44761" 
+    .const 'Sub' $P212 = "25_1283368194.22514" 
     capture_lex $P212
-    .const 'Sub' $P202 = "24_1280467468.44761" 
+    .const 'Sub' $P202 = "24_1283368194.22514" 
     capture_lex $P202
-    .const 'Sub' $P194 = "23_1280467468.44761" 
+    .const 'Sub' $P194 = "23_1283368194.22514" 
     capture_lex $P194
-    .const 'Sub' $P184 = "22_1280467468.44761" 
+    .const 'Sub' $P184 = "22_1283368194.22514" 
     capture_lex $P184
-    .const 'Sub' $P174 = "21_1280467468.44761" 
+    .const 'Sub' $P174 = "21_1283368194.22514" 
     capture_lex $P174
-    .const 'Sub' $P73 = "18_1280467468.44761" 
+    .const 'Sub' $P73 = "18_1283368194.22514" 
     capture_lex $P73
-    .const 'Sub' $P35 = "15_1280467468.44761" 
+    .const 'Sub' $P35 = "15_1283368194.22514" 
     capture_lex $P35
-    .const 'Sub' $P28 = "14_1280467468.44761" 
+    .const 'Sub' $P28 = "14_1283368194.22514" 
     capture_lex $P28
-    .const 'Sub' $P22 = "13_1280467468.44761" 
+    .const 'Sub' $P22 = "13_1283368194.22514" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1280467468.44761" 
+    .const 'Sub' $P15 = "12_1283368194.22514" 
     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_1283368194.22514" 
     newclosure $P622, $P605
 .annotate 'line', 3
     .return ($P622)
-    .const 'Sub' $P624 = "54_1280467468.44761" 
+    .const 'Sub' $P624 = "54_1283368194.22514" 
     .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_1283368194.22514") :outer("11_1283368194.22514")
     .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_1283368194.22514") :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
 .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .param pmc param_38
 .annotate 'line', 76
-    .const 'Sub' $P48 = "16_1280467468.44761" 
+    .const 'Sub' $P48 = "16_1283368194.22514" 
     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_1283368194.22514" 
     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_1283368194.22514") :outer("15_1283368194.22514")
 .annotate 'line', 78
-    .const 'Sub' $P62 = "17_1280467468.44761" 
+    .const 'Sub' $P62 = "17_1283368194.22514" 
     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_1283368194.22514" 
     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_1283368194.22514") :outer("16_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514" 
     capture_lex $P156
-    .const 'Sub' $P123 = "19_1280467468.44761" 
+    .const 'Sub' $P123 = "19_1283368194.22514" 
     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_1283368194.22514" 
     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_1283368194.22514" 
     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_1283368194.22514") :outer("18_1283368194.22514")
 .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_1283368194.22514") :outer("18_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .param pmc param_270
 .annotate 'line', 129
-    .const 'Sub' $P286 = "32_1280467468.44761" 
+    .const 'Sub' $P286 = "32_1283368194.22514" 
     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_1283368194.22514" 
     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_1283368194.22514") :outer("31_1283368194.22514")
 .annotate 'line', 135
-    .const 'Sub' $P305 = "33_1280467468.44761" 
+    .const 'Sub' $P305 = "33_1283368194.22514" 
     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_1283368194.22514" 
     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_1283368194.22514") :outer("32_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .param pmc param_333
 .annotate 'line', 152
-    .const 'Sub' $P345 = "35_1280467468.44761" 
+    .const 'Sub' $P345 = "35_1283368194.22514" 
     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_1283368194.22514" 
     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_1283368194.22514") :outer("34_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .param pmc param_583
 .annotate 'line', 219
-    .const 'Sub' $P592 = "52_1280467468.44761" 
+    .const 'Sub' $P592 = "52_1283368194.22514" 
     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_1283368194.22514" 
     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_1283368194.22514") :outer("51_1283368194.22514")
     .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_1283368194.22514") :method :outer("11_1283368194.22514")
     .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_1283368194.22514")
 .annotate 'line', 3
-    .const 'Sub' $P625 = "11_1280467468.44761" 
+    .const 'Sub' $P625 = "11_1283368194.22514" 
     $P626 = $P625()
     .return ($P626)
 .end
 
 
 .namespace []
-.sub "_block628" :load :anon :subid("55_1280467468.44761")
+.sub "_block628" :load :anon :subid("55_1283368194.22514")
 .annotate 'line', 1
-    .const 'Sub' $P630 = "10_1280467468.44761" 
+    .const 'Sub' $P630 = "10_1283368194.22514" 
     $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_1283368195.4695")
 .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_1283368195.4695" 
     .return ($P499)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post37") :outer("10_1280467469.30058")
+.sub "" :load :init :subid("post37") :outer("10_1283368195.4695")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467469.30058" 
+    .const 'Sub' $P12 = "10_1283368195.4695" 
     .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_1283368195.4695") :outer("10_1283368195.4695")
 .annotate 'line', 6
-    .const 'Sub' $P489 = "35_1280467469.30058" 
+    .const 'Sub' $P489 = "35_1283368195.4695" 
     capture_lex $P489
-    .const 'Sub' $P447 = "33_1280467469.30058" 
+    .const 'Sub' $P447 = "33_1283368195.4695" 
     capture_lex $P447
-    .const 'Sub' $P298 = "26_1280467469.30058" 
+    .const 'Sub' $P298 = "26_1283368195.4695" 
     capture_lex $P298
-    .const 'Sub' $P283 = "25_1280467469.30058" 
+    .const 'Sub' $P283 = "25_1283368195.4695" 
     capture_lex $P283
-    .const 'Sub' $P188 = "20_1280467469.30058" 
+    .const 'Sub' $P188 = "20_1283368195.4695" 
     capture_lex $P188
-    .const 'Sub' $P153 = "18_1280467469.30058" 
+    .const 'Sub' $P153 = "18_1283368195.4695" 
     capture_lex $P153
-    .const 'Sub' $P138 = "17_1280467469.30058" 
+    .const 'Sub' $P138 = "17_1283368195.4695" 
     capture_lex $P138
-    .const 'Sub' $P122 = "16_1280467469.30058" 
+    .const 'Sub' $P122 = "16_1283368195.4695" 
     capture_lex $P122
-    .const 'Sub' $P33 = "13_1280467469.30058" 
+    .const 'Sub' $P33 = "13_1283368195.4695" 
     capture_lex $P33
-    .const 'Sub' $P15 = "12_1280467469.30058" 
+    .const 'Sub' $P15 = "12_1283368195.4695" 
     capture_lex $P15
 .annotate 'line', 14
-    .const 'Sub' $P15 = "12_1280467469.30058" 
+    .const 'Sub' $P15 = "12_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695")
 .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_1283368195.4695") :outer("11_1283368195.4695")
     .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_1283368195.4695") :method :outer("11_1283368195.4695")
     .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_1283368195.4695" 
     capture_lex $P105
-    .const 'Sub' $P84 = "14_1280467469.30058" 
+    .const 'Sub' $P84 = "14_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("13_1283368195.4695")
     .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_1283368195.4695") :outer("13_1283368195.4695")
     .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_1283368195.4695") :method :outer("11_1283368195.4695")
     .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_1283368195.4695") :method :outer("11_1283368195.4695")
     .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_1283368195.4695") :method :outer("11_1283368195.4695")
     .param pmc param_156
 .annotate 'line', 61
-    .const 'Sub' $P166 = "19_1280467469.30058" 
+    .const 'Sub' $P166 = "19_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("18_1283368195.4695")
 .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_1283368195.4695") :method :outer("11_1283368195.4695")
     .param pmc param_191
     .param pmc param_192
 .annotate 'line', 69
-    .const 'Sub' $P198 = "21_1280467469.30058" 
+    .const 'Sub' $P198 = "21_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("20_1283368195.4695")
     .param pmc param_201
 .annotate 'line', 70
-    .const 'Sub' $P268 = "24_1280467469.30058" 
+    .const 'Sub' $P268 = "24_1283368195.4695" 
     capture_lex $P268
-    .const 'Sub' $P248 = "23_1280467469.30058" 
+    .const 'Sub' $P248 = "23_1283368195.4695" 
     capture_lex $P248
-    .const 'Sub' $P219 = "22_1280467469.30058" 
+    .const 'Sub' $P219 = "22_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("21_1283368195.4695")
     .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_1283368195.4695") :outer("21_1283368195.4695")
     .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_1283368195.4695") :outer("21_1283368195.4695")
     .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_1283368195.4695") :method :outer("11_1283368195.4695")
     .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_1283368195.4695") :method :outer("11_1283368195.4695")
     .param pmc param_301 :slurpy :named
 .annotate 'line', 90
-    .const 'Sub' $P333 = "27_1280467469.30058" 
+    .const 'Sub' $P333 = "27_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("26_1283368195.4695")
 .annotate 'line', 102
-    .const 'Sub' $P365 = "28_1280467469.30058" 
+    .const 'Sub' $P365 = "28_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("27_1283368195.4695")
 .annotate 'line', 115
-    .const 'Sub' $P398 = "31_1280467469.30058" 
+    .const 'Sub' $P398 = "31_1283368195.4695" 
     capture_lex $P398
-    .const 'Sub' $P371 = "29_1280467469.30058" 
+    .const 'Sub' $P371 = "29_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("28_1283368195.4695")
 .annotate 'line', 118
-    .const 'Sub' $P383 = "30_1280467469.30058" 
+    .const 'Sub' $P383 = "30_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("29_1283368195.4695")
     .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_1283368195.4695") :outer("28_1283368195.4695")
 .annotate 'line', 125
-    .const 'Sub' $P409 = "32_1280467469.30058" 
+    .const 'Sub' $P409 = "32_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("31_1283368195.4695")
     .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_1283368195.4695") :method :outer("11_1283368195.4695")
     .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_1283368195.4695" 
     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_1283368195.4695" 
     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_1283368195.4695") :outer("33_1283368195.4695")
 .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_1283368195.4695") :method :outer("11_1283368195.4695")
 .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_1283368195.4695")
 .annotate 'line', 1
-    .const 'Sub' $P500 = "10_1280467469.30058" 
+    .const 'Sub' $P500 = "10_1283368195.4695" 
     $P501 = $P500()
     .return ($P501)
 .end

Modified: branches/gc_massacre/ext/nqp-rx/src/stage0/NQP-s0.pir
==============================================================================
--- branches/gc_massacre/ext/nqp-rx/src/stage0/NQP-s0.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/ext/nqp-rx/src/stage0/NQP-s0.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -15,7 +15,7 @@
 ### .include 'gen/nqp-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467477.44751")
+.sub "_block11"  :anon :subid("10_1283368207.8572")
 .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_1283368207.8572" 
     .return ($P1425)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post372") :outer("10_1280467477.44751")
+.sub "" :load :init :subid("post372") :outer("10_1283368207.8572")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467477.44751" 
+    .const 'Sub' $P12 = "10_1283368207.8572" 
     .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_1283368207.8572") :outer("10_1283368207.8572")
 .annotate 'line', 4
     get_hll_global $P1340, ["NQP";"Regex"], "_block1339" 
     capture_lex $P1340
-    .const 'Sub' $P1326 = "348_1280467477.44751" 
+    .const 'Sub' $P1326 = "348_1283368207.8572" 
     capture_lex $P1326
-    .const 'Sub' $P1320 = "346_1280467477.44751" 
+    .const 'Sub' $P1320 = "346_1283368207.8572" 
     capture_lex $P1320
-    .const 'Sub' $P1314 = "344_1280467477.44751" 
+    .const 'Sub' $P1314 = "344_1283368207.8572" 
     capture_lex $P1314
-    .const 'Sub' $P1308 = "342_1280467477.44751" 
+    .const 'Sub' $P1308 = "342_1283368207.8572" 
     capture_lex $P1308
-    .const 'Sub' $P1302 = "340_1280467477.44751" 
+    .const 'Sub' $P1302 = "340_1283368207.8572" 
     capture_lex $P1302
-    .const 'Sub' $P1296 = "338_1280467477.44751" 
+    .const 'Sub' $P1296 = "338_1283368207.8572" 
     capture_lex $P1296
-    .const 'Sub' $P1289 = "336_1280467477.44751" 
+    .const 'Sub' $P1289 = "336_1283368207.8572" 
     capture_lex $P1289
-    .const 'Sub' $P1282 = "334_1280467477.44751" 
+    .const 'Sub' $P1282 = "334_1283368207.8572" 
     capture_lex $P1282
-    .const 'Sub' $P1275 = "332_1280467477.44751" 
+    .const 'Sub' $P1275 = "332_1283368207.8572" 
     capture_lex $P1275
-    .const 'Sub' $P1268 = "330_1280467477.44751" 
+    .const 'Sub' $P1268 = "330_1283368207.8572" 
     capture_lex $P1268
-    .const 'Sub' $P1262 = "328_1280467477.44751" 
+    .const 'Sub' $P1262 = "328_1283368207.8572" 
     capture_lex $P1262
-    .const 'Sub' $P1255 = "326_1280467477.44751" 
+    .const 'Sub' $P1255 = "326_1283368207.8572" 
     capture_lex $P1255
-    .const 'Sub' $P1248 = "324_1280467477.44751" 
+    .const 'Sub' $P1248 = "324_1283368207.8572" 
     capture_lex $P1248
-    .const 'Sub' $P1241 = "322_1280467477.44751" 
+    .const 'Sub' $P1241 = "322_1283368207.8572" 
     capture_lex $P1241
-    .const 'Sub' $P1234 = "320_1280467477.44751" 
+    .const 'Sub' $P1234 = "320_1283368207.8572" 
     capture_lex $P1234
-    .const 'Sub' $P1227 = "318_1280467477.44751" 
+    .const 'Sub' $P1227 = "318_1283368207.8572" 
     capture_lex $P1227
-    .const 'Sub' $P1220 = "316_1280467477.44751" 
+    .const 'Sub' $P1220 = "316_1283368207.8572" 
     capture_lex $P1220
-    .const 'Sub' $P1213 = "314_1280467477.44751" 
+    .const 'Sub' $P1213 = "314_1283368207.8572" 
     capture_lex $P1213
-    .const 'Sub' $P1206 = "312_1280467477.44751" 
+    .const 'Sub' $P1206 = "312_1283368207.8572" 
     capture_lex $P1206
-    .const 'Sub' $P1199 = "310_1280467477.44751" 
+    .const 'Sub' $P1199 = "310_1283368207.8572" 
     capture_lex $P1199
-    .const 'Sub' $P1192 = "308_1280467477.44751" 
+    .const 'Sub' $P1192 = "308_1283368207.8572" 
     capture_lex $P1192
-    .const 'Sub' $P1185 = "306_1280467477.44751" 
+    .const 'Sub' $P1185 = "306_1283368207.8572" 
     capture_lex $P1185
-    .const 'Sub' $P1178 = "304_1280467477.44751" 
+    .const 'Sub' $P1178 = "304_1283368207.8572" 
     capture_lex $P1178
-    .const 'Sub' $P1171 = "302_1280467477.44751" 
+    .const 'Sub' $P1171 = "302_1283368207.8572" 
     capture_lex $P1171
-    .const 'Sub' $P1164 = "300_1280467477.44751" 
+    .const 'Sub' $P1164 = "300_1283368207.8572" 
     capture_lex $P1164
-    .const 'Sub' $P1157 = "298_1280467477.44751" 
+    .const 'Sub' $P1157 = "298_1283368207.8572" 
     capture_lex $P1157
-    .const 'Sub' $P1150 = "296_1280467477.44751" 
+    .const 'Sub' $P1150 = "296_1283368207.8572" 
     capture_lex $P1150
-    .const 'Sub' $P1143 = "294_1280467477.44751" 
+    .const 'Sub' $P1143 = "294_1283368207.8572" 
     capture_lex $P1143
-    .const 'Sub' $P1136 = "292_1280467477.44751" 
+    .const 'Sub' $P1136 = "292_1283368207.8572" 
     capture_lex $P1136
-    .const 'Sub' $P1129 = "290_1280467477.44751" 
+    .const 'Sub' $P1129 = "290_1283368207.8572" 
     capture_lex $P1129
-    .const 'Sub' $P1122 = "288_1280467477.44751" 
+    .const 'Sub' $P1122 = "288_1283368207.8572" 
     capture_lex $P1122
-    .const 'Sub' $P1115 = "286_1280467477.44751" 
+    .const 'Sub' $P1115 = "286_1283368207.8572" 
     capture_lex $P1115
-    .const 'Sub' $P1108 = "284_1280467477.44751" 
+    .const 'Sub' $P1108 = "284_1283368207.8572" 
     capture_lex $P1108
-    .const 'Sub' $P1101 = "282_1280467477.44751" 
+    .const 'Sub' $P1101 = "282_1283368207.8572" 
     capture_lex $P1101
-    .const 'Sub' $P1094 = "280_1280467477.44751" 
+    .const 'Sub' $P1094 = "280_1283368207.8572" 
     capture_lex $P1094
-    .const 'Sub' $P1087 = "278_1280467477.44751" 
+    .const 'Sub' $P1087 = "278_1283368207.8572" 
     capture_lex $P1087
-    .const 'Sub' $P1080 = "276_1280467477.44751" 
+    .const 'Sub' $P1080 = "276_1283368207.8572" 
     capture_lex $P1080
-    .const 'Sub' $P1073 = "274_1280467477.44751" 
+    .const 'Sub' $P1073 = "274_1283368207.8572" 
     capture_lex $P1073
-    .const 'Sub' $P1066 = "272_1280467477.44751" 
+    .const 'Sub' $P1066 = "272_1283368207.8572" 
     capture_lex $P1066
-    .const 'Sub' $P1059 = "270_1280467477.44751" 
+    .const 'Sub' $P1059 = "270_1283368207.8572" 
     capture_lex $P1059
-    .const 'Sub' $P1053 = "268_1280467477.44751" 
+    .const 'Sub' $P1053 = "268_1283368207.8572" 
     capture_lex $P1053
-    .const 'Sub' $P1046 = "266_1280467477.44751" 
+    .const 'Sub' $P1046 = "266_1283368207.8572" 
     capture_lex $P1046
-    .const 'Sub' $P1039 = "264_1280467477.44751" 
+    .const 'Sub' $P1039 = "264_1283368207.8572" 
     capture_lex $P1039
-    .const 'Sub' $P1032 = "262_1280467477.44751" 
+    .const 'Sub' $P1032 = "262_1283368207.8572" 
     capture_lex $P1032
-    .const 'Sub' $P1025 = "260_1280467477.44751" 
+    .const 'Sub' $P1025 = "260_1283368207.8572" 
     capture_lex $P1025
-    .const 'Sub' $P1018 = "258_1280467477.44751" 
+    .const 'Sub' $P1018 = "258_1283368207.8572" 
     capture_lex $P1018
-    .const 'Sub' $P1011 = "256_1280467477.44751" 
+    .const 'Sub' $P1011 = "256_1283368207.8572" 
     capture_lex $P1011
-    .const 'Sub' $P1004 = "254_1280467477.44751" 
+    .const 'Sub' $P1004 = "254_1283368207.8572" 
     capture_lex $P1004
-    .const 'Sub' $P998 = "252_1280467477.44751" 
+    .const 'Sub' $P998 = "252_1283368207.8572" 
     capture_lex $P998
-    .const 'Sub' $P992 = "250_1280467477.44751" 
+    .const 'Sub' $P992 = "250_1283368207.8572" 
     capture_lex $P992
-    .const 'Sub' $P987 = "248_1280467477.44751" 
+    .const 'Sub' $P987 = "248_1283368207.8572" 
     capture_lex $P987
-    .const 'Sub' $P981 = "246_1280467477.44751" 
+    .const 'Sub' $P981 = "246_1283368207.8572" 
     capture_lex $P981
-    .const 'Sub' $P975 = "244_1280467477.44751" 
+    .const 'Sub' $P975 = "244_1283368207.8572" 
     capture_lex $P975
-    .const 'Sub' $P970 = "242_1280467477.44751" 
+    .const 'Sub' $P970 = "242_1283368207.8572" 
     capture_lex $P970
-    .const 'Sub' $P965 = "240_1280467477.44751" 
+    .const 'Sub' $P965 = "240_1283368207.8572" 
     capture_lex $P965
-    .const 'Sub' $P957 = "238_1280467477.44751" 
+    .const 'Sub' $P957 = "238_1283368207.8572" 
     capture_lex $P957
-    .const 'Sub' $P948 = "236_1280467477.44751" 
+    .const 'Sub' $P948 = "236_1283368207.8572" 
     capture_lex $P948
-    .const 'Sub' $P943 = "234_1280467477.44751" 
+    .const 'Sub' $P943 = "234_1283368207.8572" 
     capture_lex $P943
-    .const 'Sub' $P938 = "232_1280467477.44751" 
+    .const 'Sub' $P938 = "232_1283368207.8572" 
     capture_lex $P938
-    .const 'Sub' $P933 = "230_1280467477.44751" 
+    .const 'Sub' $P933 = "230_1283368207.8572" 
     capture_lex $P933
-    .const 'Sub' $P925 = "228_1280467477.44751" 
+    .const 'Sub' $P925 = "228_1283368207.8572" 
     capture_lex $P925
-    .const 'Sub' $P917 = "226_1280467477.44751" 
+    .const 'Sub' $P917 = "226_1283368207.8572" 
     capture_lex $P917
-    .const 'Sub' $P912 = "224_1280467477.44751" 
+    .const 'Sub' $P912 = "224_1283368207.8572" 
     capture_lex $P912
-    .const 'Sub' $P907 = "222_1280467477.44751" 
+    .const 'Sub' $P907 = "222_1283368207.8572" 
     capture_lex $P907
-    .const 'Sub' $P902 = "220_1280467477.44751" 
+    .const 'Sub' $P902 = "220_1283368207.8572" 
     capture_lex $P902
-    .const 'Sub' $P896 = "218_1280467477.44751" 
+    .const 'Sub' $P896 = "218_1283368207.8572" 
     capture_lex $P896
-    .const 'Sub' $P890 = "216_1280467477.44751" 
+    .const 'Sub' $P890 = "216_1283368207.8572" 
     capture_lex $P890
-    .const 'Sub' $P884 = "214_1280467477.44751" 
+    .const 'Sub' $P884 = "214_1283368207.8572" 
     capture_lex $P884
-    .const 'Sub' $P878 = "212_1280467477.44751" 
+    .const 'Sub' $P878 = "212_1283368207.8572" 
     capture_lex $P878
-    .const 'Sub' $P872 = "210_1280467477.44751" 
+    .const 'Sub' $P872 = "210_1283368207.8572" 
     capture_lex $P872
-    .const 'Sub' $P867 = "208_1280467477.44751" 
+    .const 'Sub' $P867 = "208_1283368207.8572" 
     capture_lex $P867
-    .const 'Sub' $P862 = "206_1280467477.44751" 
+    .const 'Sub' $P862 = "206_1283368207.8572" 
     capture_lex $P862
-    .const 'Sub' $P850 = "202_1280467477.44751" 
+    .const 'Sub' $P850 = "202_1283368207.8572" 
     capture_lex $P850
-    .const 'Sub' $P842 = "200_1280467477.44751" 
+    .const 'Sub' $P842 = "200_1283368207.8572" 
     capture_lex $P842
-    .const 'Sub' $P836 = "198_1280467477.44751" 
+    .const 'Sub' $P836 = "198_1283368207.8572" 
     capture_lex $P836
-    .const 'Sub' $P829 = "196_1280467477.44751" 
+    .const 'Sub' $P829 = "196_1283368207.8572" 
     capture_lex $P829
-    .const 'Sub' $P823 = "194_1280467477.44751" 
+    .const 'Sub' $P823 = "194_1283368207.8572" 
     capture_lex $P823
-    .const 'Sub' $P815 = "192_1280467477.44751" 
+    .const 'Sub' $P815 = "192_1283368207.8572" 
     capture_lex $P815
-    .const 'Sub' $P807 = "190_1280467477.44751" 
+    .const 'Sub' $P807 = "190_1283368207.8572" 
     capture_lex $P807
-    .const 'Sub' $P801 = "188_1280467477.44751" 
+    .const 'Sub' $P801 = "188_1283368207.8572" 
     capture_lex $P801
-    .const 'Sub' $P795 = "186_1280467477.44751" 
+    .const 'Sub' $P795 = "186_1283368207.8572" 
     capture_lex $P795
-    .const 'Sub' $P781 = "182_1280467477.44751" 
+    .const 'Sub' $P781 = "182_1283368207.8572" 
     capture_lex $P781
-    .const 'Sub' $P744 = "180_1280467477.44751" 
+    .const 'Sub' $P744 = "180_1283368207.8572" 
     capture_lex $P744
-    .const 'Sub' $P735 = "178_1280467477.44751" 
+    .const 'Sub' $P735 = "178_1283368207.8572" 
     capture_lex $P735
-    .const 'Sub' $P729 = "176_1280467477.44751" 
+    .const 'Sub' $P729 = "176_1283368207.8572" 
     capture_lex $P729
-    .const 'Sub' $P719 = "174_1280467477.44751" 
+    .const 'Sub' $P719 = "174_1283368207.8572" 
     capture_lex $P719
-    .const 'Sub' $P706 = "172_1280467477.44751" 
+    .const 'Sub' $P706 = "172_1283368207.8572" 
     capture_lex $P706
-    .const 'Sub' $P699 = "170_1280467477.44751" 
+    .const 'Sub' $P699 = "170_1283368207.8572" 
     capture_lex $P699
-    .const 'Sub' $P691 = "168_1280467477.44751" 
+    .const 'Sub' $P691 = "168_1283368207.8572" 
     capture_lex $P691
-    .const 'Sub' $P681 = "166_1280467477.44751" 
+    .const 'Sub' $P681 = "166_1283368207.8572" 
     capture_lex $P681
-    .const 'Sub' $P657 = "162_1280467477.44751" 
+    .const 'Sub' $P657 = "162_1283368207.8572" 
     capture_lex $P657
-    .const 'Sub' $P634 = "160_1280467477.44751" 
+    .const 'Sub' $P634 = "160_1283368207.8572" 
     capture_lex $P634
-    .const 'Sub' $P627 = "158_1280467477.44751" 
+    .const 'Sub' $P627 = "158_1283368207.8572" 
     capture_lex $P627
-    .const 'Sub' $P620 = "156_1280467477.44751" 
+    .const 'Sub' $P620 = "156_1283368207.8572" 
     capture_lex $P620
-    .const 'Sub' $P610 = "152_1280467477.44751" 
+    .const 'Sub' $P610 = "152_1283368207.8572" 
     capture_lex $P610
-    .const 'Sub' $P602 = "150_1280467477.44751" 
+    .const 'Sub' $P602 = "150_1283368207.8572" 
     capture_lex $P602
-    .const 'Sub' $P596 = "148_1280467477.44751" 
+    .const 'Sub' $P596 = "148_1283368207.8572" 
     capture_lex $P596
-    .const 'Sub' $P583 = "146_1280467477.44751" 
+    .const 'Sub' $P583 = "146_1283368207.8572" 
     capture_lex $P583
-    .const 'Sub' $P576 = "144_1280467477.44751" 
+    .const 'Sub' $P576 = "144_1283368207.8572" 
     capture_lex $P576
-    .const 'Sub' $P569 = "142_1280467477.44751" 
+    .const 'Sub' $P569 = "142_1283368207.8572" 
     capture_lex $P569
-    .const 'Sub' $P562 = "140_1280467477.44751" 
+    .const 'Sub' $P562 = "140_1283368207.8572" 
     capture_lex $P562
-    .const 'Sub' $P535 = "136_1280467477.44751" 
+    .const 'Sub' $P535 = "136_1283368207.8572" 
     capture_lex $P535
-    .const 'Sub' $P526 = "134_1280467477.44751" 
+    .const 'Sub' $P526 = "134_1283368207.8572" 
     capture_lex $P526
-    .const 'Sub' $P519 = "132_1280467477.44751" 
+    .const 'Sub' $P519 = "132_1283368207.8572" 
     capture_lex $P519
-    .const 'Sub' $P510 = "128_1280467477.44751" 
+    .const 'Sub' $P510 = "128_1283368207.8572" 
     capture_lex $P510
-    .const 'Sub' $P505 = "126_1280467477.44751" 
+    .const 'Sub' $P505 = "126_1283368207.8572" 
     capture_lex $P505
-    .const 'Sub' $P493 = "124_1280467477.44751" 
+    .const 'Sub' $P493 = "124_1283368207.8572" 
     capture_lex $P493
-    .const 'Sub' $P481 = "122_1280467477.44751" 
+    .const 'Sub' $P481 = "122_1283368207.8572" 
     capture_lex $P481
-    .const 'Sub' $P474 = "120_1280467477.44751" 
+    .const 'Sub' $P474 = "120_1283368207.8572" 
     capture_lex $P474
-    .const 'Sub' $P469 = "118_1280467477.44751" 
+    .const 'Sub' $P469 = "118_1283368207.8572" 
     capture_lex $P469
-    .const 'Sub' $P463 = "116_1280467477.44751" 
+    .const 'Sub' $P463 = "116_1283368207.8572" 
     capture_lex $P463
-    .const 'Sub' $P457 = "114_1280467477.44751" 
+    .const 'Sub' $P457 = "114_1283368207.8572" 
     capture_lex $P457
-    .const 'Sub' $P447 = "111_1280467477.44751" 
+    .const 'Sub' $P447 = "111_1283368207.8572" 
     capture_lex $P447
-    .const 'Sub' $P441 = "109_1280467477.44751" 
+    .const 'Sub' $P441 = "109_1283368207.8572" 
     capture_lex $P441
-    .const 'Sub' $P435 = "107_1280467477.44751" 
+    .const 'Sub' $P435 = "107_1283368207.8572" 
     capture_lex $P435
-    .const 'Sub' $P429 = "105_1280467477.44751" 
+    .const 'Sub' $P429 = "105_1283368207.8572" 
     capture_lex $P429
-    .const 'Sub' $P423 = "103_1280467477.44751" 
+    .const 'Sub' $P423 = "103_1283368207.8572" 
     capture_lex $P423
-    .const 'Sub' $P417 = "101_1280467477.44751" 
+    .const 'Sub' $P417 = "101_1283368207.8572" 
     capture_lex $P417
-    .const 'Sub' $P411 = "99_1280467477.44751" 
+    .const 'Sub' $P411 = "99_1283368207.8572" 
     capture_lex $P411
-    .const 'Sub' $P402 = "97_1280467477.44751" 
+    .const 'Sub' $P402 = "97_1283368207.8572" 
     capture_lex $P402
-    .const 'Sub' $P393 = "95_1280467477.44751" 
+    .const 'Sub' $P393 = "95_1283368207.8572" 
     capture_lex $P393
-    .const 'Sub' $P384 = "93_1280467477.44751" 
+    .const 'Sub' $P384 = "93_1283368207.8572" 
     capture_lex $P384
-    .const 'Sub' $P371 = "89_1280467477.44751" 
+    .const 'Sub' $P371 = "89_1283368207.8572" 
     capture_lex $P371
-    .const 'Sub' $P362 = "87_1280467477.44751" 
+    .const 'Sub' $P362 = "87_1283368207.8572" 
     capture_lex $P362
-    .const 'Sub' $P352 = "83_1280467477.44751" 
+    .const 'Sub' $P352 = "83_1283368207.8572" 
     capture_lex $P352
-    .const 'Sub' $P345 = "81_1280467477.44751" 
+    .const 'Sub' $P345 = "81_1283368207.8572" 
     capture_lex $P345
-    .const 'Sub' $P338 = "79_1280467477.44751" 
+    .const 'Sub' $P338 = "79_1283368207.8572" 
     capture_lex $P338
-    .const 'Sub' $P326 = "75_1280467477.44751" 
+    .const 'Sub' $P326 = "75_1283368207.8572" 
     capture_lex $P326
-    .const 'Sub' $P318 = "73_1280467477.44751" 
+    .const 'Sub' $P318 = "73_1283368207.8572" 
     capture_lex $P318
-    .const 'Sub' $P310 = "71_1280467477.44751" 
+    .const 'Sub' $P310 = "71_1283368207.8572" 
     capture_lex $P310
-    .const 'Sub' $P290 = "69_1280467477.44751" 
+    .const 'Sub' $P290 = "69_1283368207.8572" 
     capture_lex $P290
-    .const 'Sub' $P281 = "67_1280467477.44751" 
+    .const 'Sub' $P281 = "67_1283368207.8572" 
     capture_lex $P281
-    .const 'Sub' $P263 = "64_1280467477.44751" 
+    .const 'Sub' $P263 = "64_1283368207.8572" 
     capture_lex $P263
-    .const 'Sub' $P245 = "62_1280467477.44751" 
+    .const 'Sub' $P245 = "62_1283368207.8572" 
     capture_lex $P245
-    .const 'Sub' $P236 = "58_1280467477.44751" 
+    .const 'Sub' $P236 = "58_1283368207.8572" 
     capture_lex $P236
-    .const 'Sub' $P231 = "56_1280467477.44751" 
+    .const 'Sub' $P231 = "56_1283368207.8572" 
     capture_lex $P231
-    .const 'Sub' $P222 = "52_1280467477.44751" 
+    .const 'Sub' $P222 = "52_1283368207.8572" 
     capture_lex $P222
-    .const 'Sub' $P217 = "50_1280467477.44751" 
+    .const 'Sub' $P217 = "50_1283368207.8572" 
     capture_lex $P217
-    .const 'Sub' $P212 = "48_1280467477.44751" 
+    .const 'Sub' $P212 = "48_1283368207.8572" 
     capture_lex $P212
-    .const 'Sub' $P203 = "46_1280467477.44751" 
+    .const 'Sub' $P203 = "46_1283368207.8572" 
     capture_lex $P203
-    .const 'Sub' $P196 = "44_1280467477.44751" 
+    .const 'Sub' $P196 = "44_1283368207.8572" 
     capture_lex $P196
-    .const 'Sub' $P190 = "42_1280467477.44751" 
+    .const 'Sub' $P190 = "42_1283368207.8572" 
     capture_lex $P190
-    .const 'Sub' $P182 = "40_1280467477.44751" 
+    .const 'Sub' $P182 = "40_1283368207.8572" 
     capture_lex $P182
-    .const 'Sub' $P176 = "38_1280467477.44751" 
+    .const 'Sub' $P176 = "38_1283368207.8572" 
     capture_lex $P176
-    .const 'Sub' $P170 = "36_1280467477.44751" 
+    .const 'Sub' $P170 = "36_1283368207.8572" 
     capture_lex $P170
-    .const 'Sub' $P155 = "33_1280467477.44751" 
+    .const 'Sub' $P155 = "33_1283368207.8572" 
     capture_lex $P155
-    .const 'Sub' $P141 = "31_1280467477.44751" 
+    .const 'Sub' $P141 = "31_1283368207.8572" 
     capture_lex $P141
-    .const 'Sub' $P134 = "29_1280467477.44751" 
+    .const 'Sub' $P134 = "29_1283368207.8572" 
     capture_lex $P134
-    .const 'Sub' $P95 = "26_1280467477.44751" 
+    .const 'Sub' $P95 = "26_1283368207.8572" 
     capture_lex $P95
-    .const 'Sub' $P80 = "23_1280467477.44751" 
+    .const 'Sub' $P80 = "23_1283368207.8572" 
     capture_lex $P80
-    .const 'Sub' $P69 = "21_1280467477.44751" 
+    .const 'Sub' $P69 = "21_1283368207.8572" 
     capture_lex $P69
-    .const 'Sub' $P57 = "19_1280467477.44751" 
+    .const 'Sub' $P57 = "19_1283368207.8572" 
     capture_lex $P57
-    .const 'Sub' $P49 = "17_1280467477.44751" 
+    .const 'Sub' $P49 = "17_1283368207.8572" 
     capture_lex $P49
-    .const 'Sub' $P42 = "15_1280467477.44751" 
+    .const 'Sub' $P42 = "15_1283368207.8572" 
     capture_lex $P42
-    .const 'Sub' $P35 = "13_1280467477.44751" 
+    .const 'Sub' $P35 = "13_1283368207.8572" 
     capture_lex $P35
-    .const 'Sub' $P15 = "12_1280467477.44751" 
+    .const 'Sub' $P15 = "12_1283368207.8572" 
     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_1283368207.8572" 
     .return ($P1404)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "" :load :init :subid("post373") :outer("11_1280467477.44751")
+.sub "" :load :init :subid("post373") :outer("11_1283368207.8572")
 .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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .annotate 'line', 4
-    .const 'Sub' $P88 = "25_1280467477.44751" 
+    .const 'Sub' $P88 = "25_1283368207.8572" 
     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_1283368207.8572" 
     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_1283368207.8572") :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_1283368207.8572") :method :outer("23_1283368207.8572")
 .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_1283368207.8572") :method :outer("11_1283368207.8572")
 .annotate 'line', 4
-    .const 'Sub' $P127 = "28_1280467477.44751" 
+    .const 'Sub' $P127 = "28_1283368207.8572" 
     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_1283368207.8572" 
     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_1283368207.8572") :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_1283368207.8572") :method :outer("26_1283368207.8572")
 .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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .annotate 'line', 4
-    .const 'Sub' $P161 = "35_1280467477.44751" 
+    .const 'Sub' $P161 = "35_1283368207.8572" 
     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_1283368207.8572" 
     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_1283368207.8572") :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_1283368207.8572") :method :outer("33_1283368207.8572")
 .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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .annotate 'line', 4
-    .const 'Sub' $P274 = "66_1280467477.44751" 
+    .const 'Sub' $P274 = "66_1283368207.8572" 
     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_1283368207.8572" 
     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_1283368207.8572") :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_1283368207.8572") :method :outer("64_1283368207.8572")
 .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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .annotate 'line', 4
-    .const 'Sub' $P453 = "113_1280467477.44751" 
+    .const 'Sub' $P453 = "113_1283368207.8572" 
     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_1283368207.8572" 
     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_1283368207.8572") :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_1283368207.8572") :method :outer("111_1283368207.8572")
 .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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
     .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("11_1283368207.8572")
     .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_1283368207.8572") :outer("11_1283368207.8572")
 .annotate 'line', 567
-    .const 'Sub' $P1396 = "368_1280467477.44751" 
+    .const 'Sub' $P1396 = "368_1283368207.8572" 
     capture_lex $P1396
-    .const 'Sub' $P1391 = "366_1280467477.44751" 
+    .const 'Sub' $P1391 = "366_1283368207.8572" 
     capture_lex $P1391
-    .const 'Sub' $P1379 = "363_1280467477.44751" 
+    .const 'Sub' $P1379 = "363_1283368207.8572" 
     capture_lex $P1379
-    .const 'Sub' $P1369 = "360_1280467477.44751" 
+    .const 'Sub' $P1369 = "360_1283368207.8572" 
     capture_lex $P1369
-    .const 'Sub' $P1364 = "358_1280467477.44751" 
+    .const 'Sub' $P1364 = "358_1283368207.8572" 
     capture_lex $P1364
-    .const 'Sub' $P1355 = "355_1280467477.44751" 
+    .const 'Sub' $P1355 = "355_1283368207.8572" 
     capture_lex $P1355
-    .const 'Sub' $P1350 = "353_1280467477.44751" 
+    .const 'Sub' $P1350 = "353_1283368207.8572" 
     capture_lex $P1350
-    .const 'Sub' $P1341 = "350_1280467477.44751" 
+    .const 'Sub' $P1341 = "350_1283368207.8572" 
     capture_lex $P1341
-    .const 'Sub' $P1396 = "368_1280467477.44751" 
+    .const 'Sub' $P1396 = "368_1283368207.8572" 
     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_1283368207.8572") :method :outer("349_1283368207.8572")
 .annotate 'line', 567
-    .const 'Sub' $P1347 = "352_1280467477.44751" 
+    .const 'Sub' $P1347 = "352_1283368207.8572" 
     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_1283368207.8572" 
     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_1283368207.8572") :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_1283368207.8572") :method :outer("350_1283368207.8572")
 .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_1283368207.8572") :method :outer("349_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("349_1283368207.8572")
 .annotate 'line', 567
-    .const 'Sub' $P1361 = "357_1280467477.44751" 
+    .const 'Sub' $P1361 = "357_1283368207.8572" 
     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_1283368207.8572" 
     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_1283368207.8572") :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_1283368207.8572") :method :outer("355_1283368207.8572")
 .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_1283368207.8572") :method :outer("349_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("349_1283368207.8572")
 .annotate 'line', 567
-    .const 'Sub' $P1375 = "362_1280467477.44751" 
+    .const 'Sub' $P1375 = "362_1283368207.8572" 
     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_1283368207.8572" 
     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_1283368207.8572") :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_1283368207.8572") :method :outer("360_1283368207.8572")
 .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_1283368207.8572") :method :outer("349_1283368207.8572")
 .annotate 'line', 567
-    .const 'Sub' $P1388 = "365_1280467477.44751" 
+    .const 'Sub' $P1388 = "365_1283368207.8572" 
     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"("assertion", "nibbler", "arglist")
+    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_1283368207.8572" 
     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_1283368207.8572") :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_1283368207.8572") :method :outer("363_1283368207.8572")
 .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_1283368207.8572") :method :outer("349_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572") :method :outer("349_1283368207.8572")
 .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_1283368207.8572") :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_1283368207.8572")
 .annotate 'line', 4
-    .const 'Sub' $P1405 = "11_1280467477.44751" 
+    .const 'Sub' $P1405 = "11_1283368207.8572" 
     $P1406 = $P1405()
     .return ($P1406)
 .end
 
 
 .namespace []
-.sub "_block1424" :load :anon :subid("371_1280467477.44751")
+.sub "_block1424" :load :anon :subid("371_1283368207.8572")
 .annotate 'line', 1
-    .const 'Sub' $P1426 = "10_1280467477.44751" 
+    .const 'Sub' $P1426 = "10_1283368207.8572" 
     $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_1283368216.90714")
 .annotate 'line', 0
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
@@ -18509,237 +20192,237 @@
 .annotate 'line', 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
-    $P2452 = $P14()
+    $P2464 = $P14()
 .annotate 'line', 1
-    .return ($P2452)
-    .const 'Sub' $P2454 = "143_1280467483.70067" 
-    .return ($P2454)
+    .return ($P2464)
+    .const 'Sub' $P2466 = "143_1283368216.90714" 
+    .return ($P2466)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post144") :outer("10_1280467483.70067")
+.sub "" :load :init :subid("post144") :outer("10_1283368216.90714")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467483.70067" 
+    .const 'Sub' $P12 = "10_1283368216.90714" 
     .local pmc block
     set block, $P12
-    $P2457 = get_root_global ["parrot"], "P6metaclass"
-    $P2457."new_class"("NQP::Actions", "HLL::Actions" :named("parent"))
+    $P2469 = get_root_global ["parrot"], "P6metaclass"
+    $P2469."new_class"("NQP::Actions", "HLL::Actions" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block13"  :subid("11_1280467483.70067") :outer("10_1280467483.70067")
+.sub "_block13"  :subid("11_1283368216.90714") :outer("10_1283368216.90714")
 .annotate 'line', 3
-    .const 'Sub' $P2448 = "142_1280467483.70067" 
-    capture_lex $P2448
-    get_hll_global $P2331, ["NQP";"RegexActions"], "_block2330" 
-    capture_lex $P2331
-    .const 'Sub' $P2320 = "132_1280467483.70067" 
-    capture_lex $P2320
-    .const 'Sub' $P2313 = "131_1280467483.70067" 
-    capture_lex $P2313
-    .const 'Sub' $P2306 = "130_1280467483.70067" 
-    capture_lex $P2306
-    .const 'Sub' $P2299 = "129_1280467483.70067" 
-    capture_lex $P2299
-    .const 'Sub' $P2286 = "128_1280467483.70067" 
-    capture_lex $P2286
-    .const 'Sub' $P2276 = "127_1280467483.70067" 
-    capture_lex $P2276
-    .const 'Sub' $P2266 = "126_1280467483.70067" 
-    capture_lex $P2266
-    .const 'Sub' $P2256 = "125_1280467483.70067" 
-    capture_lex $P2256
-    .const 'Sub' $P2249 = "124_1280467483.70067" 
-    capture_lex $P2249
-    .const 'Sub' $P2235 = "123_1280467483.70067" 
-    capture_lex $P2235
-    .const 'Sub' $P2225 = "122_1280467483.70067" 
-    capture_lex $P2225
-    .const 'Sub' $P2188 = "121_1280467483.70067" 
-    capture_lex $P2188
-    .const 'Sub' $P2174 = "120_1280467483.70067" 
-    capture_lex $P2174
-    .const 'Sub' $P2164 = "119_1280467483.70067" 
-    capture_lex $P2164
-    .const 'Sub' $P2154 = "118_1280467483.70067" 
-    capture_lex $P2154
-    .const 'Sub' $P2144 = "117_1280467483.70067" 
-    capture_lex $P2144
-    .const 'Sub' $P2134 = "116_1280467483.70067" 
-    capture_lex $P2134
-    .const 'Sub' $P2124 = "115_1280467483.70067" 
-    capture_lex $P2124
-    .const 'Sub' $P2096 = "114_1280467483.70067" 
-    capture_lex $P2096
-    .const 'Sub' $P2079 = "113_1280467483.70067" 
-    capture_lex $P2079
-    .const 'Sub' $P2069 = "112_1280467483.70067" 
-    capture_lex $P2069
-    .const 'Sub' $P2056 = "111_1280467483.70067" 
-    capture_lex $P2056
-    .const 'Sub' $P2043 = "110_1280467483.70067" 
-    capture_lex $P2043
-    .const 'Sub' $P2030 = "109_1280467483.70067" 
-    capture_lex $P2030
-    .const 'Sub' $P2020 = "108_1280467483.70067" 
-    capture_lex $P2020
-    .const 'Sub' $P1991 = "107_1280467483.70067" 
-    capture_lex $P1991
-    .const 'Sub' $P1967 = "106_1280467483.70067" 
-    capture_lex $P1967
-    .const 'Sub' $P1957 = "105_1280467483.70067" 
-    capture_lex $P1957
-    .const 'Sub' $P1947 = "104_1280467483.70067" 
-    capture_lex $P1947
-    .const 'Sub' $P1920 = "103_1280467483.70067" 
-    capture_lex $P1920
-    .const 'Sub' $P1902 = "102_1280467483.70067" 
-    capture_lex $P1902
-    .const 'Sub' $P1892 = "101_1280467483.70067" 
-    capture_lex $P1892
-    .const 'Sub' $P1788 = "98_1280467483.70067" 
-    capture_lex $P1788
-    .const 'Sub' $P1778 = "97_1280467483.70067" 
-    capture_lex $P1778
-    .const 'Sub' $P1749 = "96_1280467483.70067" 
-    capture_lex $P1749
-    .const 'Sub' $P1707 = "95_1280467483.70067" 
-    capture_lex $P1707
-    .const 'Sub' $P1691 = "94_1280467483.70067" 
-    capture_lex $P1691
-    .const 'Sub' $P1682 = "93_1280467483.70067" 
-    capture_lex $P1682
-    .const 'Sub' $P1650 = "92_1280467483.70067" 
-    capture_lex $P1650
-    .const 'Sub' $P1551 = "89_1280467483.70067" 
-    capture_lex $P1551
-    .const 'Sub' $P1534 = "88_1280467483.70067" 
-    capture_lex $P1534
-    .const 'Sub' $P1514 = "87_1280467483.70067" 
-    capture_lex $P1514
-    .const 'Sub' $P1402 = "84_1280467483.70067" 
-    capture_lex $P1402
-    .const 'Sub' $P1345 = "80_1280467483.70067" 
+    .const 'Sub' $P2460 = "142_1283368216.90714" 
+    capture_lex $P2460
+    get_hll_global $P2343, ["NQP";"RegexActions"], "_block2342" 
+    capture_lex $P2343
+    .const 'Sub' $P2332 = "132_1283368216.90714" 
+    capture_lex $P2332
+    .const 'Sub' $P2325 = "131_1283368216.90714" 
+    capture_lex $P2325
+    .const 'Sub' $P2318 = "130_1283368216.90714" 
+    capture_lex $P2318
+    .const 'Sub' $P2311 = "129_1283368216.90714" 
+    capture_lex $P2311
+    .const 'Sub' $P2298 = "128_1283368216.90714" 
+    capture_lex $P2298
+    .const 'Sub' $P2288 = "127_1283368216.90714" 
+    capture_lex $P2288
+    .const 'Sub' $P2278 = "126_1283368216.90714" 
+    capture_lex $P2278
+    .const 'Sub' $P2268 = "125_1283368216.90714" 
+    capture_lex $P2268
+    .const 'Sub' $P2261 = "124_1283368216.90714" 
+    capture_lex $P2261
+    .const 'Sub' $P2247 = "123_1283368216.90714" 
+    capture_lex $P2247
+    .const 'Sub' $P2237 = "122_1283368216.90714" 
+    capture_lex $P2237
+    .const 'Sub' $P2200 = "121_1283368216.90714" 
+    capture_lex $P2200
+    .const 'Sub' $P2186 = "120_1283368216.90714" 
+    capture_lex $P2186
+    .const 'Sub' $P2176 = "119_1283368216.90714" 
+    capture_lex $P2176
+    .const 'Sub' $P2166 = "118_1283368216.90714" 
+    capture_lex $P2166
+    .const 'Sub' $P2156 = "117_1283368216.90714" 
+    capture_lex $P2156
+    .const 'Sub' $P2146 = "116_1283368216.90714" 
+    capture_lex $P2146
+    .const 'Sub' $P2136 = "115_1283368216.90714" 
+    capture_lex $P2136
+    .const 'Sub' $P2108 = "114_1283368216.90714" 
+    capture_lex $P2108
+    .const 'Sub' $P2091 = "113_1283368216.90714" 
+    capture_lex $P2091
+    .const 'Sub' $P2081 = "112_1283368216.90714" 
+    capture_lex $P2081
+    .const 'Sub' $P2068 = "111_1283368216.90714" 
+    capture_lex $P2068
+    .const 'Sub' $P2055 = "110_1283368216.90714" 
+    capture_lex $P2055
+    .const 'Sub' $P2042 = "109_1283368216.90714" 
+    capture_lex $P2042
+    .const 'Sub' $P2032 = "108_1283368216.90714" 
+    capture_lex $P2032
+    .const 'Sub' $P2003 = "107_1283368216.90714" 
+    capture_lex $P2003
+    .const 'Sub' $P1979 = "106_1283368216.90714" 
+    capture_lex $P1979
+    .const 'Sub' $P1969 = "105_1283368216.90714" 
+    capture_lex $P1969
+    .const 'Sub' $P1959 = "104_1283368216.90714" 
+    capture_lex $P1959
+    .const 'Sub' $P1932 = "103_1283368216.90714" 
+    capture_lex $P1932
+    .const 'Sub' $P1914 = "102_1283368216.90714" 
+    capture_lex $P1914
+    .const 'Sub' $P1904 = "101_1283368216.90714" 
+    capture_lex $P1904
+    .const 'Sub' $P1800 = "98_1283368216.90714" 
+    capture_lex $P1800
+    .const 'Sub' $P1790 = "97_1283368216.90714" 
+    capture_lex $P1790
+    .const 'Sub' $P1761 = "96_1283368216.90714" 
+    capture_lex $P1761
+    .const 'Sub' $P1719 = "95_1283368216.90714" 
+    capture_lex $P1719
+    .const 'Sub' $P1703 = "94_1283368216.90714" 
+    capture_lex $P1703
+    .const 'Sub' $P1694 = "93_1283368216.90714" 
+    capture_lex $P1694
+    .const 'Sub' $P1662 = "92_1283368216.90714" 
+    capture_lex $P1662
+    .const 'Sub' $P1563 = "89_1283368216.90714" 
+    capture_lex $P1563
+    .const 'Sub' $P1546 = "88_1283368216.90714" 
+    capture_lex $P1546
+    .const 'Sub' $P1526 = "87_1283368216.90714" 
+    capture_lex $P1526
+    .const 'Sub' $P1414 = "84_1283368216.90714" 
+    capture_lex $P1414
+    .const 'Sub' $P1345 = "80_1283368216.90714" 
     capture_lex $P1345
-    .const 'Sub' $P1300 = "78_1280467483.70067" 
+    .const 'Sub' $P1300 = "78_1283368216.90714" 
     capture_lex $P1300
-    .const 'Sub' $P1250 = "76_1280467483.70067" 
+    .const 'Sub' $P1250 = "76_1283368216.90714" 
     capture_lex $P1250
-    .const 'Sub' $P1240 = "75_1280467483.70067" 
+    .const 'Sub' $P1240 = "75_1283368216.90714" 
     capture_lex $P1240
-    .const 'Sub' $P1230 = "74_1280467483.70067" 
+    .const 'Sub' $P1230 = "74_1283368216.90714" 
     capture_lex $P1230
-    .const 'Sub' $P1159 = "72_1280467483.70067" 
+    .const 'Sub' $P1159 = "72_1283368216.90714" 
     capture_lex $P1159
-    .const 'Sub' $P1149 = "71_1280467483.70067" 
+    .const 'Sub' $P1149 = "71_1283368216.90714" 
     capture_lex $P1149
-    .const 'Sub' $P1132 = "70_1280467483.70067" 
+    .const 'Sub' $P1132 = "70_1283368216.90714" 
     capture_lex $P1132
-    .const 'Sub' $P1115 = "69_1280467483.70067" 
+    .const 'Sub' $P1115 = "69_1283368216.90714" 
     capture_lex $P1115
-    .const 'Sub' $P1098 = "68_1280467483.70067" 
+    .const 'Sub' $P1098 = "68_1283368216.90714" 
     capture_lex $P1098
-    .const 'Sub' $P1088 = "67_1280467483.70067" 
+    .const 'Sub' $P1088 = "67_1283368216.90714" 
     capture_lex $P1088
-    .const 'Sub' $P1078 = "66_1280467483.70067" 
+    .const 'Sub' $P1078 = "66_1283368216.90714" 
     capture_lex $P1078
-    .const 'Sub' $P1068 = "65_1280467483.70067" 
+    .const 'Sub' $P1068 = "65_1283368216.90714" 
     capture_lex $P1068
-    .const 'Sub' $P1044 = "64_1280467483.70067" 
+    .const 'Sub' $P1044 = "64_1283368216.90714" 
     capture_lex $P1044
-    .const 'Sub' $P991 = "63_1280467483.70067" 
+    .const 'Sub' $P991 = "63_1283368216.90714" 
     capture_lex $P991
-    .const 'Sub' $P981 = "62_1280467483.70067" 
+    .const 'Sub' $P981 = "62_1283368216.90714" 
     capture_lex $P981
-    .const 'Sub' $P892 = "60_1280467483.70067" 
+    .const 'Sub' $P892 = "60_1283368216.90714" 
     capture_lex $P892
-    .const 'Sub' $P866 = "59_1280467483.70067" 
+    .const 'Sub' $P866 = "59_1283368216.90714" 
     capture_lex $P866
-    .const 'Sub' $P850 = "58_1280467483.70067" 
+    .const 'Sub' $P850 = "58_1283368216.90714" 
     capture_lex $P850
-    .const 'Sub' $P840 = "57_1280467483.70067" 
+    .const 'Sub' $P840 = "57_1283368216.90714" 
     capture_lex $P840
-    .const 'Sub' $P830 = "56_1280467483.70067" 
+    .const 'Sub' $P830 = "56_1283368216.90714" 
     capture_lex $P830
-    .const 'Sub' $P820 = "55_1280467483.70067" 
+    .const 'Sub' $P820 = "55_1283368216.90714" 
     capture_lex $P820
-    .const 'Sub' $P810 = "54_1280467483.70067" 
+    .const 'Sub' $P810 = "54_1283368216.90714" 
     capture_lex $P810
-    .const 'Sub' $P800 = "53_1280467483.70067" 
+    .const 'Sub' $P800 = "53_1283368216.90714" 
     capture_lex $P800
-    .const 'Sub' $P790 = "52_1280467483.70067" 
+    .const 'Sub' $P790 = "52_1283368216.90714" 
     capture_lex $P790
-    .const 'Sub' $P780 = "51_1280467483.70067" 
+    .const 'Sub' $P780 = "51_1283368216.90714" 
     capture_lex $P780
-    .const 'Sub' $P770 = "50_1280467483.70067" 
+    .const 'Sub' $P770 = "50_1283368216.90714" 
     capture_lex $P770
-    .const 'Sub' $P760 = "49_1280467483.70067" 
+    .const 'Sub' $P760 = "49_1283368216.90714" 
     capture_lex $P760
-    .const 'Sub' $P750 = "48_1280467483.70067" 
+    .const 'Sub' $P750 = "48_1283368216.90714" 
     capture_lex $P750
-    .const 'Sub' $P740 = "47_1280467483.70067" 
+    .const 'Sub' $P740 = "47_1283368216.90714" 
     capture_lex $P740
-    .const 'Sub' $P730 = "46_1280467483.70067" 
+    .const 'Sub' $P730 = "46_1283368216.90714" 
     capture_lex $P730
-    .const 'Sub' $P720 = "45_1280467483.70067" 
+    .const 'Sub' $P720 = "45_1283368216.90714" 
     capture_lex $P720
-    .const 'Sub' $P702 = "44_1280467483.70067" 
+    .const 'Sub' $P702 = "44_1283368216.90714" 
     capture_lex $P702
-    .const 'Sub' $P667 = "43_1280467483.70067" 
+    .const 'Sub' $P667 = "43_1283368216.90714" 
     capture_lex $P667
-    .const 'Sub' $P651 = "42_1280467483.70067" 
+    .const 'Sub' $P651 = "42_1283368216.90714" 
     capture_lex $P651
-    .const 'Sub' $P630 = "41_1280467483.70067" 
+    .const 'Sub' $P630 = "41_1283368216.90714" 
     capture_lex $P630
-    .const 'Sub' $P610 = "40_1280467483.70067" 
+    .const 'Sub' $P610 = "40_1283368216.90714" 
     capture_lex $P610
-    .const 'Sub' $P597 = "39_1280467483.70067" 
+    .const 'Sub' $P597 = "39_1283368216.90714" 
     capture_lex $P597
-    .const 'Sub' $P571 = "38_1280467483.70067" 
+    .const 'Sub' $P571 = "38_1283368216.90714" 
     capture_lex $P571
-    .const 'Sub' $P535 = "37_1280467483.70067" 
+    .const 'Sub' $P535 = "37_1283368216.90714" 
     capture_lex $P535
-    .const 'Sub' $P518 = "36_1280467483.70067" 
+    .const 'Sub' $P518 = "36_1283368216.90714" 
     capture_lex $P518
-    .const 'Sub' $P504 = "35_1280467483.70067" 
+    .const 'Sub' $P504 = "35_1283368216.90714" 
     capture_lex $P504
-    .const 'Sub' $P451 = "33_1280467483.70067" 
+    .const 'Sub' $P451 = "33_1283368216.90714" 
     capture_lex $P451
-    .const 'Sub' $P440 = "32_1280467483.70067" 
+    .const 'Sub' $P440 = "32_1283368216.90714" 
     capture_lex $P440
-    .const 'Sub' $P427 = "31_1280467483.70067" 
+    .const 'Sub' $P427 = "31_1283368216.90714" 
     capture_lex $P427
-    .const 'Sub' $P407 = "30_1280467483.70067" 
+    .const 'Sub' $P407 = "30_1283368216.90714" 
     capture_lex $P407
-    .const 'Sub' $P397 = "29_1280467483.70067" 
+    .const 'Sub' $P397 = "29_1283368216.90714" 
     capture_lex $P397
-    .const 'Sub' $P387 = "28_1280467483.70067" 
+    .const 'Sub' $P387 = "28_1283368216.90714" 
     capture_lex $P387
-    .const 'Sub' $P371 = "27_1280467483.70067" 
+    .const 'Sub' $P371 = "27_1283368216.90714" 
     capture_lex $P371
-    .const 'Sub' $P288 = "25_1280467483.70067" 
+    .const 'Sub' $P288 = "25_1283368216.90714" 
     capture_lex $P288
-    .const 'Sub' $P245 = "23_1280467483.70067" 
+    .const 'Sub' $P245 = "23_1283368216.90714" 
     capture_lex $P245
-    .const 'Sub' $P213 = "22_1280467483.70067" 
+    .const 'Sub' $P213 = "22_1283368216.90714" 
     capture_lex $P213
-    .const 'Sub' $P180 = "21_1280467483.70067" 
+    .const 'Sub' $P180 = "21_1283368216.90714" 
     capture_lex $P180
-    .const 'Sub' $P170 = "20_1280467483.70067" 
+    .const 'Sub' $P170 = "20_1283368216.90714" 
     capture_lex $P170
-    .const 'Sub' $P151 = "19_1280467483.70067" 
+    .const 'Sub' $P151 = "19_1283368216.90714" 
     capture_lex $P151
-    .const 'Sub' $P100 = "18_1280467483.70067" 
+    .const 'Sub' $P100 = "18_1283368216.90714" 
     capture_lex $P100
-    .const 'Sub' $P84 = "17_1280467483.70067" 
+    .const 'Sub' $P84 = "17_1283368216.90714" 
     capture_lex $P84
-    .const 'Sub' $P63 = "16_1280467483.70067" 
+    .const 'Sub' $P63 = "16_1283368216.90714" 
     capture_lex $P63
-    .const 'Sub' $P27 = "13_1280467483.70067" 
+    .const 'Sub' $P27 = "13_1283368216.90714" 
     capture_lex $P27
-    .const 'Sub' $P16 = "12_1280467483.70067" 
+    .const 'Sub' $P16 = "12_1283368216.90714" 
     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_1283368216.90714" 
     newclosure $P26, $P16
     .lex "xblock_immediate", $P26
 .annotate 'line', 14
-    .const 'Sub' $P27 = "13_1280467483.70067" 
+    .const 'Sub' $P27 = "13_1283368216.90714" 
     newclosure $P62, $P27
     .lex "block_immediate", $P62
 .annotate 'line', 24
-    .const 'Sub' $P63 = "16_1280467483.70067" 
+    .const 'Sub' $P63 = "16_1283368216.90714" 
     newclosure $P83, $P63
     .lex "vivitype", $P83
 .annotate 'line', 43
-    .const 'Sub' $P84 = "17_1280467483.70067" 
+    .const 'Sub' $P84 = "17_1283368216.90714" 
     newclosure $P99, $P84
     .lex "colonpair_str", $P99
 .annotate 'line', 223
-    .const 'Sub' $P100 = "18_1280467483.70067" 
+    .const 'Sub' $P100 = "18_1283368216.90714" 
     newclosure $P150, $P100
     .lex "push_block_handler", $P150
-.annotate 'line', 835
-    .const 'Sub' $P151 = "19_1280467483.70067" 
+.annotate 'line', 836
+    .const 'Sub' $P151 = "19_1283368216.90714" 
     newclosure $P165, $P151
     .lex "control", $P165
 .annotate 'line', 3
@@ -18786,52 +20469,52 @@
     find_lex $P212, "colonpair_str"
 .annotate 'line', 216
     find_lex $P650, "push_block_handler"
-.annotate 'line', 826
-    find_lex $P2298, "control"
-.annotate 'line', 853
-    get_hll_global $P2331, ["NQP";"RegexActions"], "_block2330" 
-    capture_lex $P2331
-    $P2442 = $P2331()
+.annotate 'line', 827
+    find_lex $P2310, "control"
+.annotate 'line', 854
+    get_hll_global $P2343, ["NQP";"RegexActions"], "_block2342" 
+    capture_lex $P2343
+    $P2454 = $P2343()
 .annotate 'line', 3
-    .return ($P2442)
-    .const 'Sub' $P2444 = "141_1280467483.70067" 
-    .return ($P2444)
+    .return ($P2454)
+    .const 'Sub' $P2456 = "141_1283368216.90714" 
+    .return ($P2456)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "" :load :init :subid("post145") :outer("11_1280467483.70067")
+.sub "" :load :init :subid("post145") :outer("11_1283368216.90714")
 .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" 
-    capture_lex $P2448
-    $P2448()
-    $P2451 = get_root_global ["parrot"], "P6metaclass"
-    $P2451."new_class"("NQP::RegexActions", "Regex::P6Regex::Actions" :named("parent"))
+    .const 'Sub' $P2460 = "142_1283368216.90714" 
+    capture_lex $P2460
+    $P2460()
+    $P2463 = get_root_global ["parrot"], "P6metaclass"
+    $P2463."new_class"("NQP::RegexActions", "Regex::P6Regex::Actions" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2447"  :anon :subid("142_1280467483.70067") :outer("11_1280467483.70067")
+.sub "_block2459"  :anon :subid("142_1283368216.90714") :outer("11_1283368216.90714")
 .annotate 'line', 6
-    get_global $P2449, "@BLOCK"
-    unless_null $P2449, vivify_146
-    $P2449 = root_new ['parrot';'ResizablePMCArray']
-    set_global "@BLOCK", $P2449
+    get_global $P2461, "@BLOCK"
+    unless_null $P2461, vivify_146
+    $P2461 = root_new ['parrot';'ResizablePMCArray']
+    set_global "@BLOCK", $P2461
   vivify_146:
- $P2450 = new ['ResizablePMCArray'] 
-    set_global "@BLOCK", $P2450
+ $P2462 = new ['ResizablePMCArray'] 
+    set_global "@BLOCK", $P2462
 .annotate 'line', 5
-    .return ($P2450)
+    .return ($P2462)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "xblock_immediate"  :subid("12_1280467483.70067") :outer("11_1280467483.70067")
+.sub "xblock_immediate"  :subid("12_1283368216.90714") :outer("11_1283368216.90714")
     .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_1283368216.90714") :outer("11_1283368216.90714")
     .param pmc param_30
 .annotate 'line', 14
-    .const 'Sub' $P40 = "14_1280467483.70067" 
+    .const 'Sub' $P40 = "14_1283368216.90714" 
     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_1283368216.90714" 
     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_1283368216.90714") :outer("13_1283368216.90714")
 .annotate 'line', 16
-    .const 'Sub' $P51 = "15_1280467483.70067" 
+    .const 'Sub' $P51 = "15_1283368216.90714" 
     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_1283368216.90714" 
     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_1283368216.90714") :outer("14_1283368216.90714")
     .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_1283368216.90714") :outer("11_1283368216.90714")
     .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_1283368216.90714") :outer("11_1283368216.90714")
     .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_1283368216.90714") :outer("11_1283368216.90714")
     .param pmc param_103
     .param pmc param_104
 .annotate 'line', 223
@@ -19177,28 +20860,28 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "control"  :subid("19_1280467483.70067") :outer("11_1280467483.70067")
+.sub "control"  :subid("19_1283368216.90714") :outer("11_1283368216.90714")
     .param pmc param_154
     .param pmc param_155
-.annotate 'line', 835
+.annotate 'line', 836
     new $P153, 'ExceptionHandler'
     set_addr $P153, control_152
     $P153."handle_types"(.CONTROL_RETURN)
     push_eh $P153
     .lex "$/", param_154
     .lex "$type", param_155
-.annotate 'line', 836
+.annotate 'line', 837
     find_lex $P156, "$/"
     get_hll_global $P157, ["PAST"], "Op"
     find_lex $P158, "$/"
-.annotate 'line', 840
+.annotate 'line', 841
     get_hll_global $P159, ["PAST"], "Val"
     find_lex $P160, "$type"
     $P161 = $P159."new"($P160 :named("value"), "!except_types" :named("returns"))
     $P162 = $P157."new"(0, $P161, $P158 :named("node"), "die__vii" :named("pirop"))
-.annotate 'line', 836
+.annotate 'line', 837
     $P163 = $P156."!make"($P162)
-.annotate 'line', 835
+.annotate 'line', 836
     .return ($P163)
   control_152:
     .local pmc exception 
@@ -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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .param pmc param_248
 .annotate 'line', 76
-    .const 'Sub' $P262 = "24_1280467483.70067" 
+    .const 'Sub' $P262 = "24_1283368216.90714" 
     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_1283368216.90714" 
     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_1283368216.90714") :outer("23_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714" 
     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_1283368216.90714" 
     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_1283368216.90714") :outer("25_1283368216.90714")
 .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .param pmc param_454
 .annotate 'line', 150
-    .const 'Sub' $P482 = "34_1280467483.70067" 
+    .const 'Sub' $P482 = "34_1283368216.90714" 
     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_1283368216.90714" 
     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_1283368216.90714") :outer("33_1283368216.90714")
 .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .param pmc param_895
 .annotate 'line', 328
-    .const 'Sub' $P908 = "61_1280467483.70067" 
+    .const 'Sub' $P908 = "61_1283368216.90714" 
     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_1283368216.90714" 
     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_1283368216.90714") :outer("60_1283368216.90714")
 .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .param pmc param_1162
 .annotate 'line', 417
-    .const 'Sub' $P1202 = "73_1280467483.70067" 
+    .const 'Sub' $P1202 = "73_1283368216.90714" 
     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_1283368216.90714" 
     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_1283368216.90714") :outer("72_1283368216.90714")
 .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .param pmc param_1253
 .annotate 'line', 448
-    .const 'Sub' $P1264 = "77_1280467483.70067" 
+    .const 'Sub' $P1264 = "77_1283368216.90714" 
     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_1283368216.90714" 
     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_1283368216.90714") :outer("76_1283368216.90714")
 .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .param pmc param_1303
 .annotate 'line', 466
-    .const 'Sub' $P1324 = "79_1280467483.70067" 
+    .const 'Sub' $P1324 = "79_1283368216.90714" 
     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_1283368216.90714" 
     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_1283368216.90714") :outer("78_1283368216.90714")
 .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_1283368216.90714") :method :outer("11_1283368216.90714")
     .param pmc param_1348
 .annotate 'line', 484
-    .const 'Sub' $P1374 = "82_1280467483.70067" 
+    .const 'Sub' $P1374 = "82_1283368216.90714" 
     capture_lex $P1374
-    .const 'Sub' $P1359 = "81_1280467483.70067" 
+    .const 'Sub' $P1359 = "81_1283368216.90714" 
     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_1283368216.90714" 
     capture_lex $P1359
     $P1359($P1357)
   loop1365_next:
@@ -22781,23 +24464,23 @@
     set $P1368, $I1372
     goto if_1369_end
   if_1369:
-    .const 'Sub' $P1374 = "82_1280467483.70067" 
+    .const 'Sub' $P1374 = "82_1283368216.90714" 
     capture_lex $P1374
-    $P1400 = $P1374()
-    set $P1368, $P1400
+    $P1412 = $P1374()
+    set $P1368, $P1412
   if_1369_end:
 .annotate 'line', 484
     .return ($P1368)
   control_1346:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1401, exception, "payload"
-    .return ($P1401)
+    getattribute $P1413, exception, "payload"
+    .return ($P1413)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1358"  :anon :subid("81_1280467483.70067") :outer("80_1280467483.70067")
+.sub "_block1358"  :anon :subid("81_1283368216.90714") :outer("80_1283368216.90714")
     .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_1283368216.90714") :outer("80_1283368216.90714")
 .annotate 'line', 490
-    .const 'Sub' $P1383 = "83_1280467483.70067" 
+    .const 'Sub' $P1383 = "83_1283368216.90714" 
     capture_lex $P1383
 .annotate 'line', 491
     $P1375 = root_new ['parrot';'ResizablePMCArray']
@@ -22826,3128 +24509,3153 @@
     defined $I1380, $P1379
     unless $I1380, for_undef_458
     iter $P1377, $P1379
-    new $P1394, 'ExceptionHandler'
-    set_addr $P1394, loop1393_handler
-    $P1394."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1394
-  loop1393_test:
-    unless $P1377, loop1393_done
+    new $P1406, 'ExceptionHandler'
+    set_addr $P1406, loop1405_handler
+    $P1406."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1406
+  loop1405_test:
+    unless $P1377, loop1405_done
     shift $P1381, $P1377
-  loop1393_redo:
-    .const 'Sub' $P1383 = "83_1280467483.70067" 
+  loop1405_redo:
+    .const 'Sub' $P1383 = "83_1283368216.90714" 
     capture_lex $P1383
     $P1383($P1381)
-  loop1393_next:
-    goto loop1393_test
-  loop1393_handler:
+  loop1405_next:
+    goto loop1405_test
+  loop1405_handler:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1395, exception, 'type'
-    eq $P1395, .CONTROL_LOOP_NEXT, loop1393_next
-    eq $P1395, .CONTROL_LOOP_REDO, loop1393_redo
-  loop1393_done:
+    getattribute $P1407, exception, 'type'
+    eq $P1407, .CONTROL_LOOP_NEXT, loop1405_next
+    eq $P1407, .CONTROL_LOOP_REDO, loop1405_redo
+  loop1405_done:
     pop_eh 
   for_undef_458:
-.annotate 'line', 495
-    get_global $P1396, "@BLOCK"
-    unless_null $P1396, vivify_459
-    $P1396 = root_new ['parrot';'ResizablePMCArray']
+.annotate 'line', 496
+    get_global $P1408, "@BLOCK"
+    unless_null $P1408, vivify_459
+    $P1408 = root_new ['parrot';'ResizablePMCArray']
   vivify_459:
-    set $P1397, $P1396[0]
-    unless_null $P1397, vivify_460
-    new $P1397, "Undef"
+    set $P1409, $P1408[0]
+    unless_null $P1409, vivify_460
+    new $P1409, "Undef"
   vivify_460:
-    find_lex $P1398, "@params"
-    $P1399 = $P1397."multi"($P1398)
+    find_lex $P1410, "@params"
+    $P1411 = $P1409."multi"($P1410)
 .annotate 'line', 490
-    .return ($P1399)
+    .return ($P1411)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1382"  :anon :subid("83_1280467483.70067") :outer("82_1280467483.70067")
+.sub "_block1382"  :anon :subid("83_1283368216.90714") :outer("82_1283368216.90714")
     .param pmc param_1384
 .annotate 'line', 492
     .lex "$_", param_1384
+.annotate 'line', 494
+    find_lex $P1391, "$_"
+    $P1392 = $P1391."slurpy"()
+    unless $P1392, unless_1390
+    set $P1389, $P1392
+    goto unless_1390_end
+  unless_1390:
+    find_lex $P1393, "$_"
+    $P1394 = $P1393."named"()
+    set $P1389, $P1394
+  unless_1390_end:
+    unless $P1389, unless_1388
+    set $P1387, $P1389
+    goto unless_1388_end
+  unless_1388:
+    find_lex $P1395, "$_"
+    $P1396 = $P1395."viviself"()
+    set $P1387, $P1396
+  unless_1388_end:
+    unless $P1387, unless_1386
+    set $P1385, $P1387
+    goto unless_1386_end
+  unless_1386:
 .annotate 'line', 493
-    find_lex $P1385, "@params"
-    find_lex $P1387, "$_"
-    $P1388 = $P1387."multitype"()
-    set $P1386, $P1388
-    defined $I1390, $P1386
-    if $I1390, default_1389
-    new $P1391, "String"
-    assign $P1391, "_"
-    set $P1386, $P1391
-  default_1389:
-    $P1392 = $P1385."push"($P1386)
+    find_lex $P1397, "@params"
+    find_lex $P1399, "$_"
+    $P1400 = $P1399."multitype"()
+    set $P1398, $P1400
+    defined $I1402, $P1398
+    if $I1402, default_1401
+    new $P1403, "String"
+    assign $P1403, "_"
+    set $P1398, $P1403
+  default_1401:
+    $P1404 = $P1397."push"($P1398)
+    set $P1385, $P1404
+  unless_1386_end:
 .annotate 'line', 492
-    .return ($P1392)
+    .return ($P1385)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "parameter"  :subid("84_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1405
-.annotate 'line', 499
-    .const 'Sub' $P1486 = "85_1280467483.70067" 
-    capture_lex $P1486
-    new $P1404, 'ExceptionHandler'
-    set_addr $P1404, control_1403
-    $P1404."handle_types"(.CONTROL_RETURN)
-    push_eh $P1404
-    .lex "self", self
-    .lex "$/", param_1405
+.sub "parameter"  :subid("84_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1417
 .annotate 'line', 500
-    new $P1406, "Undef"
-    .lex "$quant", $P1406
+    .const 'Sub' $P1498 = "85_1283368216.90714" 
+    capture_lex $P1498
+    new $P1416, 'ExceptionHandler'
+    set_addr $P1416, control_1415
+    $P1416."handle_types"(.CONTROL_RETURN)
+    push_eh $P1416
+    .lex "self", self
+    .lex "$/", param_1417
 .annotate 'line', 501
-    new $P1407, "Undef"
-    .lex "$past", $P1407
-.annotate 'line', 500
-    find_lex $P1408, "$/"
-    unless_null $P1408, vivify_461
-    $P1408 = root_new ['parrot';'Hash']
+    new $P1418, "Undef"
+    .lex "$quant", $P1418
+.annotate 'line', 502
+    new $P1419, "Undef"
+    .lex "$past", $P1419
+.annotate 'line', 501
+    find_lex $P1420, "$/"
+    unless_null $P1420, vivify_461
+    $P1420 = root_new ['parrot';'Hash']
   vivify_461:
-    set $P1409, $P1408["quant"]
-    unless_null $P1409, vivify_462
-    new $P1409, "Undef"
+    set $P1421, $P1420["quant"]
+    unless_null $P1421, vivify_462
+    new $P1421, "Undef"
   vivify_462:
-    store_lex "$quant", $P1409
-    find_lex $P1410, "$past"
-.annotate 'line', 502
-    find_lex $P1412, "$/"
-    unless_null $P1412, vivify_463
-    $P1412 = root_new ['parrot';'Hash']
+    store_lex "$quant", $P1421
+    find_lex $P1422, "$past"
+.annotate 'line', 503
+    find_lex $P1424, "$/"
+    unless_null $P1424, vivify_463
+    $P1424 = root_new ['parrot';'Hash']
   vivify_463:
-    set $P1413, $P1412["named_param"]
-    unless_null $P1413, vivify_464
-    new $P1413, "Undef"
+    set $P1425, $P1424["named_param"]
+    unless_null $P1425, vivify_464
+    new $P1425, "Undef"
   vivify_464:
-    if $P1413, if_1411
-.annotate 'line', 509
-    find_lex $P1427, "$/"
-    unless_null $P1427, vivify_465
-    $P1427 = root_new ['parrot';'Hash']
+    if $P1425, if_1423
+.annotate 'line', 510
+    find_lex $P1439, "$/"
+    unless_null $P1439, vivify_465
+    $P1439 = root_new ['parrot';'Hash']
   vivify_465:
-    set $P1428, $P1427["param_var"]
-    unless_null $P1428, vivify_466
-    new $P1428, "Undef"
+    set $P1440, $P1439["param_var"]
+    unless_null $P1440, vivify_466
+    new $P1440, "Undef"
   vivify_466:
-    $P1429 = $P1428."ast"()
-    store_lex "$past", $P1429
-.annotate 'line', 510
-    find_lex $P1431, "$quant"
-    set $S1432, $P1431
-    iseq $I1433, $S1432, "*"
-    if $I1433, if_1430
-.annotate 'line', 514
-    find_lex $P1442, "$quant"
-    set $S1443, $P1442
-    iseq $I1444, $S1443, "?"
-    unless $I1444, if_1441_end
+    $P1441 = $P1440."ast"()
+    store_lex "$past", $P1441
+.annotate 'line', 511
+    find_lex $P1443, "$quant"
+    set $S1444, $P1443
+    iseq $I1445, $S1444, "*"
+    if $I1445, if_1442
 .annotate 'line', 515
-    find_lex $P1445, "$past"
-    find_lex $P1446, "$/"
-    unless_null $P1446, vivify_467
-    $P1446 = root_new ['parrot';'Hash']
+    find_lex $P1454, "$quant"
+    set $S1455, $P1454
+    iseq $I1456, $S1455, "?"
+    unless $I1456, if_1453_end
+.annotate 'line', 516
+    find_lex $P1457, "$past"
+    find_lex $P1458, "$/"
+    unless_null $P1458, vivify_467
+    $P1458 = root_new ['parrot';'Hash']
   vivify_467:
-    set $P1447, $P1446["param_var"]
-    unless_null $P1447, vivify_468
-    $P1447 = root_new ['parrot';'Hash']
+    set $P1459, $P1458["param_var"]
+    unless_null $P1459, vivify_468
+    $P1459 = root_new ['parrot';'Hash']
   vivify_468:
-    set $P1448, $P1447["sigil"]
-    unless_null $P1448, vivify_469
-    new $P1448, "Undef"
+    set $P1460, $P1459["sigil"]
+    unless_null $P1460, vivify_469
+    new $P1460, "Undef"
   vivify_469:
-    $P1449 = "vivitype"($P1448)
-    $P1445."viviself"($P1449)
-  if_1441_end:
-.annotate 'line', 514
-    goto if_1430_end
-  if_1430:
-.annotate 'line', 511
-    find_lex $P1434, "$past"
-    $P1434."slurpy"(1)
+    $P1461 = "vivitype"($P1460)
+    $P1457."viviself"($P1461)
+  if_1453_end:
+.annotate 'line', 515
+    goto if_1442_end
+  if_1442:
 .annotate 'line', 512
-    find_lex $P1435, "$past"
-    find_lex $P1436, "$/"
-    unless_null $P1436, vivify_470
-    $P1436 = root_new ['parrot';'Hash']
+    find_lex $P1446, "$past"
+    $P1446."slurpy"(1)
+.annotate 'line', 513
+    find_lex $P1447, "$past"
+    find_lex $P1448, "$/"
+    unless_null $P1448, vivify_470
+    $P1448 = root_new ['parrot';'Hash']
   vivify_470:
-    set $P1437, $P1436["param_var"]
-    unless_null $P1437, vivify_471
-    $P1437 = root_new ['parrot';'Hash']
+    set $P1449, $P1448["param_var"]
+    unless_null $P1449, vivify_471
+    $P1449 = root_new ['parrot';'Hash']
   vivify_471:
-    set $P1438, $P1437["sigil"]
-    unless_null $P1438, vivify_472
-    new $P1438, "Undef"
+    set $P1450, $P1449["sigil"]
+    unless_null $P1450, vivify_472
+    new $P1450, "Undef"
   vivify_472:
-    set $S1439, $P1438
-    iseq $I1440, $S1439, "%"
-    $P1435."named"($I1440)
-  if_1430_end:
-.annotate 'line', 508
-    goto if_1411_end
-  if_1411:
-.annotate 'line', 503
-    find_lex $P1414, "$/"
-    unless_null $P1414, vivify_473
-    $P1414 = root_new ['parrot';'Hash']
+    set $S1451, $P1450
+    iseq $I1452, $S1451, "%"
+    $P1447."named"($I1452)
+  if_1442_end:
+.annotate 'line', 509
+    goto if_1423_end
+  if_1423:
+.annotate 'line', 504
+    find_lex $P1426, "$/"
+    unless_null $P1426, vivify_473
+    $P1426 = root_new ['parrot';'Hash']
   vivify_473:
-    set $P1415, $P1414["named_param"]
-    unless_null $P1415, vivify_474
-    new $P1415, "Undef"
+    set $P1427, $P1426["named_param"]
+    unless_null $P1427, vivify_474
+    new $P1427, "Undef"
   vivify_474:
-    $P1416 = $P1415."ast"()
-    store_lex "$past", $P1416
-.annotate 'line', 504
-    find_lex $P1418, "$quant"
-    set $S1419, $P1418
-    isne $I1420, $S1419, "!"
-    unless $I1420, if_1417_end
+    $P1428 = $P1427."ast"()
+    store_lex "$past", $P1428
 .annotate 'line', 505
-    find_lex $P1421, "$past"
-    find_lex $P1422, "$/"
-    unless_null $P1422, vivify_475
-    $P1422 = root_new ['parrot';'Hash']
+    find_lex $P1430, "$quant"
+    set $S1431, $P1430
+    isne $I1432, $S1431, "!"
+    unless $I1432, if_1429_end
+.annotate 'line', 506
+    find_lex $P1433, "$past"
+    find_lex $P1434, "$/"
+    unless_null $P1434, vivify_475
+    $P1434 = root_new ['parrot';'Hash']
   vivify_475:
-    set $P1423, $P1422["named_param"]
-    unless_null $P1423, vivify_476
-    $P1423 = root_new ['parrot';'Hash']
+    set $P1435, $P1434["named_param"]
+    unless_null $P1435, vivify_476
+    $P1435 = root_new ['parrot';'Hash']
   vivify_476:
-    set $P1424, $P1423["param_var"]
-    unless_null $P1424, vivify_477
-    $P1424 = root_new ['parrot';'Hash']
+    set $P1436, $P1435["param_var"]
+    unless_null $P1436, vivify_477
+    $P1436 = root_new ['parrot';'Hash']
   vivify_477:
-    set $P1425, $P1424["sigil"]
-    unless_null $P1425, vivify_478
-    new $P1425, "Undef"
+    set $P1437, $P1436["sigil"]
+    unless_null $P1437, vivify_478
+    new $P1437, "Undef"
   vivify_478:
-    $P1426 = "vivitype"($P1425)
-    $P1421."viviself"($P1426)
-  if_1417_end:
-  if_1411_end:
-.annotate 'line', 518
-    find_lex $P1451, "$/"
-    unless_null $P1451, vivify_479
-    $P1451 = root_new ['parrot';'Hash']
+    $P1438 = "vivitype"($P1437)
+    $P1433."viviself"($P1438)
+  if_1429_end:
+  if_1423_end:
+.annotate 'line', 519
+    find_lex $P1463, "$/"
+    unless_null $P1463, vivify_479
+    $P1463 = root_new ['parrot';'Hash']
   vivify_479:
-    set $P1452, $P1451["default_value"]
-    unless_null $P1452, vivify_480
-    new $P1452, "Undef"
+    set $P1464, $P1463["default_value"]
+    unless_null $P1464, vivify_480
+    new $P1464, "Undef"
   vivify_480:
-    unless $P1452, if_1450_end
-.annotate 'line', 519
-    find_lex $P1454, "$quant"
-    set $S1455, $P1454
-    iseq $I1456, $S1455, "*"
-    unless $I1456, if_1453_end
+    unless $P1464, if_1462_end
 .annotate 'line', 520
-    find_lex $P1457, "$/"
-    $P1458 = $P1457."CURSOR"()
-    $P1458."panic"("Can't put default on slurpy parameter")
-  if_1453_end:
-.annotate 'line', 522
-    find_lex $P1460, "$quant"
-    set $S1461, $P1460
-    iseq $I1462, $S1461, "!"
-    unless $I1462, if_1459_end
+    find_lex $P1466, "$quant"
+    set $S1467, $P1466
+    iseq $I1468, $S1467, "*"
+    unless $I1468, if_1465_end
+.annotate 'line', 521
+    find_lex $P1469, "$/"
+    $P1470 = $P1469."CURSOR"()
+    $P1470."panic"("Can't put default on slurpy parameter")
+  if_1465_end:
 .annotate 'line', 523
-    find_lex $P1463, "$/"
-    $P1464 = $P1463."CURSOR"()
-    $P1464."panic"("Can't put default on required parameter")
-  if_1459_end:
-.annotate 'line', 525
-    find_lex $P1465, "$past"
-    find_lex $P1466, "$/"
-    unless_null $P1466, vivify_481
-    $P1466 = root_new ['parrot';'Hash']
+    find_lex $P1472, "$quant"
+    set $S1473, $P1472
+    iseq $I1474, $S1473, "!"
+    unless $I1474, if_1471_end
+.annotate 'line', 524
+    find_lex $P1475, "$/"
+    $P1476 = $P1475."CURSOR"()
+    $P1476."panic"("Can't put default on required parameter")
+  if_1471_end:
+.annotate 'line', 526
+    find_lex $P1477, "$past"
+    find_lex $P1478, "$/"
+    unless_null $P1478, vivify_481
+    $P1478 = root_new ['parrot';'Hash']
   vivify_481:
-    set $P1467, $P1466["default_value"]
-    unless_null $P1467, vivify_482
-    $P1467 = root_new ['parrot';'ResizablePMCArray']
+    set $P1479, $P1478["default_value"]
+    unless_null $P1479, vivify_482
+    $P1479 = root_new ['parrot';'ResizablePMCArray']
   vivify_482:
-    set $P1468, $P1467[0]
-    unless_null $P1468, vivify_483
-    $P1468 = root_new ['parrot';'Hash']
+    set $P1480, $P1479[0]
+    unless_null $P1480, vivify_483
+    $P1480 = root_new ['parrot';'Hash']
   vivify_483:
-    set $P1469, $P1468["EXPR"]
-    unless_null $P1469, vivify_484
-    new $P1469, "Undef"
+    set $P1481, $P1480["EXPR"]
+    unless_null $P1481, vivify_484
+    new $P1481, "Undef"
   vivify_484:
-    $P1470 = $P1469."ast"()
-    $P1465."viviself"($P1470)
-  if_1450_end:
-.annotate 'line', 527
-    find_lex $P1472, "$past"
-    $P1473 = $P1472."viviself"()
-    if $P1473, unless_1471_end
-    get_global $P1474, "@BLOCK"
-    unless_null $P1474, vivify_485
-    $P1474 = root_new ['parrot';'ResizablePMCArray']
+    $P1482 = $P1481."ast"()
+    $P1477."viviself"($P1482)
+  if_1462_end:
+.annotate 'line', 528
+    find_lex $P1484, "$past"
+    $P1485 = $P1484."viviself"()
+    if $P1485, unless_1483_end
+    get_global $P1486, "@BLOCK"
+    unless_null $P1486, vivify_485
+    $P1486 = root_new ['parrot';'ResizablePMCArray']
   vivify_485:
-    set $P1475, $P1474[0]
-    unless_null $P1475, vivify_486
-    new $P1475, "Undef"
+    set $P1487, $P1486[0]
+    unless_null $P1487, vivify_486
+    new $P1487, "Undef"
   vivify_486:
-    get_global $P1476, "@BLOCK"
-    unless_null $P1476, vivify_487
-    $P1476 = root_new ['parrot';'ResizablePMCArray']
+    get_global $P1488, "@BLOCK"
+    unless_null $P1488, vivify_487
+    $P1488 = root_new ['parrot';'ResizablePMCArray']
   vivify_487:
-    set $P1477, $P1476[0]
-    unless_null $P1477, vivify_488
-    new $P1477, "Undef"
+    set $P1489, $P1488[0]
+    unless_null $P1489, vivify_488
+    new $P1489, "Undef"
   vivify_488:
-    $P1478 = $P1477."arity"()
-    set $N1479, $P1478
-    new $P1480, 'Float'
-    set $P1480, $N1479
-    add $P1481, $P1480, 1
-    $P1475."arity"($P1481)
-  unless_1471_end:
-.annotate 'line', 530
-    find_lex $P1483, "$/"
-    unless_null $P1483, vivify_489
-    $P1483 = root_new ['parrot';'Hash']
+    $P1490 = $P1489."arity"()
+    set $N1491, $P1490
+    new $P1492, 'Float'
+    set $P1492, $N1491
+    add $P1493, $P1492, 1
+    $P1487."arity"($P1493)
+  unless_1483_end:
+.annotate 'line', 531
+    find_lex $P1495, "$/"
+    unless_null $P1495, vivify_489
+    $P1495 = root_new ['parrot';'Hash']
   vivify_489:
-    set $P1484, $P1483["typename"]
-    unless_null $P1484, vivify_490
-    new $P1484, "Undef"
+    set $P1496, $P1495["typename"]
+    unless_null $P1496, vivify_490
+    new $P1496, "Undef"
   vivify_490:
-    unless $P1484, if_1482_end
-    .const 'Sub' $P1486 = "85_1280467483.70067" 
-    capture_lex $P1486
-    $P1486()
-  if_1482_end:
-.annotate 'line', 536
-    find_lex $P1510, "$/"
-    find_lex $P1511, "$past"
-    $P1512 = $P1510."!make"($P1511)
-.annotate 'line', 499
-    .return ($P1512)
-  control_1403:
+    unless $P1496, if_1494_end
+    .const 'Sub' $P1498 = "85_1283368216.90714" 
+    capture_lex $P1498
+    $P1498()
+  if_1494_end:
+.annotate 'line', 537
+    find_lex $P1522, "$/"
+    find_lex $P1523, "$past"
+    $P1524 = $P1522."!make"($P1523)
+.annotate 'line', 500
+    .return ($P1524)
+  control_1415:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1513, exception, "payload"
-    .return ($P1513)
+    getattribute $P1525, exception, "payload"
+    .return ($P1525)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1485"  :anon :subid("85_1280467483.70067") :outer("84_1280467483.70067")
-.annotate 'line', 530
-    .const 'Sub' $P1498 = "86_1280467483.70067" 
-    capture_lex $P1498
+.sub "_block1497"  :anon :subid("85_1283368216.90714") :outer("84_1283368216.90714")
 .annotate 'line', 531
-    $P1487 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@multitype", $P1487
-.annotate 'line', 530
-    find_lex $P1488, "@multitype"
+    .const 'Sub' $P1510 = "86_1283368216.90714" 
+    capture_lex $P1510
 .annotate 'line', 532
-    find_lex $P1490, "$/"
-    unless_null $P1490, vivify_491
-    $P1490 = root_new ['parrot';'Hash']
+    $P1499 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@multitype", $P1499
+.annotate 'line', 531
+    find_lex $P1500, "@multitype"
+.annotate 'line', 533
+    find_lex $P1502, "$/"
+    unless_null $P1502, vivify_491
+    $P1502 = root_new ['parrot';'Hash']
   vivify_491:
-    set $P1491, $P1490["typename"]
-    unless_null $P1491, vivify_492
-    $P1491 = root_new ['parrot';'ResizablePMCArray']
+    set $P1503, $P1502["typename"]
+    unless_null $P1503, vivify_492
+    $P1503 = root_new ['parrot';'ResizablePMCArray']
   vivify_492:
-    set $P1492, $P1491[0]
-    unless_null $P1492, vivify_493
-    $P1492 = root_new ['parrot';'Hash']
+    set $P1504, $P1503[0]
+    unless_null $P1504, vivify_493
+    $P1504 = root_new ['parrot';'Hash']
   vivify_493:
-    set $P1493, $P1492["name"]
-    unless_null $P1493, vivify_494
-    $P1493 = root_new ['parrot';'Hash']
+    set $P1505, $P1504["name"]
+    unless_null $P1505, vivify_494
+    $P1505 = root_new ['parrot';'Hash']
   vivify_494:
-    set $P1494, $P1493["identifier"]
-    unless_null $P1494, vivify_495
-    new $P1494, "Undef"
+    set $P1506, $P1505["identifier"]
+    unless_null $P1506, vivify_495
+    new $P1506, "Undef"
   vivify_495:
-    defined $I1495, $P1494
-    unless $I1495, for_undef_496
-    iter $P1489, $P1494
-    new $P1505, 'ExceptionHandler'
-    set_addr $P1505, loop1504_handler
-    $P1505."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1505
-  loop1504_test:
-    unless $P1489, loop1504_done
-    shift $P1496, $P1489
-  loop1504_redo:
-    .const 'Sub' $P1498 = "86_1280467483.70067" 
-    capture_lex $P1498
-    $P1498($P1496)
-  loop1504_next:
-    goto loop1504_test
-  loop1504_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1506, exception, 'type'
-    eq $P1506, .CONTROL_LOOP_NEXT, loop1504_next
-    eq $P1506, .CONTROL_LOOP_REDO, loop1504_redo
-  loop1504_done:
+    defined $I1507, $P1506
+    unless $I1507, for_undef_496
+    iter $P1501, $P1506
+    new $P1517, 'ExceptionHandler'
+    set_addr $P1517, loop1516_handler
+    $P1517."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1517
+  loop1516_test:
+    unless $P1501, loop1516_done
+    shift $P1508, $P1501
+  loop1516_redo:
+    .const 'Sub' $P1510 = "86_1283368216.90714" 
+    capture_lex $P1510
+    $P1510($P1508)
+  loop1516_next:
+    goto loop1516_test
+  loop1516_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1518, exception, 'type'
+    eq $P1518, .CONTROL_LOOP_NEXT, loop1516_next
+    eq $P1518, .CONTROL_LOOP_REDO, loop1516_redo
+  loop1516_done:
     pop_eh 
   for_undef_496:
-.annotate 'line', 533
-    find_lex $P1507, "$past"
-    find_lex $P1508, "@multitype"
-    $P1509 = $P1507."multitype"($P1508)
-.annotate 'line', 530
-    .return ($P1509)
+.annotate 'line', 534
+    find_lex $P1519, "$past"
+    find_lex $P1520, "@multitype"
+    $P1521 = $P1519."multitype"($P1520)
+.annotate 'line', 531
+    .return ($P1521)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1497"  :anon :subid("86_1280467483.70067") :outer("85_1280467483.70067")
-    .param pmc param_1499
-.annotate 'line', 532
-    .lex "$_", param_1499
-    find_lex $P1500, "@multitype"
-    find_lex $P1501, "$_"
-    set $S1502, $P1501
-    $P1503 = $P1500."push"($S1502)
-    .return ($P1503)
+.sub "_block1509"  :anon :subid("86_1283368216.90714") :outer("85_1283368216.90714")
+    .param pmc param_1511
+.annotate 'line', 533
+    .lex "$_", param_1511
+    find_lex $P1512, "@multitype"
+    find_lex $P1513, "$_"
+    set $S1514, $P1513
+    $P1515 = $P1512."push"($S1514)
+    .return ($P1515)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "param_var"  :subid("87_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1517
-.annotate 'line', 539
-    new $P1516, 'ExceptionHandler'
-    set_addr $P1516, control_1515
-    $P1516."handle_types"(.CONTROL_RETURN)
-    push_eh $P1516
-    .lex "self", self
-    .lex "$/", param_1517
+.sub "param_var"  :subid("87_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1529
 .annotate 'line', 540
-    new $P1518, "Undef"
-    .lex "$name", $P1518
+    new $P1528, 'ExceptionHandler'
+    set_addr $P1528, control_1527
+    $P1528."handle_types"(.CONTROL_RETURN)
+    push_eh $P1528
+    .lex "self", self
+    .lex "$/", param_1529
 .annotate 'line', 541
-    new $P1519, "Undef"
-    .lex "$past", $P1519
-.annotate 'line', 540
-    find_lex $P1520, "$/"
-    set $S1521, $P1520
-    new $P1522, 'String'
-    set $P1522, $S1521
-    store_lex "$name", $P1522
+    new $P1530, "Undef"
+    .lex "$name", $P1530
+.annotate 'line', 542
+    new $P1531, "Undef"
+    .lex "$past", $P1531
 .annotate 'line', 541
-    get_hll_global $P1523, ["PAST"], "Var"
-    find_lex $P1524, "$name"
-    find_lex $P1525, "$/"
-    $P1526 = $P1523."new"($P1524 :named("name"), "parameter" :named("scope"), 1 :named("isdecl"), $P1525 :named("node"))
-    store_lex "$past", $P1526
-.annotate 'line', 543
-    get_global $P1527, "@BLOCK"
-    unless_null $P1527, vivify_497
-    $P1527 = root_new ['parrot';'ResizablePMCArray']
+    find_lex $P1532, "$/"
+    set $S1533, $P1532
+    new $P1534, 'String'
+    set $P1534, $S1533
+    store_lex "$name", $P1534
+.annotate 'line', 542
+    get_hll_global $P1535, ["PAST"], "Var"
+    find_lex $P1536, "$name"
+    find_lex $P1537, "$/"
+    $P1538 = $P1535."new"($P1536 :named("name"), "parameter" :named("scope"), 1 :named("isdecl"), $P1537 :named("node"))
+    store_lex "$past", $P1538
+.annotate 'line', 544
+    get_global $P1539, "@BLOCK"
+    unless_null $P1539, vivify_497
+    $P1539 = root_new ['parrot';'ResizablePMCArray']
   vivify_497:
-    set $P1528, $P1527[0]
-    unless_null $P1528, vivify_498
-    new $P1528, "Undef"
+    set $P1540, $P1539[0]
+    unless_null $P1540, vivify_498
+    new $P1540, "Undef"
   vivify_498:
-    find_lex $P1529, "$name"
-    $P1528."symbol"($P1529, "lexical" :named("scope"))
-.annotate 'line', 544
-    find_lex $P1530, "$/"
-    find_lex $P1531, "$past"
-    $P1532 = $P1530."!make"($P1531)
-.annotate 'line', 539
-    .return ($P1532)
-  control_1515:
+    find_lex $P1541, "$name"
+    $P1540."symbol"($P1541, "lexical" :named("scope"))
+.annotate 'line', 545
+    find_lex $P1542, "$/"
+    find_lex $P1543, "$past"
+    $P1544 = $P1542."!make"($P1543)
+.annotate 'line', 540
+    .return ($P1544)
+  control_1527:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1533, exception, "payload"
-    .return ($P1533)
+    getattribute $P1545, exception, "payload"
+    .return ($P1545)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "named_param"  :subid("88_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1537
-.annotate 'line', 547
-    new $P1536, 'ExceptionHandler'
-    set_addr $P1536, control_1535
-    $P1536."handle_types"(.CONTROL_RETURN)
-    push_eh $P1536
-    .lex "self", self
-    .lex "$/", param_1537
+.sub "named_param"  :subid("88_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1549
 .annotate 'line', 548
-    new $P1538, "Undef"
-    .lex "$past", $P1538
-    find_lex $P1539, "$/"
-    unless_null $P1539, vivify_499
-    $P1539 = root_new ['parrot';'Hash']
+    new $P1548, 'ExceptionHandler'
+    set_addr $P1548, control_1547
+    $P1548."handle_types"(.CONTROL_RETURN)
+    push_eh $P1548
+    .lex "self", self
+    .lex "$/", param_1549
+.annotate 'line', 549
+    new $P1550, "Undef"
+    .lex "$past", $P1550
+    find_lex $P1551, "$/"
+    unless_null $P1551, vivify_499
+    $P1551 = root_new ['parrot';'Hash']
   vivify_499:
-    set $P1540, $P1539["param_var"]
-    unless_null $P1540, vivify_500
-    new $P1540, "Undef"
+    set $P1552, $P1551["param_var"]
+    unless_null $P1552, vivify_500
+    new $P1552, "Undef"
   vivify_500:
-    $P1541 = $P1540."ast"()
-    store_lex "$past", $P1541
-.annotate 'line', 549
-    find_lex $P1542, "$past"
-    find_lex $P1543, "$/"
-    unless_null $P1543, vivify_501
-    $P1543 = root_new ['parrot';'Hash']
+    $P1553 = $P1552."ast"()
+    store_lex "$past", $P1553
+.annotate 'line', 550
+    find_lex $P1554, "$past"
+    find_lex $P1555, "$/"
+    unless_null $P1555, vivify_501
+    $P1555 = root_new ['parrot';'Hash']
   vivify_501:
-    set $P1544, $P1543["param_var"]
-    unless_null $P1544, vivify_502
-    $P1544 = root_new ['parrot';'Hash']
+    set $P1556, $P1555["param_var"]
+    unless_null $P1556, vivify_502
+    $P1556 = root_new ['parrot';'Hash']
   vivify_502:
-    set $P1545, $P1544["name"]
-    unless_null $P1545, vivify_503
-    new $P1545, "Undef"
+    set $P1557, $P1556["name"]
+    unless_null $P1557, vivify_503
+    new $P1557, "Undef"
   vivify_503:
-    set $S1546, $P1545
-    $P1542."named"($S1546)
-.annotate 'line', 550
-    find_lex $P1547, "$/"
-    find_lex $P1548, "$past"
-    $P1549 = $P1547."!make"($P1548)
-.annotate 'line', 547
-    .return ($P1549)
-  control_1535:
+    set $S1558, $P1557
+    $P1554."named"($S1558)
+.annotate 'line', 551
+    find_lex $P1559, "$/"
+    find_lex $P1560, "$past"
+    $P1561 = $P1559."!make"($P1560)
+.annotate 'line', 548
+    .return ($P1561)
+  control_1547:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1550, exception, "payload"
-    .return ($P1550)
+    getattribute $P1562, exception, "payload"
+    .return ($P1562)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "regex_declarator"  :subid("89_1280467483.70067") :method :outer("11_1280467483.70067")
-    .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" 
-    capture_lex $P1625
-    .const 'Sub' $P1597 = "90_1280467483.70067" 
-    capture_lex $P1597
-    new $P1553, 'ExceptionHandler'
-    set_addr $P1553, control_1552
-    $P1553."handle_types"(.CONTROL_RETURN)
-    push_eh $P1553
-    .lex "self", self
-    .lex "$/", param_1554
-    if has_param_1555, optparam_504
-    new $P1556, "Undef"
-    set param_1555, $P1556
-  optparam_504:
-    .lex "$key", param_1555
+.sub "regex_declarator"  :subid("89_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1566
+    .param pmc param_1567 :optional
+    .param int has_param_1567 :opt_flag
 .annotate 'line', 554
-    $P1557 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@MODIFIERS", $P1557
-.annotate 'line', 557
-    new $P1558, "Undef"
-    .lex "$name", $P1558
+    .const 'Sub' $P1637 = "91_1283368216.90714" 
+    capture_lex $P1637
+    .const 'Sub' $P1609 = "90_1283368216.90714" 
+    capture_lex $P1609
+    new $P1565, 'ExceptionHandler'
+    set_addr $P1565, control_1564
+    $P1565."handle_types"(.CONTROL_RETURN)
+    push_eh $P1565
+    .lex "self", self
+    .lex "$/", param_1566
+    if has_param_1567, optparam_504
+    new $P1568, "Undef"
+    set param_1567, $P1568
+  optparam_504:
+    .lex "$key", param_1567
+.annotate 'line', 555
+    $P1569 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@MODIFIERS", $P1569
 .annotate 'line', 558
-    new $P1559, "Undef"
-    .lex "$past", $P1559
-.annotate 'line', 554
+    new $P1570, "Undef"
+    .lex "$name", $P1570
+.annotate 'line', 559
+    new $P1571, "Undef"
+    .lex "$past", $P1571
+.annotate 'line', 555
 
-        $P1560 = get_hll_global ['Regex';'P6Regex';'Actions'], '@MODIFIERS'
+        $P1572 = get_hll_global ['Regex';'P6Regex';'Actions'], '@MODIFIERS'
     
-    store_lex "@MODIFIERS", $P1560
-.annotate 'line', 557
-    find_lex $P1561, "$/"
-    unless_null $P1561, vivify_505
-    $P1561 = root_new ['parrot';'Hash']
+    store_lex "@MODIFIERS", $P1572
+.annotate 'line', 558
+    find_lex $P1573, "$/"
+    unless_null $P1573, vivify_505
+    $P1573 = root_new ['parrot';'Hash']
   vivify_505:
-    set $P1562, $P1561["deflongname"]
-    unless_null $P1562, vivify_506
-    new $P1562, "Undef"
+    set $P1574, $P1573["deflongname"]
+    unless_null $P1574, vivify_506
+    new $P1574, "Undef"
   vivify_506:
-    $P1563 = $P1562."ast"()
-    set $S1564, $P1563
-    new $P1565, 'String'
-    set $P1565, $S1564
-    store_lex "$name", $P1565
-    find_lex $P1566, "$past"
-.annotate 'line', 559
-    find_lex $P1568, "$/"
-    unless_null $P1568, vivify_507
-    $P1568 = root_new ['parrot';'Hash']
+    $P1575 = $P1574."ast"()
+    set $S1576, $P1575
+    new $P1577, 'String'
+    set $P1577, $S1576
+    store_lex "$name", $P1577
+    find_lex $P1578, "$past"
+.annotate 'line', 560
+    find_lex $P1580, "$/"
+    unless_null $P1580, vivify_507
+    $P1580 = root_new ['parrot';'Hash']
   vivify_507:
-    set $P1569, $P1568["proto"]
-    unless_null $P1569, vivify_508
-    new $P1569, "Undef"
+    set $P1581, $P1580["proto"]
+    unless_null $P1581, vivify_508
+    new $P1581, "Undef"
   vivify_508:
-    if $P1569, if_1567
-.annotate 'line', 586
-    find_lex $P1593, "$key"
-    set $S1594, $P1593
-    iseq $I1595, $S1594, "open"
-    if $I1595, if_1592
-.annotate 'line', 599
-    .const 'Sub' $P1625 = "91_1280467483.70067" 
-    capture_lex $P1625
-    $P1625()
-    goto if_1592_end
-  if_1592:
-.annotate 'line', 586
-    .const 'Sub' $P1597 = "90_1280467483.70067" 
-    capture_lex $P1597
-    $P1597()
-  if_1592_end:
-    goto if_1567_end
-  if_1567:
-.annotate 'line', 561
-    get_hll_global $P1570, ["PAST"], "Stmts"
+    if $P1581, if_1579
+.annotate 'line', 587
+    find_lex $P1605, "$key"
+    set $S1606, $P1605
+    iseq $I1607, $S1606, "open"
+    if $I1607, if_1604
+.annotate 'line', 600
+    .const 'Sub' $P1637 = "91_1283368216.90714" 
+    capture_lex $P1637
+    $P1637()
+    goto if_1604_end
+  if_1604:
+.annotate 'line', 587
+    .const 'Sub' $P1609 = "90_1283368216.90714" 
+    capture_lex $P1609
+    $P1609()
+  if_1604_end:
+    goto if_1579_end
+  if_1579:
 .annotate 'line', 562
-    get_hll_global $P1571, ["PAST"], "Block"
-    find_lex $P1572, "$name"
+    get_hll_global $P1582, ["PAST"], "Stmts"
 .annotate 'line', 563
-    get_hll_global $P1573, ["PAST"], "Op"
+    get_hll_global $P1583, ["PAST"], "Block"
+    find_lex $P1584, "$name"
 .annotate 'line', 564
-    get_hll_global $P1574, ["PAST"], "Var"
-    $P1575 = $P1574."new"("self" :named("name"), "register" :named("scope"))
-    find_lex $P1576, "$name"
-    $P1577 = $P1573."new"($P1575, $P1576, "!protoregex" :named("name"), "callmethod" :named("pasttype"))
-.annotate 'line', 563
-    find_lex $P1578, "$/"
-    $P1579 = $P1571."new"($P1577, $P1572 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1578 :named("node"))
-.annotate 'line', 573
-    get_hll_global $P1580, ["PAST"], "Block"
-    new $P1581, "String"
-    assign $P1581, "!PREFIX__"
-    find_lex $P1582, "$name"
-    concat $P1583, $P1581, $P1582
+    get_hll_global $P1585, ["PAST"], "Op"
+.annotate 'line', 565
+    get_hll_global $P1586, ["PAST"], "Var"
+    $P1587 = $P1586."new"("self" :named("name"), "register" :named("scope"))
+    find_lex $P1588, "$name"
+    $P1589 = $P1585."new"($P1587, $P1588, "!protoregex" :named("name"), "callmethod" :named("pasttype"))
+.annotate 'line', 564
+    find_lex $P1590, "$/"
+    $P1591 = $P1583."new"($P1589, $P1584 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1590 :named("node"))
 .annotate 'line', 574
-    get_hll_global $P1584, ["PAST"], "Op"
+    get_hll_global $P1592, ["PAST"], "Block"
+    new $P1593, "String"
+    assign $P1593, "!PREFIX__"
+    find_lex $P1594, "$name"
+    concat $P1595, $P1593, $P1594
+.annotate 'line', 575
+    get_hll_global $P1596, ["PAST"], "Op"
+.annotate 'line', 576
+    get_hll_global $P1597, ["PAST"], "Var"
+    $P1598 = $P1597."new"("self" :named("name"), "register" :named("scope"))
+    find_lex $P1599, "$name"
+    $P1600 = $P1596."new"($P1598, $P1599, "!PREFIX__!protoregex" :named("name"), "callmethod" :named("pasttype"))
 .annotate 'line', 575
-    get_hll_global $P1585, ["PAST"], "Var"
-    $P1586 = $P1585."new"("self" :named("name"), "register" :named("scope"))
-    find_lex $P1587, "$name"
-    $P1588 = $P1584."new"($P1586, $P1587, "!PREFIX__!protoregex" :named("name"), "callmethod" :named("pasttype"))
+    find_lex $P1601, "$/"
+    $P1602 = $P1592."new"($P1600, $P1595 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1601 :named("node"))
 .annotate 'line', 574
-    find_lex $P1589, "$/"
-    $P1590 = $P1580."new"($P1588, $P1583 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1589 :named("node"))
-.annotate 'line', 573
-    $P1591 = $P1570."new"($P1579, $P1590)
-.annotate 'line', 561
-    store_lex "$past", $P1591
-  if_1567_end:
-.annotate 'line', 613
-    find_lex $P1646, "$/"
-    find_lex $P1647, "$past"
-    $P1648 = $P1646."!make"($P1647)
-.annotate 'line', 553
-    .return ($P1648)
-  control_1552:
+    $P1603 = $P1582."new"($P1591, $P1602)
+.annotate 'line', 562
+    store_lex "$past", $P1603
+  if_1579_end:
+.annotate 'line', 614
+    find_lex $P1658, "$/"
+    find_lex $P1659, "$past"
+    $P1660 = $P1658."!make"($P1659)
+.annotate 'line', 554
+    .return ($P1660)
+  control_1564:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1649, exception, "payload"
-    .return ($P1649)
+    getattribute $P1661, exception, "payload"
+    .return ($P1661)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1624"  :anon :subid("91_1280467483.70067") :outer("89_1280467483.70067")
-.annotate 'line', 600
-    new $P1626, "Undef"
-    .lex "$regex", $P1626
+.sub "_block1636"  :anon :subid("91_1283368216.90714") :outer("89_1283368216.90714")
 .annotate 'line', 601
-    get_hll_global $P1627, ["Regex";"P6Regex";"Actions"], "buildsub"
-    find_lex $P1628, "$/"
-    unless_null $P1628, vivify_509
-    $P1628 = root_new ['parrot';'Hash']
+    new $P1638, "Undef"
+    .lex "$regex", $P1638
+.annotate 'line', 602
+    get_hll_global $P1639, ["Regex";"P6Regex";"Actions"], "buildsub"
+    find_lex $P1640, "$/"
+    unless_null $P1640, vivify_509
+    $P1640 = root_new ['parrot';'Hash']
   vivify_509:
-    set $P1629, $P1628["p6regex"]
-    unless_null $P1629, vivify_510
-    new $P1629, "Undef"
+    set $P1641, $P1640["p6regex"]
+    unless_null $P1641, vivify_510
+    new $P1641, "Undef"
   vivify_510:
-    $P1630 = $P1629."ast"()
-    get_global $P1631, "@BLOCK"
-    $P1632 = $P1631."shift"()
-    $P1633 = $P1627($P1630, $P1632)
-    store_lex "$regex", $P1633
-.annotate 'line', 602
-    find_lex $P1634, "$regex"
-    find_lex $P1635, "$name"
-    $P1634."name"($P1635)
-.annotate 'line', 604
-    get_hll_global $P1636, ["PAST"], "Op"
-.annotate 'line', 606
-    get_hll_global $P1637, ["PAST"], "Var"
-    new $P1638, "ResizablePMCArray"
-    push $P1638, "Regex"
-    $P1639 = $P1637."new"("Method" :named("name"), $P1638 :named("namespace"), "package" :named("scope"))
-    find_lex $P1640, "$regex"
-    $P1641 = $P1636."new"($P1639, $P1640, "callmethod" :named("pasttype"), "new" :named("name"))
-.annotate 'line', 604
-    store_lex "$past", $P1641
-.annotate 'line', 610
-    find_lex $P1642, "$regex"
-    find_lex $P1643, "$past"
-    unless_null $P1643, vivify_511
-    $P1643 = root_new ['parrot';'Hash']
-    store_lex "$past", $P1643
-  vivify_511:
-    set $P1643["sink"], $P1642
+    $P1642 = $P1641."ast"()
+    get_global $P1643, "@BLOCK"
+    $P1644 = $P1643."shift"()
+    $P1645 = $P1639($P1642, $P1644)
+    store_lex "$regex", $P1645
+.annotate 'line', 603
+    find_lex $P1646, "$regex"
+    find_lex $P1647, "$name"
+    $P1646."name"($P1647)
+.annotate 'line', 605
+    get_hll_global $P1648, ["PAST"], "Op"
+.annotate 'line', 607
+    get_hll_global $P1649, ["PAST"], "Var"
+    new $P1650, "ResizablePMCArray"
+    push $P1650, "Regex"
+    $P1651 = $P1649."new"("Method" :named("name"), $P1650 :named("namespace"), "package" :named("scope"))
+    find_lex $P1652, "$regex"
+    $P1653 = $P1648."new"($P1651, $P1652, "callmethod" :named("pasttype"), "new" :named("name"))
+.annotate 'line', 605
+    store_lex "$past", $P1653
 .annotate 'line', 611
-    find_lex $P1644, "@MODIFIERS"
-    $P1645 = $P1644."shift"()
-.annotate 'line', 599
-    .return ($P1645)
+    find_lex $P1654, "$regex"
+    find_lex $P1655, "$past"
+    unless_null $P1655, vivify_511
+    $P1655 = root_new ['parrot';'Hash']
+    store_lex "$past", $P1655
+  vivify_511:
+    set $P1655["sink"], $P1654
+.annotate 'line', 612
+    find_lex $P1656, "@MODIFIERS"
+    $P1657 = $P1656."shift"()
+.annotate 'line', 600
+    .return ($P1657)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1596"  :anon :subid("90_1280467483.70067") :outer("89_1280467483.70067")
-.annotate 'line', 587
-    $P1598 = root_new ['parrot';'Hash']
-    .lex "%h", $P1598
-.annotate 'line', 586
-    find_lex $P1599, "%h"
+.sub "_block1608"  :anon :subid("90_1283368216.90714") :outer("89_1283368216.90714")
 .annotate 'line', 588
-    find_lex $P1601, "$/"
-    unless_null $P1601, vivify_512
-    $P1601 = root_new ['parrot';'Hash']
+    $P1610 = root_new ['parrot';'Hash']
+    .lex "%h", $P1610
+.annotate 'line', 587
+    find_lex $P1611, "%h"
+.annotate 'line', 589
+    find_lex $P1613, "$/"
+    unless_null $P1613, vivify_512
+    $P1613 = root_new ['parrot';'Hash']
   vivify_512:
-    set $P1602, $P1601["sym"]
-    unless_null $P1602, vivify_513
-    new $P1602, "Undef"
+    set $P1614, $P1613["sym"]
+    unless_null $P1614, vivify_513
+    new $P1614, "Undef"
   vivify_513:
-    set $S1603, $P1602
-    iseq $I1604, $S1603, "token"
-    unless $I1604, if_1600_end
-    new $P1605, "Integer"
-    assign $P1605, 1
-    find_lex $P1606, "%h"
-    unless_null $P1606, vivify_514
-    $P1606 = root_new ['parrot';'Hash']
-    store_lex "%h", $P1606
+    set $S1615, $P1614
+    iseq $I1616, $S1615, "token"
+    unless $I1616, if_1612_end
+    new $P1617, "Integer"
+    assign $P1617, 1
+    find_lex $P1618, "%h"
+    unless_null $P1618, vivify_514
+    $P1618 = root_new ['parrot';'Hash']
+    store_lex "%h", $P1618
   vivify_514:
-    set $P1606["r"], $P1605
-  if_1600_end:
-.annotate 'line', 589
-    find_lex $P1608, "$/"
-    unless_null $P1608, vivify_515
-    $P1608 = root_new ['parrot';'Hash']
+    set $P1618["r"], $P1617
+  if_1612_end:
+.annotate 'line', 590
+    find_lex $P1620, "$/"
+    unless_null $P1620, vivify_515
+    $P1620 = root_new ['parrot';'Hash']
   vivify_515:
-    set $P1609, $P1608["sym"]
-    unless_null $P1609, vivify_516
-    new $P1609, "Undef"
+    set $P1621, $P1620["sym"]
+    unless_null $P1621, vivify_516
+    new $P1621, "Undef"
   vivify_516:
-    set $S1610, $P1609
-    iseq $I1611, $S1610, "rule"
-    unless $I1611, if_1607_end
-    new $P1612, "Integer"
-    assign $P1612, 1
-    find_lex $P1613, "%h"
-    unless_null $P1613, vivify_517
-    $P1613 = root_new ['parrot';'Hash']
-    store_lex "%h", $P1613
+    set $S1622, $P1621
+    iseq $I1623, $S1622, "rule"
+    unless $I1623, if_1619_end
+    new $P1624, "Integer"
+    assign $P1624, 1
+    find_lex $P1625, "%h"
+    unless_null $P1625, vivify_517
+    $P1625 = root_new ['parrot';'Hash']
+    store_lex "%h", $P1625
   vivify_517:
-    set $P1613["r"], $P1612
-    new $P1614, "Integer"
-    assign $P1614, 1
-    find_lex $P1615, "%h"
-    unless_null $P1615, vivify_518
-    $P1615 = root_new ['parrot';'Hash']
-    store_lex "%h", $P1615
+    set $P1625["r"], $P1624
+    new $P1626, "Integer"
+    assign $P1626, 1
+    find_lex $P1627, "%h"
+    unless_null $P1627, vivify_518
+    $P1627 = root_new ['parrot';'Hash']
+    store_lex "%h", $P1627
   vivify_518:
-    set $P1615["s"], $P1614
-  if_1607_end:
-.annotate 'line', 590
-    find_lex $P1616, "@MODIFIERS"
-    find_lex $P1617, "%h"
-    $P1616."unshift"($P1617)
+    set $P1627["s"], $P1626
+  if_1619_end:
 .annotate 'line', 591
+    find_lex $P1628, "@MODIFIERS"
+    find_lex $P1629, "%h"
+    $P1628."unshift"($P1629)
+.annotate 'line', 592
 
             $P0 = find_lex '$name'
             set_hll_global ['Regex';'P6Regex';'Actions'], '$REGEXNAME', $P0
         
-.annotate 'line', 595
-    get_global $P1618, "@BLOCK"
-    unless_null $P1618, vivify_519
-    $P1618 = root_new ['parrot';'ResizablePMCArray']
+.annotate 'line', 596
+    get_global $P1630, "@BLOCK"
+    unless_null $P1630, vivify_519
+    $P1630 = root_new ['parrot';'ResizablePMCArray']
   vivify_519:
-    set $P1619, $P1618[0]
-    unless_null $P1619, vivify_520
-    new $P1619, "Undef"
+    set $P1631, $P1630[0]
+    unless_null $P1631, vivify_520
+    new $P1631, "Undef"
   vivify_520:
-    $P1619."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
-.annotate 'line', 596
-    get_global $P1620, "@BLOCK"
-    unless_null $P1620, vivify_521
-    $P1620 = root_new ['parrot';'ResizablePMCArray']
+    $P1631."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
+.annotate 'line', 597
+    get_global $P1632, "@BLOCK"
+    unless_null $P1632, vivify_521
+    $P1632 = root_new ['parrot';'ResizablePMCArray']
   vivify_521:
-    set $P1621, $P1620[0]
-    unless_null $P1621, vivify_522
-    new $P1621, "Undef"
+    set $P1633, $P1632[0]
+    unless_null $P1633, vivify_522
+    new $P1633, "Undef"
   vivify_522:
-    $P1621."symbol"("$/", "lexical" :named("scope"))
-.annotate 'line', 597
-    new $P1622, "Exception"
-    set $P1622['type'], .CONTROL_RETURN
-    new $P1623, "Integer"
-    assign $P1623, 0
-    setattribute $P1622, 'payload', $P1623
-    throw $P1622
-.annotate 'line', 586
+    $P1633."symbol"("$/", "lexical" :named("scope"))
+.annotate 'line', 598
+    new $P1634, "Exception"
+    set $P1634['type'], .CONTROL_RETURN
+    new $P1635, "Integer"
+    assign $P1635, 0
+    setattribute $P1634, 'payload', $P1635
+    throw $P1634
+.annotate 'line', 587
     .return ()
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "dotty"  :subid("92_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1653
-.annotate 'line', 617
-    new $P1652, 'ExceptionHandler'
-    set_addr $P1652, control_1651
-    $P1652."handle_types"(.CONTROL_RETURN)
-    push_eh $P1652
-    .lex "self", self
-    .lex "$/", param_1653
+.sub "dotty"  :subid("92_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1665
 .annotate 'line', 618
-    new $P1654, "Undef"
-    .lex "$past", $P1654
-    find_lex $P1657, "$/"
-    unless_null $P1657, vivify_523
-    $P1657 = root_new ['parrot';'Hash']
-  vivify_523:
-    set $P1658, $P1657["args"]
-    unless_null $P1658, vivify_524
-    new $P1658, "Undef"
-  vivify_524:
-    if $P1658, if_1656
-    get_hll_global $P1663, ["PAST"], "Op"
-    find_lex $P1664, "$/"
-    $P1665 = $P1663."new"($P1664 :named("node"))
-    set $P1655, $P1665
-    goto if_1656_end
-  if_1656:
-    find_lex $P1659, "$/"
-    unless_null $P1659, vivify_525
-    $P1659 = root_new ['parrot';'Hash']
-  vivify_525:
-    set $P1660, $P1659["args"]
-    unless_null $P1660, vivify_526
-    $P1660 = root_new ['parrot';'ResizablePMCArray']
-  vivify_526:
-    set $P1661, $P1660[0]
-    unless_null $P1661, vivify_527
-    new $P1661, "Undef"
-  vivify_527:
-    $P1662 = $P1661."ast"()
-    set $P1655, $P1662
-  if_1656_end:
-    store_lex "$past", $P1655
+    new $P1664, 'ExceptionHandler'
+    set_addr $P1664, control_1663
+    $P1664."handle_types"(.CONTROL_RETURN)
+    push_eh $P1664
+    .lex "self", self
+    .lex "$/", param_1665
 .annotate 'line', 619
-    find_lex $P1666, "$past"
+    new $P1666, "Undef"
+    .lex "$past", $P1666
     find_lex $P1669, "$/"
-    unless_null $P1669, vivify_528
+    unless_null $P1669, vivify_523
     $P1669 = root_new ['parrot';'Hash']
-  vivify_528:
-    set $P1670, $P1669["quote"]
-    unless_null $P1670, vivify_529
+  vivify_523:
+    set $P1670, $P1669["args"]
+    unless_null $P1670, vivify_524
     new $P1670, "Undef"
-  vivify_529:
+  vivify_524:
     if $P1670, if_1668
-    find_lex $P1674, "$/"
-    unless_null $P1674, vivify_530
-    $P1674 = root_new ['parrot';'Hash']
-  vivify_530:
-    set $P1675, $P1674["longname"]
-    unless_null $P1675, vivify_531
-    new $P1675, "Undef"
-  vivify_531:
-    set $S1676, $P1675
-    new $P1667, 'String'
-    set $P1667, $S1676
+    get_hll_global $P1675, ["PAST"], "Op"
+    find_lex $P1676, "$/"
+    $P1677 = $P1675."new"($P1676 :named("node"))
+    set $P1667, $P1677
     goto if_1668_end
   if_1668:
     find_lex $P1671, "$/"
-    unless_null $P1671, vivify_532
+    unless_null $P1671, vivify_525
     $P1671 = root_new ['parrot';'Hash']
-  vivify_532:
-    set $P1672, $P1671["quote"]
-    unless_null $P1672, vivify_533
-    new $P1672, "Undef"
-  vivify_533:
-    $P1673 = $P1672."ast"()
-    set $P1667, $P1673
-  if_1668_end:
-    $P1666."name"($P1667)
+  vivify_525:
+    set $P1672, $P1671["args"]
+    unless_null $P1672, vivify_526
+    $P1672 = root_new ['parrot';'ResizablePMCArray']
+  vivify_526:
+    set $P1673, $P1672[0]
+    unless_null $P1673, vivify_527
+    new $P1673, "Undef"
+  vivify_527:
+    $P1674 = $P1673."ast"()
+    set $P1667, $P1674
+  if_1668_end:
+    store_lex "$past", $P1667
 .annotate 'line', 620
-    find_lex $P1677, "$past"
-    $P1677."pasttype"("callmethod")
+    find_lex $P1678, "$past"
+    find_lex $P1681, "$/"
+    unless_null $P1681, vivify_528
+    $P1681 = root_new ['parrot';'Hash']
+  vivify_528:
+    set $P1682, $P1681["quote"]
+    unless_null $P1682, vivify_529
+    new $P1682, "Undef"
+  vivify_529:
+    if $P1682, if_1680
+    find_lex $P1686, "$/"
+    unless_null $P1686, vivify_530
+    $P1686 = root_new ['parrot';'Hash']
+  vivify_530:
+    set $P1687, $P1686["longname"]
+    unless_null $P1687, vivify_531
+    new $P1687, "Undef"
+  vivify_531:
+    set $S1688, $P1687
+    new $P1679, 'String'
+    set $P1679, $S1688
+    goto if_1680_end
+  if_1680:
+    find_lex $P1683, "$/"
+    unless_null $P1683, vivify_532
+    $P1683 = root_new ['parrot';'Hash']
+  vivify_532:
+    set $P1684, $P1683["quote"]
+    unless_null $P1684, vivify_533
+    new $P1684, "Undef"
+  vivify_533:
+    $P1685 = $P1684."ast"()
+    set $P1679, $P1685
+  if_1680_end:
+    $P1678."name"($P1679)
 .annotate 'line', 621
-    find_lex $P1678, "$/"
-    find_lex $P1679, "$past"
-    $P1680 = $P1678."!make"($P1679)
-.annotate 'line', 617
-    .return ($P1680)
-  control_1651:
+    find_lex $P1689, "$past"
+    $P1689."pasttype"("callmethod")
+.annotate 'line', 622
+    find_lex $P1690, "$/"
+    find_lex $P1691, "$past"
+    $P1692 = $P1690."!make"($P1691)
+.annotate 'line', 618
+    .return ($P1692)
+  control_1663:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1681, exception, "payload"
-    .return ($P1681)
+    getattribute $P1693, exception, "payload"
+    .return ($P1693)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<self>"  :subid("93_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1685
-.annotate 'line', 626
-    new $P1684, 'ExceptionHandler'
-    set_addr $P1684, control_1683
-    $P1684."handle_types"(.CONTROL_RETURN)
-    push_eh $P1684
-    .lex "self", self
-    .lex "$/", param_1685
+.sub "term:sym<self>"  :subid("93_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1697
 .annotate 'line', 627
-    find_lex $P1686, "$/"
-    get_hll_global $P1687, ["PAST"], "Var"
-    $P1688 = $P1687."new"("self" :named("name"))
-    $P1689 = $P1686."!make"($P1688)
-.annotate 'line', 626
-    .return ($P1689)
-  control_1683:
+    new $P1696, 'ExceptionHandler'
+    set_addr $P1696, control_1695
+    $P1696."handle_types"(.CONTROL_RETURN)
+    push_eh $P1696
+    .lex "self", self
+    .lex "$/", param_1697
+.annotate 'line', 628
+    find_lex $P1698, "$/"
+    get_hll_global $P1699, ["PAST"], "Var"
+    $P1700 = $P1699."new"("self" :named("name"))
+    $P1701 = $P1698."!make"($P1700)
+.annotate 'line', 627
+    .return ($P1701)
+  control_1695:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1690, exception, "payload"
-    .return ($P1690)
+    getattribute $P1702, exception, "payload"
+    .return ($P1702)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<identifier>"  :subid("94_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1694
-.annotate 'line', 630
-    new $P1693, 'ExceptionHandler'
-    set_addr $P1693, control_1692
-    $P1693."handle_types"(.CONTROL_RETURN)
-    push_eh $P1693
-    .lex "self", self
-    .lex "$/", param_1694
+.sub "term:sym<identifier>"  :subid("94_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1706
 .annotate 'line', 631
-    new $P1695, "Undef"
-    .lex "$past", $P1695
-    find_lex $P1696, "$/"
-    unless_null $P1696, vivify_534
-    $P1696 = root_new ['parrot';'Hash']
+    new $P1705, 'ExceptionHandler'
+    set_addr $P1705, control_1704
+    $P1705."handle_types"(.CONTROL_RETURN)
+    push_eh $P1705
+    .lex "self", self
+    .lex "$/", param_1706
+.annotate 'line', 632
+    new $P1707, "Undef"
+    .lex "$past", $P1707
+    find_lex $P1708, "$/"
+    unless_null $P1708, vivify_534
+    $P1708 = root_new ['parrot';'Hash']
   vivify_534:
-    set $P1697, $P1696["args"]
-    unless_null $P1697, vivify_535
-    new $P1697, "Undef"
+    set $P1709, $P1708["args"]
+    unless_null $P1709, vivify_535
+    new $P1709, "Undef"
   vivify_535:
-    $P1698 = $P1697."ast"()
-    store_lex "$past", $P1698
-.annotate 'line', 632
-    find_lex $P1699, "$past"
-    find_lex $P1700, "$/"
-    unless_null $P1700, vivify_536
-    $P1700 = root_new ['parrot';'Hash']
+    $P1710 = $P1709."ast"()
+    store_lex "$past", $P1710
+.annotate 'line', 633
+    find_lex $P1711, "$past"
+    find_lex $P1712, "$/"
+    unless_null $P1712, vivify_536
+    $P1712 = root_new ['parrot';'Hash']
   vivify_536:
-    set $P1701, $P1700["deflongname"]
-    unless_null $P1701, vivify_537
-    new $P1701, "Undef"
+    set $P1713, $P1712["deflongname"]
+    unless_null $P1713, vivify_537
+    new $P1713, "Undef"
   vivify_537:
-    set $S1702, $P1701
-    $P1699."name"($S1702)
-.annotate 'line', 633
-    find_lex $P1703, "$/"
-    find_lex $P1704, "$past"
-    $P1705 = $P1703."!make"($P1704)
-.annotate 'line', 630
-    .return ($P1705)
-  control_1692:
+    set $S1714, $P1713
+    $P1711."name"($S1714)
+.annotate 'line', 634
+    find_lex $P1715, "$/"
+    find_lex $P1716, "$past"
+    $P1717 = $P1715."!make"($P1716)
+.annotate 'line', 631
+    .return ($P1717)
+  control_1704:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1706, exception, "payload"
-    .return ($P1706)
+    getattribute $P1718, exception, "payload"
+    .return ($P1718)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<name>"  :subid("95_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1710
-.annotate 'line', 636
-    new $P1709, 'ExceptionHandler'
-    set_addr $P1709, control_1708
-    $P1709."handle_types"(.CONTROL_RETURN)
-    push_eh $P1709
-    .lex "self", self
-    .lex "$/", param_1710
+.sub "term:sym<name>"  :subid("95_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1722
 .annotate 'line', 637
-    $P1711 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@ns", $P1711
+    new $P1721, 'ExceptionHandler'
+    set_addr $P1721, control_1720
+    $P1721."handle_types"(.CONTROL_RETURN)
+    push_eh $P1721
+    .lex "self", self
+    .lex "$/", param_1722
 .annotate 'line', 638
-    new $P1712, "Undef"
-    .lex "$name", $P1712
-.annotate 'line', 640
-    new $P1713, "Undef"
-    .lex "$var", $P1713
-.annotate 'line', 642
-    new $P1714, "Undef"
-    .lex "$past", $P1714
-.annotate 'line', 637
-    find_lex $P1715, "$/"
-    unless_null $P1715, vivify_538
-    $P1715 = root_new ['parrot';'Hash']
+    $P1723 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@ns", $P1723
+.annotate 'line', 639
+    new $P1724, "Undef"
+    .lex "$name", $P1724
+.annotate 'line', 641
+    new $P1725, "Undef"
+    .lex "$var", $P1725
+.annotate 'line', 643
+    new $P1726, "Undef"
+    .lex "$past", $P1726
+.annotate 'line', 638
+    find_lex $P1727, "$/"
+    unless_null $P1727, vivify_538
+    $P1727 = root_new ['parrot';'Hash']
   vivify_538:
-    set $P1716, $P1715["name"]
-    unless_null $P1716, vivify_539
-    $P1716 = root_new ['parrot';'Hash']
+    set $P1728, $P1727["name"]
+    unless_null $P1728, vivify_539
+    $P1728 = root_new ['parrot';'Hash']
   vivify_539:
-    set $P1717, $P1716["identifier"]
-    unless_null $P1717, vivify_540
-    new $P1717, "Undef"
+    set $P1729, $P1728["identifier"]
+    unless_null $P1729, vivify_540
+    new $P1729, "Undef"
   vivify_540:
-    clone $P1718, $P1717
-    store_lex "@ns", $P1718
-.annotate 'line', 638
-    find_lex $P1719, "@ns"
-    $P1720 = $P1719."pop"()
-    store_lex "$name", $P1720
+    clone $P1730, $P1729
+    store_lex "@ns", $P1730
 .annotate 'line', 639
-    find_lex $P1724, "@ns"
-    if $P1724, if_1723
-    set $P1722, $P1724
-    goto if_1723_end
-  if_1723:
-    find_lex $P1725, "@ns"
-    unless_null $P1725, vivify_541
-    $P1725 = root_new ['parrot';'ResizablePMCArray']
+    find_lex $P1731, "@ns"
+    $P1732 = $P1731."pop"()
+    store_lex "$name", $P1732
+.annotate 'line', 640
+    find_lex $P1736, "@ns"
+    if $P1736, if_1735
+    set $P1734, $P1736
+    goto if_1735_end
+  if_1735:
+    find_lex $P1737, "@ns"
+    unless_null $P1737, vivify_541
+    $P1737 = root_new ['parrot';'ResizablePMCArray']
   vivify_541:
-    set $P1726, $P1725[0]
-    unless_null $P1726, vivify_542
-    new $P1726, "Undef"
+    set $P1738, $P1737[0]
+    unless_null $P1738, vivify_542
+    new $P1738, "Undef"
   vivify_542:
-    set $S1727, $P1726
-    iseq $I1728, $S1727, "GLOBAL"
-    new $P1722, 'Integer'
-    set $P1722, $I1728
-  if_1723_end:
-    unless $P1722, if_1721_end
-    find_lex $P1729, "@ns"
-    $P1729."shift"()
-  if_1721_end:
-.annotate 'line', 641
-    get_hll_global $P1730, ["PAST"], "Var"
-    find_lex $P1731, "$name"
-    set $S1732, $P1731
-    find_lex $P1733, "@ns"
-    $P1734 = $P1730."new"($S1732 :named("name"), $P1733 :named("namespace"), "package" :named("scope"))
-    store_lex "$var", $P1734
+    set $S1739, $P1738
+    iseq $I1740, $S1739, "GLOBAL"
+    new $P1734, 'Integer'
+    set $P1734, $I1740
+  if_1735_end:
+    unless $P1734, if_1733_end
+    find_lex $P1741, "@ns"
+    $P1741."shift"()
+  if_1733_end:
 .annotate 'line', 642
-    find_lex $P1735, "$var"
-    store_lex "$past", $P1735
+    get_hll_global $P1742, ["PAST"], "Var"
+    find_lex $P1743, "$name"
+    set $S1744, $P1743
+    find_lex $P1745, "@ns"
+    $P1746 = $P1742."new"($S1744 :named("name"), $P1745 :named("namespace"), "package" :named("scope"))
+    store_lex "$var", $P1746
 .annotate 'line', 643
-    find_lex $P1737, "$/"
-    unless_null $P1737, vivify_543
-    $P1737 = root_new ['parrot';'Hash']
+    find_lex $P1747, "$var"
+    store_lex "$past", $P1747
+.annotate 'line', 644
+    find_lex $P1749, "$/"
+    unless_null $P1749, vivify_543
+    $P1749 = root_new ['parrot';'Hash']
   vivify_543:
-    set $P1738, $P1737["args"]
-    unless_null $P1738, vivify_544
-    new $P1738, "Undef"
+    set $P1750, $P1749["args"]
+    unless_null $P1750, vivify_544
+    new $P1750, "Undef"
   vivify_544:
-    unless $P1738, if_1736_end
-.annotate 'line', 644
-    find_lex $P1739, "$/"
-    unless_null $P1739, vivify_545
-    $P1739 = root_new ['parrot';'Hash']
+    unless $P1750, if_1748_end
+.annotate 'line', 645
+    find_lex $P1751, "$/"
+    unless_null $P1751, vivify_545
+    $P1751 = root_new ['parrot';'Hash']
   vivify_545:
-    set $P1740, $P1739["args"]
-    unless_null $P1740, vivify_546
-    $P1740 = root_new ['parrot';'ResizablePMCArray']
+    set $P1752, $P1751["args"]
+    unless_null $P1752, vivify_546
+    $P1752 = root_new ['parrot';'ResizablePMCArray']
   vivify_546:
-    set $P1741, $P1740[0]
-    unless_null $P1741, vivify_547
-    new $P1741, "Undef"
+    set $P1753, $P1752[0]
+    unless_null $P1753, vivify_547
+    new $P1753, "Undef"
   vivify_547:
-    $P1742 = $P1741."ast"()
-    store_lex "$past", $P1742
-.annotate 'line', 645
-    find_lex $P1743, "$past"
-    find_lex $P1744, "$var"
-    $P1743."unshift"($P1744)
-  if_1736_end:
-.annotate 'line', 647
-    find_lex $P1745, "$/"
-    find_lex $P1746, "$past"
-    $P1747 = $P1745."!make"($P1746)
-.annotate 'line', 636
-    .return ($P1747)
-  control_1708:
+    $P1754 = $P1753."ast"()
+    store_lex "$past", $P1754
+.annotate 'line', 646
+    find_lex $P1755, "$past"
+    find_lex $P1756, "$var"
+    $P1755."unshift"($P1756)
+  if_1748_end:
+.annotate 'line', 648
+    find_lex $P1757, "$/"
+    find_lex $P1758, "$past"
+    $P1759 = $P1757."!make"($P1758)
+.annotate 'line', 637
+    .return ($P1759)
+  control_1720:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1748, exception, "payload"
-    .return ($P1748)
+    getattribute $P1760, exception, "payload"
+    .return ($P1760)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<pir::op>"  :subid("96_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1752
-.annotate 'line', 650
-    new $P1751, 'ExceptionHandler'
-    set_addr $P1751, control_1750
-    $P1751."handle_types"(.CONTROL_RETURN)
-    push_eh $P1751
-    .lex "self", self
-    .lex "$/", param_1752
+.sub "term:sym<pir::op>"  :subid("96_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1764
 .annotate 'line', 651
-    new $P1753, "Undef"
-    .lex "$past", $P1753
+    new $P1763, 'ExceptionHandler'
+    set_addr $P1763, control_1762
+    $P1763."handle_types"(.CONTROL_RETURN)
+    push_eh $P1763
+    .lex "self", self
+    .lex "$/", param_1764
 .annotate 'line', 652
-    new $P1754, "Undef"
-    .lex "$pirop", $P1754
-.annotate 'line', 651
-    find_lex $P1757, "$/"
-    unless_null $P1757, vivify_548
-    $P1757 = root_new ['parrot';'Hash']
+    new $P1765, "Undef"
+    .lex "$past", $P1765
+.annotate 'line', 653
+    new $P1766, "Undef"
+    .lex "$pirop", $P1766
+.annotate 'line', 652
+    find_lex $P1769, "$/"
+    unless_null $P1769, vivify_548
+    $P1769 = root_new ['parrot';'Hash']
   vivify_548:
-    set $P1758, $P1757["args"]
-    unless_null $P1758, vivify_549
-    new $P1758, "Undef"
+    set $P1770, $P1769["args"]
+    unless_null $P1770, vivify_549
+    new $P1770, "Undef"
   vivify_549:
-    if $P1758, if_1756
-    get_hll_global $P1763, ["PAST"], "Op"
-    find_lex $P1764, "$/"
-    $P1765 = $P1763."new"($P1764 :named("node"))
-    set $P1755, $P1765
-    goto if_1756_end
-  if_1756:
-    find_lex $P1759, "$/"
-    unless_null $P1759, vivify_550
-    $P1759 = root_new ['parrot';'Hash']
+    if $P1770, if_1768
+    get_hll_global $P1775, ["PAST"], "Op"
+    find_lex $P1776, "$/"
+    $P1777 = $P1775."new"($P1776 :named("node"))
+    set $P1767, $P1777
+    goto if_1768_end
+  if_1768:
+    find_lex $P1771, "$/"
+    unless_null $P1771, vivify_550
+    $P1771 = root_new ['parrot';'Hash']
   vivify_550:
-    set $P1760, $P1759["args"]
-    unless_null $P1760, vivify_551
-    $P1760 = root_new ['parrot';'ResizablePMCArray']
+    set $P1772, $P1771["args"]
+    unless_null $P1772, vivify_551
+    $P1772 = root_new ['parrot';'ResizablePMCArray']
   vivify_551:
-    set $P1761, $P1760[0]
-    unless_null $P1761, vivify_552
-    new $P1761, "Undef"
+    set $P1773, $P1772[0]
+    unless_null $P1773, vivify_552
+    new $P1773, "Undef"
   vivify_552:
-    $P1762 = $P1761."ast"()
-    set $P1755, $P1762
-  if_1756_end:
-    store_lex "$past", $P1755
-.annotate 'line', 652
-    find_lex $P1766, "$/"
-    unless_null $P1766, vivify_553
-    $P1766 = root_new ['parrot';'Hash']
+    $P1774 = $P1773."ast"()
+    set $P1767, $P1774
+  if_1768_end:
+    store_lex "$past", $P1767
+.annotate 'line', 653
+    find_lex $P1778, "$/"
+    unless_null $P1778, vivify_553
+    $P1778 = root_new ['parrot';'Hash']
   vivify_553:
-    set $P1767, $P1766["op"]
-    unless_null $P1767, vivify_554
-    new $P1767, "Undef"
+    set $P1779, $P1778["op"]
+    unless_null $P1779, vivify_554
+    new $P1779, "Undef"
   vivify_554:
-    set $S1768, $P1767
-    new $P1769, 'String'
-    set $P1769, $S1768
-    store_lex "$pirop", $P1769
-.annotate 'line', 653
+    set $S1780, $P1779
+    new $P1781, 'String'
+    set $P1781, $S1780
+    store_lex "$pirop", $P1781
+.annotate 'line', 654
 
         $P0 = find_lex '$pirop'
         $S0 = $P0
         $P0 = split '__', $S0
         $S0 = join ' ', $P0
-        $P1770 = box $S0
+        $P1782 = box $S0
     
-    store_lex "$pirop", $P1770
-.annotate 'line', 660
-    find_lex $P1771, "$past"
-    find_lex $P1772, "$pirop"
-    $P1771."pirop"($P1772)
+    store_lex "$pirop", $P1782
 .annotate 'line', 661
-    find_lex $P1773, "$past"
-    $P1773."pasttype"("pirop")
+    find_lex $P1783, "$past"
+    find_lex $P1784, "$pirop"
+    $P1783."pirop"($P1784)
 .annotate 'line', 662
-    find_lex $P1774, "$/"
-    find_lex $P1775, "$past"
-    $P1776 = $P1774."!make"($P1775)
-.annotate 'line', 650
-    .return ($P1776)
-  control_1750:
+    find_lex $P1785, "$past"
+    $P1785."pasttype"("pirop")
+.annotate 'line', 663
+    find_lex $P1786, "$/"
+    find_lex $P1787, "$past"
+    $P1788 = $P1786."!make"($P1787)
+.annotate 'line', 651
+    .return ($P1788)
+  control_1762:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1777, exception, "payload"
-    .return ($P1777)
+    getattribute $P1789, exception, "payload"
+    .return ($P1789)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "args"  :subid("97_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1781
-.annotate 'line', 665
-    new $P1780, 'ExceptionHandler'
-    set_addr $P1780, control_1779
-    $P1780."handle_types"(.CONTROL_RETURN)
-    push_eh $P1780
+.sub "args"  :subid("97_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1793
+.annotate 'line', 666
+    new $P1792, 'ExceptionHandler'
+    set_addr $P1792, control_1791
+    $P1792."handle_types"(.CONTROL_RETURN)
+    push_eh $P1792
     .lex "self", self
-    .lex "$/", param_1781
-    find_lex $P1782, "$/"
-    find_lex $P1783, "$/"
-    unless_null $P1783, vivify_555
-    $P1783 = root_new ['parrot';'Hash']
+    .lex "$/", param_1793
+    find_lex $P1794, "$/"
+    find_lex $P1795, "$/"
+    unless_null $P1795, vivify_555
+    $P1795 = root_new ['parrot';'Hash']
   vivify_555:
-    set $P1784, $P1783["arglist"]
-    unless_null $P1784, vivify_556
-    new $P1784, "Undef"
+    set $P1796, $P1795["arglist"]
+    unless_null $P1796, vivify_556
+    new $P1796, "Undef"
   vivify_556:
-    $P1785 = $P1784."ast"()
-    $P1786 = $P1782."!make"($P1785)
-    .return ($P1786)
-  control_1779:
+    $P1797 = $P1796."ast"()
+    $P1798 = $P1794."!make"($P1797)
+    .return ($P1798)
+  control_1791:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1787, exception, "payload"
-    .return ($P1787)
+    getattribute $P1799, exception, "payload"
+    .return ($P1799)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "arglist"  :subid("98_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1791
-.annotate 'line', 667
-    .const 'Sub' $P1802 = "99_1280467483.70067" 
-    capture_lex $P1802
-    new $P1790, 'ExceptionHandler'
-    set_addr $P1790, control_1789
-    $P1790."handle_types"(.CONTROL_RETURN)
-    push_eh $P1790
-    .lex "self", self
-    .lex "$/", param_1791
+.sub "arglist"  :subid("98_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1803
 .annotate 'line', 668
-    new $P1792, "Undef"
-    .lex "$past", $P1792
-.annotate 'line', 676
-    new $P1793, "Undef"
-    .lex "$i", $P1793
+    .const 'Sub' $P1814 = "99_1283368216.90714" 
+    capture_lex $P1814
+    new $P1802, 'ExceptionHandler'
+    set_addr $P1802, control_1801
+    $P1802."handle_types"(.CONTROL_RETURN)
+    push_eh $P1802
+    .lex "self", self
+    .lex "$/", param_1803
+.annotate 'line', 669
+    new $P1804, "Undef"
+    .lex "$past", $P1804
 .annotate 'line', 677
-    new $P1794, "Undef"
-    .lex "$n", $P1794
-.annotate 'line', 668
-    get_hll_global $P1795, ["PAST"], "Op"
-    find_lex $P1796, "$/"
-    $P1797 = $P1795."new"("call" :named("pasttype"), $P1796 :named("node"))
-    store_lex "$past", $P1797
+    new $P1805, "Undef"
+    .lex "$i", $P1805
+.annotate 'line', 678
+    new $P1806, "Undef"
+    .lex "$n", $P1806
 .annotate 'line', 669
-    find_lex $P1799, "$/"
-    unless_null $P1799, vivify_557
-    $P1799 = root_new ['parrot';'Hash']
+    get_hll_global $P1807, ["PAST"], "Op"
+    find_lex $P1808, "$/"
+    $P1809 = $P1807."new"("call" :named("pasttype"), $P1808 :named("node"))
+    store_lex "$past", $P1809
+.annotate 'line', 670
+    find_lex $P1811, "$/"
+    unless_null $P1811, vivify_557
+    $P1811 = root_new ['parrot';'Hash']
   vivify_557:
-    set $P1800, $P1799["EXPR"]
-    unless_null $P1800, vivify_558
-    new $P1800, "Undef"
+    set $P1812, $P1811["EXPR"]
+    unless_null $P1812, vivify_558
+    new $P1812, "Undef"
   vivify_558:
-    unless $P1800, if_1798_end
-    .const 'Sub' $P1802 = "99_1280467483.70067" 
-    capture_lex $P1802
-    $P1802()
-  if_1798_end:
-.annotate 'line', 676
-    new $P1834, "Integer"
-    assign $P1834, 0
-    store_lex "$i", $P1834
+    unless $P1812, if_1810_end
+    .const 'Sub' $P1814 = "99_1283368216.90714" 
+    capture_lex $P1814
+    $P1814()
+  if_1810_end:
 .annotate 'line', 677
-    find_lex $P1835, "$past"
-    $P1836 = $P1835."list"()
-    set $N1837, $P1836
-    new $P1838, 'Float'
-    set $P1838, $N1837
-    store_lex "$n", $P1838
+    new $P1846, "Integer"
+    assign $P1846, 0
+    store_lex "$i", $P1846
 .annotate 'line', 678
-    new $P1886, 'ExceptionHandler'
-    set_addr $P1886, loop1885_handler
-    $P1886."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1886
-  loop1885_test:
-    find_lex $P1839, "$i"
-    set $N1840, $P1839
-    find_lex $P1841, "$n"
-    set $N1842, $P1841
-    islt $I1843, $N1840, $N1842
-    unless $I1843, loop1885_done
-  loop1885_redo:
-.annotate 'line', 679
-    find_lex $P1845, "$i"
-    set $I1846, $P1845
     find_lex $P1847, "$past"
-    unless_null $P1847, vivify_562
-    $P1847 = root_new ['parrot';'ResizablePMCArray']
+    $P1848 = $P1847."list"()
+    set $N1849, $P1848
+    new $P1850, 'Float'
+    set $P1850, $N1849
+    store_lex "$n", $P1850
+.annotate 'line', 679
+    new $P1898, 'ExceptionHandler'
+    set_addr $P1898, loop1897_handler
+    $P1898."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1898
+  loop1897_test:
+    find_lex $P1851, "$i"
+    set $N1852, $P1851
+    find_lex $P1853, "$n"
+    set $N1854, $P1853
+    islt $I1855, $N1852, $N1854
+    unless $I1855, loop1897_done
+  loop1897_redo:
+.annotate 'line', 680
+    find_lex $P1857, "$i"
+    set $I1858, $P1857
+    find_lex $P1859, "$past"
+    unless_null $P1859, vivify_562
+    $P1859 = root_new ['parrot';'ResizablePMCArray']
   vivify_562:
-    set $P1848, $P1847[$I1846]
-    unless_null $P1848, vivify_563
-    new $P1848, "Undef"
+    set $P1860, $P1859[$I1858]
+    unless_null $P1860, vivify_563
+    new $P1860, "Undef"
   vivify_563:
-    $S1849 = $P1848."name"()
-    iseq $I1850, $S1849, "&prefix:<|>"
-    unless $I1850, if_1844_end
-.annotate 'line', 680
-    find_lex $P1851, "$i"
-    set $I1852, $P1851
-    find_lex $P1853, "$past"
-    unless_null $P1853, vivify_564
-    $P1853 = root_new ['parrot';'ResizablePMCArray']
+    $S1861 = $P1860."name"()
+    iseq $I1862, $S1861, "&prefix:<|>"
+    unless $I1862, if_1856_end
+.annotate 'line', 681
+    find_lex $P1863, "$i"
+    set $I1864, $P1863
+    find_lex $P1865, "$past"
+    unless_null $P1865, vivify_564
+    $P1865 = root_new ['parrot';'ResizablePMCArray']
   vivify_564:
-    set $P1854, $P1853[$I1852]
-    unless_null $P1854, vivify_565
-    $P1854 = root_new ['parrot';'ResizablePMCArray']
+    set $P1866, $P1865[$I1864]
+    unless_null $P1866, vivify_565
+    $P1866 = root_new ['parrot';'ResizablePMCArray']
   vivify_565:
-    set $P1855, $P1854[0]
-    unless_null $P1855, vivify_566
-    new $P1855, "Undef"
+    set $P1867, $P1866[0]
+    unless_null $P1867, vivify_566
+    new $P1867, "Undef"
   vivify_566:
-    find_lex $P1856, "$i"
-    set $I1857, $P1856
-    find_lex $P1858, "$past"
-    unless_null $P1858, vivify_567
-    $P1858 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$past", $P1858
+    find_lex $P1868, "$i"
+    set $I1869, $P1868
+    find_lex $P1870, "$past"
+    unless_null $P1870, vivify_567
+    $P1870 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$past", $P1870
   vivify_567:
-    set $P1858[$I1857], $P1855
-.annotate 'line', 681
-    find_lex $P1859, "$i"
-    set $I1860, $P1859
-    find_lex $P1861, "$past"
-    unless_null $P1861, vivify_568
-    $P1861 = root_new ['parrot';'ResizablePMCArray']
+    set $P1870[$I1869], $P1867
+.annotate 'line', 682
+    find_lex $P1871, "$i"
+    set $I1872, $P1871
+    find_lex $P1873, "$past"
+    unless_null $P1873, vivify_568
+    $P1873 = root_new ['parrot';'ResizablePMCArray']
   vivify_568:
-    set $P1862, $P1861[$I1860]
-    unless_null $P1862, vivify_569
-    new $P1862, "Undef"
+    set $P1874, $P1873[$I1872]
+    unless_null $P1874, vivify_569
+    new $P1874, "Undef"
   vivify_569:
-    $P1862."flat"(1)
-.annotate 'line', 682
-    find_lex $P1866, "$i"
-    set $I1867, $P1866
-    find_lex $P1868, "$past"
-    unless_null $P1868, vivify_570
-    $P1868 = root_new ['parrot';'ResizablePMCArray']
+    $P1874."flat"(1)
+.annotate 'line', 683
+    find_lex $P1878, "$i"
+    set $I1879, $P1878
+    find_lex $P1880, "$past"
+    unless_null $P1880, vivify_570
+    $P1880 = root_new ['parrot';'ResizablePMCArray']
   vivify_570:
-    set $P1869, $P1868[$I1867]
-    unless_null $P1869, vivify_571
-    new $P1869, "Undef"
+    set $P1881, $P1880[$I1879]
+    unless_null $P1881, vivify_571
+    new $P1881, "Undef"
   vivify_571:
-    get_hll_global $P1870, ["PAST"], "Val"
-    $P1871 = $P1869."isa"($P1870)
-    if $P1871, if_1865
-    set $P1864, $P1871
-    goto if_1865_end
-  if_1865:
-.annotate 'line', 683
-    find_lex $P1872, "$i"
-    set $I1873, $P1872
-    find_lex $P1874, "$past"
-    unless_null $P1874, vivify_572
-    $P1874 = root_new ['parrot';'ResizablePMCArray']
+    get_hll_global $P1882, ["PAST"], "Val"
+    $P1883 = $P1881."isa"($P1882)
+    if $P1883, if_1877
+    set $P1876, $P1883
+    goto if_1877_end
+  if_1877:
+.annotate 'line', 684
+    find_lex $P1884, "$i"
+    set $I1885, $P1884
+    find_lex $P1886, "$past"
+    unless_null $P1886, vivify_572
+    $P1886 = root_new ['parrot';'ResizablePMCArray']
   vivify_572:
-    set $P1875, $P1874[$I1873]
-    unless_null $P1875, vivify_573
-    new $P1875, "Undef"
+    set $P1887, $P1886[$I1885]
+    unless_null $P1887, vivify_573
+    new $P1887, "Undef"
   vivify_573:
-    $S1876 = $P1875."name"()
-    substr $S1877, $S1876, 0, 1
-    iseq $I1878, $S1877, "%"
-    new $P1864, 'Integer'
-    set $P1864, $I1878
-  if_1865_end:
-    unless $P1864, if_1863_end
-.annotate 'line', 684
-    find_lex $P1879, "$i"
-    set $I1880, $P1879
-    find_lex $P1881, "$past"
-    unless_null $P1881, vivify_574
-    $P1881 = root_new ['parrot';'ResizablePMCArray']
+    $S1888 = $P1887."name"()
+    substr $S1889, $S1888, 0, 1
+    iseq $I1890, $S1889, "%"
+    new $P1876, 'Integer'
+    set $P1876, $I1890
+  if_1877_end:
+    unless $P1876, if_1875_end
+.annotate 'line', 685
+    find_lex $P1891, "$i"
+    set $I1892, $P1891
+    find_lex $P1893, "$past"
+    unless_null $P1893, vivify_574
+    $P1893 = root_new ['parrot';'ResizablePMCArray']
   vivify_574:
-    set $P1882, $P1881[$I1880]
-    unless_null $P1882, vivify_575
-    new $P1882, "Undef"
+    set $P1894, $P1893[$I1892]
+    unless_null $P1894, vivify_575
+    new $P1894, "Undef"
   vivify_575:
-    $P1882."named"(1)
-  if_1863_end:
-  if_1844_end:
+    $P1894."named"(1)
+  if_1875_end:
+  if_1856_end:
+.annotate 'line', 680
+    find_lex $P1895, "$i"
+    clone $P1896, $P1895
+    inc $P1895
+  loop1897_next:
 .annotate 'line', 679
-    find_lex $P1883, "$i"
-    clone $P1884, $P1883
-    inc $P1883
-  loop1885_next:
-.annotate 'line', 678
-    goto loop1885_test
-  loop1885_handler:
+    goto loop1897_test
+  loop1897_handler:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1887, exception, 'type'
-    eq $P1887, .CONTROL_LOOP_NEXT, loop1885_next
-    eq $P1887, .CONTROL_LOOP_REDO, loop1885_redo
-  loop1885_done:
+    getattribute $P1899, exception, 'type'
+    eq $P1899, .CONTROL_LOOP_NEXT, loop1897_next
+    eq $P1899, .CONTROL_LOOP_REDO, loop1897_redo
+  loop1897_done:
     pop_eh 
-.annotate 'line', 689
-    find_lex $P1888, "$/"
-    find_lex $P1889, "$past"
-    $P1890 = $P1888."!make"($P1889)
-.annotate 'line', 667
-    .return ($P1890)
-  control_1789:
+.annotate 'line', 690
+    find_lex $P1900, "$/"
+    find_lex $P1901, "$past"
+    $P1902 = $P1900."!make"($P1901)
+.annotate 'line', 668
+    .return ($P1902)
+  control_1801:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1891, exception, "payload"
-    .return ($P1891)
+    getattribute $P1903, exception, "payload"
+    .return ($P1903)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1801"  :anon :subid("99_1280467483.70067") :outer("98_1280467483.70067")
-.annotate 'line', 669
-    .const 'Sub' $P1823 = "100_1280467483.70067" 
-    capture_lex $P1823
+.sub "_block1813"  :anon :subid("99_1283368216.90714") :outer("98_1283368216.90714")
 .annotate 'line', 670
-    new $P1803, "Undef"
-    .lex "$expr", $P1803
-    find_lex $P1804, "$/"
-    unless_null $P1804, vivify_559
-    $P1804 = root_new ['parrot';'Hash']
+    .const 'Sub' $P1835 = "100_1283368216.90714" 
+    capture_lex $P1835
+.annotate 'line', 671
+    new $P1815, "Undef"
+    .lex "$expr", $P1815
+    find_lex $P1816, "$/"
+    unless_null $P1816, vivify_559
+    $P1816 = root_new ['parrot';'Hash']
   vivify_559:
-    set $P1805, $P1804["EXPR"]
-    unless_null $P1805, vivify_560
-    new $P1805, "Undef"
+    set $P1817, $P1816["EXPR"]
+    unless_null $P1817, vivify_560
+    new $P1817, "Undef"
   vivify_560:
-    $P1806 = $P1805."ast"()
-    store_lex "$expr", $P1806
-.annotate 'line', 671
-    find_lex $P1811, "$expr"
-    $S1812 = $P1811."name"()
-    iseq $I1813, $S1812, "&infix:<,>"
-    if $I1813, if_1810
-    new $P1809, 'Integer'
-    set $P1809, $I1813
-    goto if_1810_end
-  if_1810:
-    find_lex $P1814, "$expr"
-    $P1815 = $P1814."named"()
-    isfalse $I1816, $P1815
-    new $P1809, 'Integer'
-    set $P1809, $I1816
-  if_1810_end:
-    if $P1809, if_1808
-.annotate 'line', 674
-    find_lex $P1831, "$past"
-    find_lex $P1832, "$expr"
-    $P1833 = $P1831."push"($P1832)
-    set $P1807, $P1833
-.annotate 'line', 671
-    goto if_1808_end
-  if_1808:
+    $P1818 = $P1817."ast"()
+    store_lex "$expr", $P1818
+.annotate 'line', 672
+    find_lex $P1823, "$expr"
+    $S1824 = $P1823."name"()
+    iseq $I1825, $S1824, "&infix:<,>"
+    if $I1825, if_1822
+    new $P1821, 'Integer'
+    set $P1821, $I1825
+    goto if_1822_end
+  if_1822:
+    find_lex $P1826, "$expr"
+    $P1827 = $P1826."named"()
+    isfalse $I1828, $P1827
+    new $P1821, 'Integer'
+    set $P1821, $I1828
+  if_1822_end:
+    if $P1821, if_1820
+.annotate 'line', 675
+    find_lex $P1843, "$past"
+    find_lex $P1844, "$expr"
+    $P1845 = $P1843."push"($P1844)
+    set $P1819, $P1845
 .annotate 'line', 672
-    find_lex $P1818, "$expr"
-    $P1819 = $P1818."list"()
-    defined $I1820, $P1819
-    unless $I1820, for_undef_561
-    iter $P1817, $P1819
-    new $P1829, 'ExceptionHandler'
-    set_addr $P1829, loop1828_handler
-    $P1829."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1829
-  loop1828_test:
-    unless $P1817, loop1828_done
-    shift $P1821, $P1817
-  loop1828_redo:
-    .const 'Sub' $P1823 = "100_1280467483.70067" 
-    capture_lex $P1823
-    $P1823($P1821)
-  loop1828_next:
-    goto loop1828_test
-  loop1828_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1830, exception, 'type'
-    eq $P1830, .CONTROL_LOOP_NEXT, loop1828_next
-    eq $P1830, .CONTROL_LOOP_REDO, loop1828_redo
-  loop1828_done:
+    goto if_1820_end
+  if_1820:
+.annotate 'line', 673
+    find_lex $P1830, "$expr"
+    $P1831 = $P1830."list"()
+    defined $I1832, $P1831
+    unless $I1832, for_undef_561
+    iter $P1829, $P1831
+    new $P1841, 'ExceptionHandler'
+    set_addr $P1841, loop1840_handler
+    $P1841."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1841
+  loop1840_test:
+    unless $P1829, loop1840_done
+    shift $P1833, $P1829
+  loop1840_redo:
+    .const 'Sub' $P1835 = "100_1283368216.90714" 
+    capture_lex $P1835
+    $P1835($P1833)
+  loop1840_next:
+    goto loop1840_test
+  loop1840_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1842, exception, 'type'
+    eq $P1842, .CONTROL_LOOP_NEXT, loop1840_next
+    eq $P1842, .CONTROL_LOOP_REDO, loop1840_redo
+  loop1840_done:
     pop_eh 
   for_undef_561:
-.annotate 'line', 671
-    set $P1807, $P1817
-  if_1808_end:
-.annotate 'line', 669
-    .return ($P1807)
+.annotate 'line', 672
+    set $P1819, $P1829
+  if_1820_end:
+.annotate 'line', 670
+    .return ($P1819)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1822"  :anon :subid("100_1280467483.70067") :outer("99_1280467483.70067")
-    .param pmc param_1824
-.annotate 'line', 672
-    .lex "$_", param_1824
-    find_lex $P1825, "$past"
-    find_lex $P1826, "$_"
-    $P1827 = $P1825."push"($P1826)
-    .return ($P1827)
+.sub "_block1834"  :anon :subid("100_1283368216.90714") :outer("99_1283368216.90714")
+    .param pmc param_1836
+.annotate 'line', 673
+    .lex "$_", param_1836
+    find_lex $P1837, "$past"
+    find_lex $P1838, "$_"
+    $P1839 = $P1837."push"($P1838)
+    .return ($P1839)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<value>"  :subid("101_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1895
-.annotate 'line', 693
-    new $P1894, 'ExceptionHandler'
-    set_addr $P1894, control_1893
-    $P1894."handle_types"(.CONTROL_RETURN)
-    push_eh $P1894
+.sub "term:sym<value>"  :subid("101_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1907
+.annotate 'line', 694
+    new $P1906, 'ExceptionHandler'
+    set_addr $P1906, control_1905
+    $P1906."handle_types"(.CONTROL_RETURN)
+    push_eh $P1906
     .lex "self", self
-    .lex "$/", param_1895
-    find_lex $P1896, "$/"
-    find_lex $P1897, "$/"
-    unless_null $P1897, vivify_576
-    $P1897 = root_new ['parrot';'Hash']
+    .lex "$/", param_1907
+    find_lex $P1908, "$/"
+    find_lex $P1909, "$/"
+    unless_null $P1909, vivify_576
+    $P1909 = root_new ['parrot';'Hash']
   vivify_576:
-    set $P1898, $P1897["value"]
-    unless_null $P1898, vivify_577
-    new $P1898, "Undef"
+    set $P1910, $P1909["value"]
+    unless_null $P1910, vivify_577
+    new $P1910, "Undef"
   vivify_577:
-    $P1899 = $P1898."ast"()
-    $P1900 = $P1896."!make"($P1899)
-    .return ($P1900)
-  control_1893:
+    $P1911 = $P1910."ast"()
+    $P1912 = $P1908."!make"($P1911)
+    .return ($P1912)
+  control_1905:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1901, exception, "payload"
-    .return ($P1901)
+    getattribute $P1913, exception, "payload"
+    .return ($P1913)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<( )>"  :subid("102_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1905
-.annotate 'line', 695
-    new $P1904, 'ExceptionHandler'
-    set_addr $P1904, control_1903
-    $P1904."handle_types"(.CONTROL_RETURN)
-    push_eh $P1904
-    .lex "self", self
-    .lex "$/", param_1905
+.sub "circumfix:sym<( )>"  :subid("102_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1917
 .annotate 'line', 696
-    find_lex $P1906, "$/"
+    new $P1916, 'ExceptionHandler'
+    set_addr $P1916, control_1915
+    $P1916."handle_types"(.CONTROL_RETURN)
+    push_eh $P1916
+    .lex "self", self
+    .lex "$/", param_1917
 .annotate 'line', 697
-    find_lex $P1909, "$/"
-    unless_null $P1909, vivify_578
-    $P1909 = root_new ['parrot';'Hash']
+    find_lex $P1918, "$/"
+.annotate 'line', 698
+    find_lex $P1921, "$/"
+    unless_null $P1921, vivify_578
+    $P1921 = root_new ['parrot';'Hash']
   vivify_578:
-    set $P1910, $P1909["EXPR"]
-    unless_null $P1910, vivify_579
-    new $P1910, "Undef"
+    set $P1922, $P1921["EXPR"]
+    unless_null $P1922, vivify_579
+    new $P1922, "Undef"
   vivify_579:
-    if $P1910, if_1908
+    if $P1922, if_1920
+.annotate 'line', 699
+    get_hll_global $P1927, ["PAST"], "Op"
+    find_lex $P1928, "$/"
+    $P1929 = $P1927."new"("list" :named("pasttype"), $P1928 :named("node"))
+    set $P1919, $P1929
 .annotate 'line', 698
-    get_hll_global $P1915, ["PAST"], "Op"
-    find_lex $P1916, "$/"
-    $P1917 = $P1915."new"("list" :named("pasttype"), $P1916 :named("node"))
-    set $P1907, $P1917
-.annotate 'line', 697
-    goto if_1908_end
-  if_1908:
-    find_lex $P1911, "$/"
-    unless_null $P1911, vivify_580
-    $P1911 = root_new ['parrot';'Hash']
+    goto if_1920_end
+  if_1920:
+    find_lex $P1923, "$/"
+    unless_null $P1923, vivify_580
+    $P1923 = root_new ['parrot';'Hash']
   vivify_580:
-    set $P1912, $P1911["EXPR"]
-    unless_null $P1912, vivify_581
-    $P1912 = root_new ['parrot';'ResizablePMCArray']
+    set $P1924, $P1923["EXPR"]
+    unless_null $P1924, vivify_581
+    $P1924 = root_new ['parrot';'ResizablePMCArray']
   vivify_581:
-    set $P1913, $P1912[0]
-    unless_null $P1913, vivify_582
-    new $P1913, "Undef"
+    set $P1925, $P1924[0]
+    unless_null $P1925, vivify_582
+    new $P1925, "Undef"
   vivify_582:
-    $P1914 = $P1913."ast"()
-    set $P1907, $P1914
-  if_1908_end:
-    $P1918 = $P1906."!make"($P1907)
-.annotate 'line', 695
-    .return ($P1918)
-  control_1903:
+    $P1926 = $P1925."ast"()
+    set $P1919, $P1926
+  if_1920_end:
+    $P1930 = $P1918."!make"($P1919)
+.annotate 'line', 696
+    .return ($P1930)
+  control_1915:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1919, exception, "payload"
-    .return ($P1919)
+    getattribute $P1931, exception, "payload"
+    .return ($P1931)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<[ ]>"  :subid("103_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1923
-.annotate 'line', 701
-    new $P1922, 'ExceptionHandler'
-    set_addr $P1922, control_1921
-    $P1922."handle_types"(.CONTROL_RETURN)
-    push_eh $P1922
-    .lex "self", self
-    .lex "$/", param_1923
+.sub "circumfix:sym<[ ]>"  :subid("103_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1935
 .annotate 'line', 702
-    new $P1924, "Undef"
-    .lex "$past", $P1924
-.annotate 'line', 701
-    find_lex $P1925, "$past"
+    new $P1934, 'ExceptionHandler'
+    set_addr $P1934, control_1933
+    $P1934."handle_types"(.CONTROL_RETURN)
+    push_eh $P1934
+    .lex "self", self
+    .lex "$/", param_1935
 .annotate 'line', 703
-    find_lex $P1927, "$/"
-    unless_null $P1927, vivify_583
-    $P1927 = root_new ['parrot';'Hash']
+    new $P1936, "Undef"
+    .lex "$past", $P1936
+.annotate 'line', 702
+    find_lex $P1937, "$past"
+.annotate 'line', 704
+    find_lex $P1939, "$/"
+    unless_null $P1939, vivify_583
+    $P1939 = root_new ['parrot';'Hash']
   vivify_583:
-    set $P1928, $P1927["EXPR"]
-    unless_null $P1928, vivify_584
-    new $P1928, "Undef"
+    set $P1940, $P1939["EXPR"]
+    unless_null $P1940, vivify_584
+    new $P1940, "Undef"
   vivify_584:
-    if $P1928, if_1926
+    if $P1940, if_1938
+.annotate 'line', 711
+    get_hll_global $P1952, ["PAST"], "Op"
+    $P1953 = $P1952."new"("list" :named("pasttype"))
+    store_lex "$past", $P1953
 .annotate 'line', 710
-    get_hll_global $P1940, ["PAST"], "Op"
-    $P1941 = $P1940."new"("list" :named("pasttype"))
-    store_lex "$past", $P1941
-.annotate 'line', 709
-    goto if_1926_end
-  if_1926:
-.annotate 'line', 704
-    find_lex $P1929, "$/"
-    unless_null $P1929, vivify_585
-    $P1929 = root_new ['parrot';'Hash']
+    goto if_1938_end
+  if_1938:
+.annotate 'line', 705
+    find_lex $P1941, "$/"
+    unless_null $P1941, vivify_585
+    $P1941 = root_new ['parrot';'Hash']
   vivify_585:
-    set $P1930, $P1929["EXPR"]
-    unless_null $P1930, vivify_586
-    $P1930 = root_new ['parrot';'ResizablePMCArray']
+    set $P1942, $P1941["EXPR"]
+    unless_null $P1942, vivify_586
+    $P1942 = root_new ['parrot';'ResizablePMCArray']
   vivify_586:
-    set $P1931, $P1930[0]
-    unless_null $P1931, vivify_587
-    new $P1931, "Undef"
+    set $P1943, $P1942[0]
+    unless_null $P1943, vivify_587
+    new $P1943, "Undef"
   vivify_587:
-    $P1932 = $P1931."ast"()
-    store_lex "$past", $P1932
-.annotate 'line', 705
-    find_lex $P1934, "$past"
-    $S1935 = $P1934."name"()
-    isne $I1936, $S1935, "&infix:<,>"
-    unless $I1936, if_1933_end
+    $P1944 = $P1943."ast"()
+    store_lex "$past", $P1944
 .annotate 'line', 706
-    get_hll_global $P1937, ["PAST"], "Op"
-    find_lex $P1938, "$past"
-    $P1939 = $P1937."new"($P1938, "list" :named("pasttype"))
-    store_lex "$past", $P1939
-  if_1933_end:
-  if_1926_end:
-.annotate 'line', 712
-    find_lex $P1942, "$past"
-    $P1942."name"("&circumfix:<[ ]>")
+    find_lex $P1946, "$past"
+    $S1947 = $P1946."name"()
+    isne $I1948, $S1947, "&infix:<,>"
+    unless $I1948, if_1945_end
+.annotate 'line', 707
+    get_hll_global $P1949, ["PAST"], "Op"
+    find_lex $P1950, "$past"
+    $P1951 = $P1949."new"($P1950, "list" :named("pasttype"))
+    store_lex "$past", $P1951
+  if_1945_end:
+  if_1938_end:
 .annotate 'line', 713
-    find_lex $P1943, "$/"
-    find_lex $P1944, "$past"
-    $P1945 = $P1943."!make"($P1944)
-.annotate 'line', 701
-    .return ($P1945)
-  control_1921:
+    find_lex $P1954, "$past"
+    $P1954."name"("&circumfix:<[ ]>")
+.annotate 'line', 714
+    find_lex $P1955, "$/"
+    find_lex $P1956, "$past"
+    $P1957 = $P1955."!make"($P1956)
+.annotate 'line', 702
+    .return ($P1957)
+  control_1933:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1946, exception, "payload"
-    .return ($P1946)
+    getattribute $P1958, exception, "payload"
+    .return ($P1958)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<ang>"  :subid("104_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1950
-.annotate 'line', 716
-    new $P1949, 'ExceptionHandler'
-    set_addr $P1949, control_1948
-    $P1949."handle_types"(.CONTROL_RETURN)
-    push_eh $P1949
-    .lex "self", self
-    .lex "$/", param_1950
-    find_lex $P1951, "$/"
-    find_lex $P1952, "$/"
-    unless_null $P1952, vivify_588
-    $P1952 = root_new ['parrot';'Hash']
+.sub "circumfix:sym<ang>"  :subid("104_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1962
+.annotate 'line', 717
+    new $P1961, 'ExceptionHandler'
+    set_addr $P1961, control_1960
+    $P1961."handle_types"(.CONTROL_RETURN)
+    push_eh $P1961
+    .lex "self", self
+    .lex "$/", param_1962
+    find_lex $P1963, "$/"
+    find_lex $P1964, "$/"
+    unless_null $P1964, vivify_588
+    $P1964 = root_new ['parrot';'Hash']
   vivify_588:
-    set $P1953, $P1952["quote_EXPR"]
-    unless_null $P1953, vivify_589
-    new $P1953, "Undef"
+    set $P1965, $P1964["quote_EXPR"]
+    unless_null $P1965, vivify_589
+    new $P1965, "Undef"
   vivify_589:
-    $P1954 = $P1953."ast"()
-    $P1955 = $P1951."!make"($P1954)
-    .return ($P1955)
-  control_1948:
+    $P1966 = $P1965."ast"()
+    $P1967 = $P1963."!make"($P1966)
+    .return ($P1967)
+  control_1960:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1956, exception, "payload"
-    .return ($P1956)
+    getattribute $P1968, exception, "payload"
+    .return ($P1968)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("105_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1960
-.annotate 'line', 717
-    new $P1959, 'ExceptionHandler'
-    set_addr $P1959, control_1958
-    $P1959."handle_types"(.CONTROL_RETURN)
-    push_eh $P1959
-    .lex "self", self
-    .lex "$/", param_1960
-    find_lex $P1961, "$/"
-    find_lex $P1962, "$/"
-    unless_null $P1962, vivify_590
-    $P1962 = root_new ['parrot';'Hash']
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("105_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1972
+.annotate 'line', 718
+    new $P1971, 'ExceptionHandler'
+    set_addr $P1971, control_1970
+    $P1971."handle_types"(.CONTROL_RETURN)
+    push_eh $P1971
+    .lex "self", self
+    .lex "$/", param_1972
+    find_lex $P1973, "$/"
+    find_lex $P1974, "$/"
+    unless_null $P1974, vivify_590
+    $P1974 = root_new ['parrot';'Hash']
   vivify_590:
-    set $P1963, $P1962["quote_EXPR"]
-    unless_null $P1963, vivify_591
-    new $P1963, "Undef"
+    set $P1975, $P1974["quote_EXPR"]
+    unless_null $P1975, vivify_591
+    new $P1975, "Undef"
   vivify_591:
-    $P1964 = $P1963."ast"()
-    $P1965 = $P1961."!make"($P1964)
-    .return ($P1965)
-  control_1958:
+    $P1976 = $P1975."ast"()
+    $P1977 = $P1973."!make"($P1976)
+    .return ($P1977)
+  control_1970:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1966, exception, "payload"
-    .return ($P1966)
+    getattribute $P1978, exception, "payload"
+    .return ($P1978)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<{ }>"  :subid("106_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1970
-.annotate 'line', 719
-    new $P1969, 'ExceptionHandler'
-    set_addr $P1969, control_1968
-    $P1969."handle_types"(.CONTROL_RETURN)
-    push_eh $P1969
-    .lex "self", self
-    .lex "$/", param_1970
+.sub "circumfix:sym<{ }>"  :subid("106_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_1982
 .annotate 'line', 720
-    new $P1971, "Undef"
-    .lex "$past", $P1971
-    find_lex $P1974, "$/"
-    unless_null $P1974, vivify_592
-    $P1974 = root_new ['parrot';'Hash']
+    new $P1981, 'ExceptionHandler'
+    set_addr $P1981, control_1980
+    $P1981."handle_types"(.CONTROL_RETURN)
+    push_eh $P1981
+    .lex "self", self
+    .lex "$/", param_1982
+.annotate 'line', 721
+    new $P1983, "Undef"
+    .lex "$past", $P1983
+    find_lex $P1986, "$/"
+    unless_null $P1986, vivify_592
+    $P1986 = root_new ['parrot';'Hash']
   vivify_592:
-    set $P1975, $P1974["pblock"]
-    unless_null $P1975, vivify_593
-    $P1975 = root_new ['parrot';'Hash']
+    set $P1987, $P1986["pblock"]
+    unless_null $P1987, vivify_593
+    $P1987 = root_new ['parrot';'Hash']
   vivify_593:
-    set $P1976, $P1975["blockoid"]
-    unless_null $P1976, vivify_594
-    $P1976 = root_new ['parrot';'Hash']
+    set $P1988, $P1987["blockoid"]
+    unless_null $P1988, vivify_594
+    $P1988 = root_new ['parrot';'Hash']
   vivify_594:
-    set $P1977, $P1976["statementlist"]
-    unless_null $P1977, vivify_595
-    $P1977 = root_new ['parrot';'Hash']
+    set $P1989, $P1988["statementlist"]
+    unless_null $P1989, vivify_595
+    $P1989 = root_new ['parrot';'Hash']
   vivify_595:
-    set $P1978, $P1977["statement"]
-    unless_null $P1978, vivify_596
-    new $P1978, "Undef"
+    set $P1990, $P1989["statement"]
+    unless_null $P1990, vivify_596
+    new $P1990, "Undef"
   vivify_596:
-    set $N1979, $P1978
-    isgt $I1980, $N1979, 0.0
-    if $I1980, if_1973
-.annotate 'line', 722
-    $P1984 = "vivitype"("%")
-    set $P1972, $P1984
-.annotate 'line', 720
-    goto if_1973_end
-  if_1973:
+    set $N1991, $P1990
+    isgt $I1992, $N1991, 0.0
+    if $I1992, if_1985
+.annotate 'line', 723
+    $P1996 = "vivitype"("%")
+    set $P1984, $P1996
 .annotate 'line', 721
-    find_lex $P1981, "$/"
-    unless_null $P1981, vivify_597
-    $P1981 = root_new ['parrot';'Hash']
+    goto if_1985_end
+  if_1985:
+.annotate 'line', 722
+    find_lex $P1993, "$/"
+    unless_null $P1993, vivify_597
+    $P1993 = root_new ['parrot';'Hash']
   vivify_597:
-    set $P1982, $P1981["pblock"]
-    unless_null $P1982, vivify_598
-    new $P1982, "Undef"
+    set $P1994, $P1993["pblock"]
+    unless_null $P1994, vivify_598
+    new $P1994, "Undef"
   vivify_598:
-    $P1983 = $P1982."ast"()
-    set $P1972, $P1983
-  if_1973_end:
-    store_lex "$past", $P1972
-.annotate 'line', 723
-    new $P1985, "Integer"
-    assign $P1985, 1
-    find_lex $P1986, "$past"
-    unless_null $P1986, vivify_599
-    $P1986 = root_new ['parrot';'Hash']
-    store_lex "$past", $P1986
-  vivify_599:
-    set $P1986["bareblock"], $P1985
+    $P1995 = $P1994."ast"()
+    set $P1984, $P1995
+  if_1985_end:
+    store_lex "$past", $P1984
 .annotate 'line', 724
-    find_lex $P1987, "$/"
-    find_lex $P1988, "$past"
-    $P1989 = $P1987."!make"($P1988)
-.annotate 'line', 719
-    .return ($P1989)
-  control_1968:
+    new $P1997, "Integer"
+    assign $P1997, 1
+    find_lex $P1998, "$past"
+    unless_null $P1998, vivify_599
+    $P1998 = root_new ['parrot';'Hash']
+    store_lex "$past", $P1998
+  vivify_599:
+    set $P1998["bareblock"], $P1997
+.annotate 'line', 725
+    find_lex $P1999, "$/"
+    find_lex $P2000, "$past"
+    $P2001 = $P1999."!make"($P2000)
+.annotate 'line', 720
+    .return ($P2001)
+  control_1980:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1990, exception, "payload"
-    .return ($P1990)
+    getattribute $P2002, exception, "payload"
+    .return ($P2002)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<sigil>"  :subid("107_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_1994
-.annotate 'line', 727
-    new $P1993, 'ExceptionHandler'
-    set_addr $P1993, control_1992
-    $P1993."handle_types"(.CONTROL_RETURN)
-    push_eh $P1993
-    .lex "self", self
-    .lex "$/", param_1994
+.sub "circumfix:sym<sigil>"  :subid("107_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2006
 .annotate 'line', 728
-    new $P1995, "Undef"
-    .lex "$name", $P1995
-    find_lex $P1998, "$/"
-    unless_null $P1998, vivify_600
-    $P1998 = root_new ['parrot';'Hash']
+    new $P2005, 'ExceptionHandler'
+    set_addr $P2005, control_2004
+    $P2005."handle_types"(.CONTROL_RETURN)
+    push_eh $P2005
+    .lex "self", self
+    .lex "$/", param_2006
+.annotate 'line', 729
+    new $P2007, "Undef"
+    .lex "$name", $P2007
+    find_lex $P2010, "$/"
+    unless_null $P2010, vivify_600
+    $P2010 = root_new ['parrot';'Hash']
   vivify_600:
-    set $P1999, $P1998["sigil"]
-    unless_null $P1999, vivify_601
-    new $P1999, "Undef"
+    set $P2011, $P2010["sigil"]
+    unless_null $P2011, vivify_601
+    new $P2011, "Undef"
   vivify_601:
-    set $S2000, $P1999
-    iseq $I2001, $S2000, "@"
-    if $I2001, if_1997
-.annotate 'line', 729
-    find_lex $P2005, "$/"
-    unless_null $P2005, vivify_602
-    $P2005 = root_new ['parrot';'Hash']
+    set $S2012, $P2011
+    iseq $I2013, $S2012, "@"
+    if $I2013, if_2009
+.annotate 'line', 730
+    find_lex $P2017, "$/"
+    unless_null $P2017, vivify_602
+    $P2017 = root_new ['parrot';'Hash']
   vivify_602:
-    set $P2006, $P2005["sigil"]
-    unless_null $P2006, vivify_603
-    new $P2006, "Undef"
+    set $P2018, $P2017["sigil"]
+    unless_null $P2018, vivify_603
+    new $P2018, "Undef"
   vivify_603:
-    set $S2007, $P2006
-    iseq $I2008, $S2007, "%"
-    if $I2008, if_2004
-    new $P2010, "String"
-    assign $P2010, "item"
-    set $P2003, $P2010
-    goto if_2004_end
-  if_2004:
-    new $P2009, "String"
-    assign $P2009, "hash"
-    set $P2003, $P2009
-  if_2004_end:
-    set $P1996, $P2003
-.annotate 'line', 728
-    goto if_1997_end
-  if_1997:
-    new $P2002, "String"
-    assign $P2002, "list"
-    set $P1996, $P2002
-  if_1997_end:
-    store_lex "$name", $P1996
-.annotate 'line', 731
-    find_lex $P2011, "$/"
-    get_hll_global $P2012, ["PAST"], "Op"
-    find_lex $P2013, "$name"
-    find_lex $P2014, "$/"
-    unless_null $P2014, vivify_604
-    $P2014 = root_new ['parrot';'Hash']
+    set $S2019, $P2018
+    iseq $I2020, $S2019, "%"
+    if $I2020, if_2016
+    new $P2022, "String"
+    assign $P2022, "item"
+    set $P2015, $P2022
+    goto if_2016_end
+  if_2016:
+    new $P2021, "String"
+    assign $P2021, "hash"
+    set $P2015, $P2021
+  if_2016_end:
+    set $P2008, $P2015
+.annotate 'line', 729
+    goto if_2009_end
+  if_2009:
+    new $P2014, "String"
+    assign $P2014, "list"
+    set $P2008, $P2014
+  if_2009_end:
+    store_lex "$name", $P2008
+.annotate 'line', 732
+    find_lex $P2023, "$/"
+    get_hll_global $P2024, ["PAST"], "Op"
+    find_lex $P2025, "$name"
+    find_lex $P2026, "$/"
+    unless_null $P2026, vivify_604
+    $P2026 = root_new ['parrot';'Hash']
   vivify_604:
-    set $P2015, $P2014["semilist"]
-    unless_null $P2015, vivify_605
-    new $P2015, "Undef"
+    set $P2027, $P2026["semilist"]
+    unless_null $P2027, vivify_605
+    new $P2027, "Undef"
   vivify_605:
-    $P2016 = $P2015."ast"()
-    $P2017 = $P2012."new"($P2016, "callmethod" :named("pasttype"), $P2013 :named("name"))
-    $P2018 = $P2011."!make"($P2017)
-.annotate 'line', 727
-    .return ($P2018)
-  control_1992:
+    $P2028 = $P2027."ast"()
+    $P2029 = $P2024."new"($P2028, "callmethod" :named("pasttype"), $P2025 :named("name"))
+    $P2030 = $P2023."!make"($P2029)
+.annotate 'line', 728
+    .return ($P2030)
+  control_2004:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2019, exception, "payload"
-    .return ($P2019)
+    getattribute $P2031, exception, "payload"
+    .return ($P2031)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "semilist"  :subid("108_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2023
-.annotate 'line', 734
-    new $P2022, 'ExceptionHandler'
-    set_addr $P2022, control_2021
-    $P2022."handle_types"(.CONTROL_RETURN)
-    push_eh $P2022
+.sub "semilist"  :subid("108_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2035
+.annotate 'line', 735
+    new $P2034, 'ExceptionHandler'
+    set_addr $P2034, control_2033
+    $P2034."handle_types"(.CONTROL_RETURN)
+    push_eh $P2034
     .lex "self", self
-    .lex "$/", param_2023
-    find_lex $P2024, "$/"
-    find_lex $P2025, "$/"
-    unless_null $P2025, vivify_606
-    $P2025 = root_new ['parrot';'Hash']
+    .lex "$/", param_2035
+    find_lex $P2036, "$/"
+    find_lex $P2037, "$/"
+    unless_null $P2037, vivify_606
+    $P2037 = root_new ['parrot';'Hash']
   vivify_606:
-    set $P2026, $P2025["statement"]
-    unless_null $P2026, vivify_607
-    new $P2026, "Undef"
+    set $P2038, $P2037["statement"]
+    unless_null $P2038, vivify_607
+    new $P2038, "Undef"
   vivify_607:
-    $P2027 = $P2026."ast"()
-    $P2028 = $P2024."!make"($P2027)
-    .return ($P2028)
-  control_2021:
+    $P2039 = $P2038."ast"()
+    $P2040 = $P2036."!make"($P2039)
+    .return ($P2040)
+  control_2033:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2029, exception, "payload"
-    .return ($P2029)
+    getattribute $P2041, exception, "payload"
+    .return ($P2041)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<[ ]>"  :subid("109_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2033
-.annotate 'line', 736
-    new $P2032, 'ExceptionHandler'
-    set_addr $P2032, control_2031
-    $P2032."handle_types"(.CONTROL_RETURN)
-    push_eh $P2032
-    .lex "self", self
-    .lex "$/", param_2033
+.sub "postcircumfix:sym<[ ]>"  :subid("109_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2045
 .annotate 'line', 737
-    find_lex $P2034, "$/"
-    get_hll_global $P2035, ["PAST"], "Var"
-    find_lex $P2036, "$/"
-    unless_null $P2036, vivify_608
-    $P2036 = root_new ['parrot';'Hash']
+    new $P2044, 'ExceptionHandler'
+    set_addr $P2044, control_2043
+    $P2044."handle_types"(.CONTROL_RETURN)
+    push_eh $P2044
+    .lex "self", self
+    .lex "$/", param_2045
+.annotate 'line', 738
+    find_lex $P2046, "$/"
+    get_hll_global $P2047, ["PAST"], "Var"
+    find_lex $P2048, "$/"
+    unless_null $P2048, vivify_608
+    $P2048 = root_new ['parrot';'Hash']
   vivify_608:
-    set $P2037, $P2036["EXPR"]
-    unless_null $P2037, vivify_609
-    new $P2037, "Undef"
+    set $P2049, $P2048["EXPR"]
+    unless_null $P2049, vivify_609
+    new $P2049, "Undef"
   vivify_609:
-    $P2038 = $P2037."ast"()
-.annotate 'line', 739
-    $P2039 = "vivitype"("@")
-    $P2040 = $P2035."new"($P2038, "keyed_int" :named("scope"), "Undef" :named("viviself"), $P2039 :named("vivibase"))
+    $P2050 = $P2049."ast"()
+.annotate 'line', 740
+    $P2051 = "vivitype"("@")
+    $P2052 = $P2047."new"($P2050, "keyed_int" :named("scope"), "Undef" :named("viviself"), $P2051 :named("vivibase"))
+.annotate 'line', 738
+    $P2053 = $P2046."!make"($P2052)
 .annotate 'line', 737
-    $P2041 = $P2034."!make"($P2040)
-.annotate 'line', 736
-    .return ($P2041)
-  control_2031:
+    .return ($P2053)
+  control_2043:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2042, exception, "payload"
-    .return ($P2042)
+    getattribute $P2054, exception, "payload"
+    .return ($P2054)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<{ }>"  :subid("110_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2046
-.annotate 'line', 742
-    new $P2045, 'ExceptionHandler'
-    set_addr $P2045, control_2044
-    $P2045."handle_types"(.CONTROL_RETURN)
-    push_eh $P2045
-    .lex "self", self
-    .lex "$/", param_2046
+.sub "postcircumfix:sym<{ }>"  :subid("110_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2058
 .annotate 'line', 743
-    find_lex $P2047, "$/"
-    get_hll_global $P2048, ["PAST"], "Var"
-    find_lex $P2049, "$/"
-    unless_null $P2049, vivify_610
-    $P2049 = root_new ['parrot';'Hash']
+    new $P2057, 'ExceptionHandler'
+    set_addr $P2057, control_2056
+    $P2057."handle_types"(.CONTROL_RETURN)
+    push_eh $P2057
+    .lex "self", self
+    .lex "$/", param_2058
+.annotate 'line', 744
+    find_lex $P2059, "$/"
+    get_hll_global $P2060, ["PAST"], "Var"
+    find_lex $P2061, "$/"
+    unless_null $P2061, vivify_610
+    $P2061 = root_new ['parrot';'Hash']
   vivify_610:
-    set $P2050, $P2049["EXPR"]
-    unless_null $P2050, vivify_611
-    new $P2050, "Undef"
+    set $P2062, $P2061["EXPR"]
+    unless_null $P2062, vivify_611
+    new $P2062, "Undef"
   vivify_611:
-    $P2051 = $P2050."ast"()
-.annotate 'line', 745
-    $P2052 = "vivitype"("%")
-    $P2053 = $P2048."new"($P2051, "keyed" :named("scope"), "Undef" :named("viviself"), $P2052 :named("vivibase"))
+    $P2063 = $P2062."ast"()
+.annotate 'line', 746
+    $P2064 = "vivitype"("%")
+    $P2065 = $P2060."new"($P2063, "keyed" :named("scope"), "Undef" :named("viviself"), $P2064 :named("vivibase"))
+.annotate 'line', 744
+    $P2066 = $P2059."!make"($P2065)
 .annotate 'line', 743
-    $P2054 = $P2047."!make"($P2053)
-.annotate 'line', 742
-    .return ($P2054)
-  control_2044:
+    .return ($P2066)
+  control_2056:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2055, exception, "payload"
-    .return ($P2055)
+    getattribute $P2067, exception, "payload"
+    .return ($P2067)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<ang>"  :subid("111_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2059
-.annotate 'line', 748
-    new $P2058, 'ExceptionHandler'
-    set_addr $P2058, control_2057
-    $P2058."handle_types"(.CONTROL_RETURN)
-    push_eh $P2058
-    .lex "self", self
-    .lex "$/", param_2059
+.sub "postcircumfix:sym<ang>"  :subid("111_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2071
 .annotate 'line', 749
-    find_lex $P2060, "$/"
-    get_hll_global $P2061, ["PAST"], "Var"
-    find_lex $P2062, "$/"
-    unless_null $P2062, vivify_612
-    $P2062 = root_new ['parrot';'Hash']
+    new $P2070, 'ExceptionHandler'
+    set_addr $P2070, control_2069
+    $P2070."handle_types"(.CONTROL_RETURN)
+    push_eh $P2070
+    .lex "self", self
+    .lex "$/", param_2071
+.annotate 'line', 750
+    find_lex $P2072, "$/"
+    get_hll_global $P2073, ["PAST"], "Var"
+    find_lex $P2074, "$/"
+    unless_null $P2074, vivify_612
+    $P2074 = root_new ['parrot';'Hash']
   vivify_612:
-    set $P2063, $P2062["quote_EXPR"]
-    unless_null $P2063, vivify_613
-    new $P2063, "Undef"
+    set $P2075, $P2074["quote_EXPR"]
+    unless_null $P2075, vivify_613
+    new $P2075, "Undef"
   vivify_613:
-    $P2064 = $P2063."ast"()
-.annotate 'line', 751
-    $P2065 = "vivitype"("%")
-    $P2066 = $P2061."new"($P2064, "keyed" :named("scope"), "Undef" :named("viviself"), $P2065 :named("vivibase"))
+    $P2076 = $P2075."ast"()
+.annotate 'line', 752
+    $P2077 = "vivitype"("%")
+    $P2078 = $P2073."new"($P2076, "keyed" :named("scope"), "Undef" :named("viviself"), $P2077 :named("vivibase"))
+.annotate 'line', 750
+    $P2079 = $P2072."!make"($P2078)
 .annotate 'line', 749
-    $P2067 = $P2060."!make"($P2066)
-.annotate 'line', 748
-    .return ($P2067)
-  control_2057:
+    .return ($P2079)
+  control_2069:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2068, exception, "payload"
-    .return ($P2068)
+    getattribute $P2080, exception, "payload"
+    .return ($P2080)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<( )>"  :subid("112_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2072
-.annotate 'line', 754
-    new $P2071, 'ExceptionHandler'
-    set_addr $P2071, control_2070
-    $P2071."handle_types"(.CONTROL_RETURN)
-    push_eh $P2071
-    .lex "self", self
-    .lex "$/", param_2072
+.sub "postcircumfix:sym<( )>"  :subid("112_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2084
 .annotate 'line', 755
-    find_lex $P2073, "$/"
-    find_lex $P2074, "$/"
-    unless_null $P2074, vivify_614
-    $P2074 = root_new ['parrot';'Hash']
+    new $P2083, 'ExceptionHandler'
+    set_addr $P2083, control_2082
+    $P2083."handle_types"(.CONTROL_RETURN)
+    push_eh $P2083
+    .lex "self", self
+    .lex "$/", param_2084
+.annotate 'line', 756
+    find_lex $P2085, "$/"
+    find_lex $P2086, "$/"
+    unless_null $P2086, vivify_614
+    $P2086 = root_new ['parrot';'Hash']
   vivify_614:
-    set $P2075, $P2074["arglist"]
-    unless_null $P2075, vivify_615
-    new $P2075, "Undef"
+    set $P2087, $P2086["arglist"]
+    unless_null $P2087, vivify_615
+    new $P2087, "Undef"
   vivify_615:
-    $P2076 = $P2075."ast"()
-    $P2077 = $P2073."!make"($P2076)
-.annotate 'line', 754
-    .return ($P2077)
-  control_2070:
+    $P2088 = $P2087."ast"()
+    $P2089 = $P2085."!make"($P2088)
+.annotate 'line', 755
+    .return ($P2089)
+  control_2082:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2078, exception, "payload"
-    .return ($P2078)
+    getattribute $P2090, exception, "payload"
+    .return ($P2090)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "value"  :subid("113_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2082
-.annotate 'line', 758
-    new $P2081, 'ExceptionHandler'
-    set_addr $P2081, control_2080
-    $P2081."handle_types"(.CONTROL_RETURN)
-    push_eh $P2081
-    .lex "self", self
-    .lex "$/", param_2082
+.sub "value"  :subid("113_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2094
 .annotate 'line', 759
-    find_lex $P2083, "$/"
-    find_lex $P2086, "$/"
-    unless_null $P2086, vivify_616
-    $P2086 = root_new ['parrot';'Hash']
+    new $P2093, 'ExceptionHandler'
+    set_addr $P2093, control_2092
+    $P2093."handle_types"(.CONTROL_RETURN)
+    push_eh $P2093
+    .lex "self", self
+    .lex "$/", param_2094
+.annotate 'line', 760
+    find_lex $P2095, "$/"
+    find_lex $P2098, "$/"
+    unless_null $P2098, vivify_616
+    $P2098 = root_new ['parrot';'Hash']
   vivify_616:
-    set $P2087, $P2086["quote"]
-    unless_null $P2087, vivify_617
-    new $P2087, "Undef"
+    set $P2099, $P2098["quote"]
+    unless_null $P2099, vivify_617
+    new $P2099, "Undef"
   vivify_617:
-    if $P2087, if_2085
-    find_lex $P2091, "$/"
-    unless_null $P2091, vivify_618
-    $P2091 = root_new ['parrot';'Hash']
+    if $P2099, if_2097
+    find_lex $P2103, "$/"
+    unless_null $P2103, vivify_618
+    $P2103 = root_new ['parrot';'Hash']
   vivify_618:
-    set $P2092, $P2091["number"]
-    unless_null $P2092, vivify_619
-    new $P2092, "Undef"
+    set $P2104, $P2103["number"]
+    unless_null $P2104, vivify_619
+    new $P2104, "Undef"
   vivify_619:
-    $P2093 = $P2092."ast"()
-    set $P2084, $P2093
-    goto if_2085_end
-  if_2085:
-    find_lex $P2088, "$/"
-    unless_null $P2088, vivify_620
-    $P2088 = root_new ['parrot';'Hash']
+    $P2105 = $P2104."ast"()
+    set $P2096, $P2105
+    goto if_2097_end
+  if_2097:
+    find_lex $P2100, "$/"
+    unless_null $P2100, vivify_620
+    $P2100 = root_new ['parrot';'Hash']
   vivify_620:
-    set $P2089, $P2088["quote"]
-    unless_null $P2089, vivify_621
-    new $P2089, "Undef"
+    set $P2101, $P2100["quote"]
+    unless_null $P2101, vivify_621
+    new $P2101, "Undef"
   vivify_621:
-    $P2090 = $P2089."ast"()
-    set $P2084, $P2090
-  if_2085_end:
-    $P2094 = $P2083."!make"($P2084)
-.annotate 'line', 758
-    .return ($P2094)
-  control_2080:
+    $P2102 = $P2101."ast"()
+    set $P2096, $P2102
+  if_2097_end:
+    $P2106 = $P2095."!make"($P2096)
+.annotate 'line', 759
+    .return ($P2106)
+  control_2092:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2095, exception, "payload"
-    .return ($P2095)
+    getattribute $P2107, exception, "payload"
+    .return ($P2107)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "number"  :subid("114_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2099
-.annotate 'line', 762
-    new $P2098, 'ExceptionHandler'
-    set_addr $P2098, control_2097
-    $P2098."handle_types"(.CONTROL_RETURN)
-    push_eh $P2098
-    .lex "self", self
-    .lex "$/", param_2099
+.sub "number"  :subid("114_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2111
 .annotate 'line', 763
-    new $P2100, "Undef"
-    .lex "$value", $P2100
-    find_lex $P2103, "$/"
-    unless_null $P2103, vivify_622
-    $P2103 = root_new ['parrot';'Hash']
+    new $P2110, 'ExceptionHandler'
+    set_addr $P2110, control_2109
+    $P2110."handle_types"(.CONTROL_RETURN)
+    push_eh $P2110
+    .lex "self", self
+    .lex "$/", param_2111
+.annotate 'line', 764
+    new $P2112, "Undef"
+    .lex "$value", $P2112
+    find_lex $P2115, "$/"
+    unless_null $P2115, vivify_622
+    $P2115 = root_new ['parrot';'Hash']
   vivify_622:
-    set $P2104, $P2103["dec_number"]
-    unless_null $P2104, vivify_623
-    new $P2104, "Undef"
+    set $P2116, $P2115["dec_number"]
+    unless_null $P2116, vivify_623
+    new $P2116, "Undef"
   vivify_623:
-    if $P2104, if_2102
-    find_lex $P2108, "$/"
-    unless_null $P2108, vivify_624
-    $P2108 = root_new ['parrot';'Hash']
+    if $P2116, if_2114
+    find_lex $P2120, "$/"
+    unless_null $P2120, vivify_624
+    $P2120 = root_new ['parrot';'Hash']
   vivify_624:
-    set $P2109, $P2108["integer"]
-    unless_null $P2109, vivify_625
-    new $P2109, "Undef"
+    set $P2121, $P2120["integer"]
+    unless_null $P2121, vivify_625
+    new $P2121, "Undef"
   vivify_625:
-    $P2110 = $P2109."ast"()
-    set $P2101, $P2110
-    goto if_2102_end
-  if_2102:
-    find_lex $P2105, "$/"
-    unless_null $P2105, vivify_626
-    $P2105 = root_new ['parrot';'Hash']
+    $P2122 = $P2121."ast"()
+    set $P2113, $P2122
+    goto if_2114_end
+  if_2114:
+    find_lex $P2117, "$/"
+    unless_null $P2117, vivify_626
+    $P2117 = root_new ['parrot';'Hash']
   vivify_626:
-    set $P2106, $P2105["dec_number"]
-    unless_null $P2106, vivify_627
-    new $P2106, "Undef"
+    set $P2118, $P2117["dec_number"]
+    unless_null $P2118, vivify_627
+    new $P2118, "Undef"
   vivify_627:
-    $P2107 = $P2106."ast"()
-    set $P2101, $P2107
-  if_2102_end:
-    store_lex "$value", $P2101
-.annotate 'line', 764
-    find_lex $P2112, "$/"
-    unless_null $P2112, vivify_628
-    $P2112 = root_new ['parrot';'Hash']
+    $P2119 = $P2118."ast"()
+    set $P2113, $P2119
+  if_2114_end:
+    store_lex "$value", $P2113
+.annotate 'line', 765
+    find_lex $P2124, "$/"
+    unless_null $P2124, vivify_628
+    $P2124 = root_new ['parrot';'Hash']
   vivify_628:
-    set $P2113, $P2112["sign"]
-    unless_null $P2113, vivify_629
-    new $P2113, "Undef"
+    set $P2125, $P2124["sign"]
+    unless_null $P2125, vivify_629
+    new $P2125, "Undef"
   vivify_629:
-    set $S2114, $P2113
-    iseq $I2115, $S2114, "-"
-    unless $I2115, if_2111_end
-    find_lex $P2116, "$value"
-    neg $P2117, $P2116
-    store_lex "$value", $P2117
-  if_2111_end:
-.annotate 'line', 765
-    find_lex $P2118, "$/"
-    get_hll_global $P2119, ["PAST"], "Val"
-    find_lex $P2120, "$value"
-    $P2121 = $P2119."new"($P2120 :named("value"))
-    $P2122 = $P2118."!make"($P2121)
-.annotate 'line', 762
-    .return ($P2122)
-  control_2097:
+    set $S2126, $P2125
+    iseq $I2127, $S2126, "-"
+    unless $I2127, if_2123_end
+    find_lex $P2128, "$value"
+    neg $P2129, $P2128
+    store_lex "$value", $P2129
+  if_2123_end:
+.annotate 'line', 766
+    find_lex $P2130, "$/"
+    get_hll_global $P2131, ["PAST"], "Val"
+    find_lex $P2132, "$value"
+    $P2133 = $P2131."new"($P2132 :named("value"))
+    $P2134 = $P2130."!make"($P2133)
+.annotate 'line', 763
+    .return ($P2134)
+  control_2109:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2123, exception, "payload"
-    .return ($P2123)
+    getattribute $P2135, exception, "payload"
+    .return ($P2135)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<apos>"  :subid("115_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2127
-.annotate 'line', 768
-    new $P2126, 'ExceptionHandler'
-    set_addr $P2126, control_2125
-    $P2126."handle_types"(.CONTROL_RETURN)
-    push_eh $P2126
-    .lex "self", self
-    .lex "$/", param_2127
-    find_lex $P2128, "$/"
-    find_lex $P2129, "$/"
-    unless_null $P2129, vivify_630
-    $P2129 = root_new ['parrot';'Hash']
+.sub "quote:sym<apos>"  :subid("115_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2139
+.annotate 'line', 769
+    new $P2138, 'ExceptionHandler'
+    set_addr $P2138, control_2137
+    $P2138."handle_types"(.CONTROL_RETURN)
+    push_eh $P2138
+    .lex "self", self
+    .lex "$/", param_2139
+    find_lex $P2140, "$/"
+    find_lex $P2141, "$/"
+    unless_null $P2141, vivify_630
+    $P2141 = root_new ['parrot';'Hash']
   vivify_630:
-    set $P2130, $P2129["quote_EXPR"]
-    unless_null $P2130, vivify_631
-    new $P2130, "Undef"
+    set $P2142, $P2141["quote_EXPR"]
+    unless_null $P2142, vivify_631
+    new $P2142, "Undef"
   vivify_631:
-    $P2131 = $P2130."ast"()
-    $P2132 = $P2128."!make"($P2131)
-    .return ($P2132)
-  control_2125:
+    $P2143 = $P2142."ast"()
+    $P2144 = $P2140."!make"($P2143)
+    .return ($P2144)
+  control_2137:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2133, exception, "payload"
-    .return ($P2133)
+    getattribute $P2145, exception, "payload"
+    .return ($P2145)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<dblq>"  :subid("116_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2137
-.annotate 'line', 769
-    new $P2136, 'ExceptionHandler'
-    set_addr $P2136, control_2135
-    $P2136."handle_types"(.CONTROL_RETURN)
-    push_eh $P2136
-    .lex "self", self
-    .lex "$/", param_2137
-    find_lex $P2138, "$/"
-    find_lex $P2139, "$/"
-    unless_null $P2139, vivify_632
-    $P2139 = root_new ['parrot';'Hash']
+.sub "quote:sym<dblq>"  :subid("116_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2149
+.annotate 'line', 770
+    new $P2148, 'ExceptionHandler'
+    set_addr $P2148, control_2147
+    $P2148."handle_types"(.CONTROL_RETURN)
+    push_eh $P2148
+    .lex "self", self
+    .lex "$/", param_2149
+    find_lex $P2150, "$/"
+    find_lex $P2151, "$/"
+    unless_null $P2151, vivify_632
+    $P2151 = root_new ['parrot';'Hash']
   vivify_632:
-    set $P2140, $P2139["quote_EXPR"]
-    unless_null $P2140, vivify_633
-    new $P2140, "Undef"
+    set $P2152, $P2151["quote_EXPR"]
+    unless_null $P2152, vivify_633
+    new $P2152, "Undef"
   vivify_633:
-    $P2141 = $P2140."ast"()
-    $P2142 = $P2138."!make"($P2141)
-    .return ($P2142)
-  control_2135:
+    $P2153 = $P2152."ast"()
+    $P2154 = $P2150."!make"($P2153)
+    .return ($P2154)
+  control_2147:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2143, exception, "payload"
-    .return ($P2143)
+    getattribute $P2155, exception, "payload"
+    .return ($P2155)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<qq>"  :subid("117_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2147
-.annotate 'line', 770
-    new $P2146, 'ExceptionHandler'
-    set_addr $P2146, control_2145
-    $P2146."handle_types"(.CONTROL_RETURN)
-    push_eh $P2146
-    .lex "self", self
-    .lex "$/", param_2147
-    find_lex $P2148, "$/"
-    find_lex $P2149, "$/"
-    unless_null $P2149, vivify_634
-    $P2149 = root_new ['parrot';'Hash']
+.sub "quote:sym<qq>"  :subid("117_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2159
+.annotate 'line', 771
+    new $P2158, 'ExceptionHandler'
+    set_addr $P2158, control_2157
+    $P2158."handle_types"(.CONTROL_RETURN)
+    push_eh $P2158
+    .lex "self", self
+    .lex "$/", param_2159
+    find_lex $P2160, "$/"
+    find_lex $P2161, "$/"
+    unless_null $P2161, vivify_634
+    $P2161 = root_new ['parrot';'Hash']
   vivify_634:
-    set $P2150, $P2149["quote_EXPR"]
-    unless_null $P2150, vivify_635
-    new $P2150, "Undef"
+    set $P2162, $P2161["quote_EXPR"]
+    unless_null $P2162, vivify_635
+    new $P2162, "Undef"
   vivify_635:
-    $P2151 = $P2150."ast"()
-    $P2152 = $P2148."!make"($P2151)
-    .return ($P2152)
-  control_2145:
+    $P2163 = $P2162."ast"()
+    $P2164 = $P2160."!make"($P2163)
+    .return ($P2164)
+  control_2157:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2153, exception, "payload"
-    .return ($P2153)
+    getattribute $P2165, exception, "payload"
+    .return ($P2165)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<q>"  :subid("118_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2157
-.annotate 'line', 771
-    new $P2156, 'ExceptionHandler'
-    set_addr $P2156, control_2155
-    $P2156."handle_types"(.CONTROL_RETURN)
-    push_eh $P2156
-    .lex "self", self
-    .lex "$/", param_2157
-    find_lex $P2158, "$/"
-    find_lex $P2159, "$/"
-    unless_null $P2159, vivify_636
-    $P2159 = root_new ['parrot';'Hash']
+.sub "quote:sym<q>"  :subid("118_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2169
+.annotate 'line', 772
+    new $P2168, 'ExceptionHandler'
+    set_addr $P2168, control_2167
+    $P2168."handle_types"(.CONTROL_RETURN)
+    push_eh $P2168
+    .lex "self", self
+    .lex "$/", param_2169
+    find_lex $P2170, "$/"
+    find_lex $P2171, "$/"
+    unless_null $P2171, vivify_636
+    $P2171 = root_new ['parrot';'Hash']
   vivify_636:
-    set $P2160, $P2159["quote_EXPR"]
-    unless_null $P2160, vivify_637
-    new $P2160, "Undef"
+    set $P2172, $P2171["quote_EXPR"]
+    unless_null $P2172, vivify_637
+    new $P2172, "Undef"
   vivify_637:
-    $P2161 = $P2160."ast"()
-    $P2162 = $P2158."!make"($P2161)
-    .return ($P2162)
-  control_2155:
+    $P2173 = $P2172."ast"()
+    $P2174 = $P2170."!make"($P2173)
+    .return ($P2174)
+  control_2167:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2163, exception, "payload"
-    .return ($P2163)
+    getattribute $P2175, exception, "payload"
+    .return ($P2175)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<Q>"  :subid("119_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2167
-.annotate 'line', 772
-    new $P2166, 'ExceptionHandler'
-    set_addr $P2166, control_2165
-    $P2166."handle_types"(.CONTROL_RETURN)
-    push_eh $P2166
-    .lex "self", self
-    .lex "$/", param_2167
-    find_lex $P2168, "$/"
-    find_lex $P2169, "$/"
-    unless_null $P2169, vivify_638
-    $P2169 = root_new ['parrot';'Hash']
+.sub "quote:sym<Q>"  :subid("119_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2179
+.annotate 'line', 773
+    new $P2178, 'ExceptionHandler'
+    set_addr $P2178, control_2177
+    $P2178."handle_types"(.CONTROL_RETURN)
+    push_eh $P2178
+    .lex "self", self
+    .lex "$/", param_2179
+    find_lex $P2180, "$/"
+    find_lex $P2181, "$/"
+    unless_null $P2181, vivify_638
+    $P2181 = root_new ['parrot';'Hash']
   vivify_638:
-    set $P2170, $P2169["quote_EXPR"]
-    unless_null $P2170, vivify_639
-    new $P2170, "Undef"
+    set $P2182, $P2181["quote_EXPR"]
+    unless_null $P2182, vivify_639
+    new $P2182, "Undef"
   vivify_639:
-    $P2171 = $P2170."ast"()
-    $P2172 = $P2168."!make"($P2171)
-    .return ($P2172)
-  control_2165:
+    $P2183 = $P2182."ast"()
+    $P2184 = $P2180."!make"($P2183)
+    .return ($P2184)
+  control_2177:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2173, exception, "payload"
-    .return ($P2173)
+    getattribute $P2185, exception, "payload"
+    .return ($P2185)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<Q:PIR>"  :subid("120_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2177
-.annotate 'line', 773
-    new $P2176, 'ExceptionHandler'
-    set_addr $P2176, control_2175
-    $P2176."handle_types"(.CONTROL_RETURN)
-    push_eh $P2176
-    .lex "self", self
-    .lex "$/", param_2177
+.sub "quote:sym<Q:PIR>"  :subid("120_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2189
 .annotate 'line', 774
-    find_lex $P2178, "$/"
-    get_hll_global $P2179, ["PAST"], "Op"
-    find_lex $P2180, "$/"
-    unless_null $P2180, vivify_640
-    $P2180 = root_new ['parrot';'Hash']
+    new $P2188, 'ExceptionHandler'
+    set_addr $P2188, control_2187
+    $P2188."handle_types"(.CONTROL_RETURN)
+    push_eh $P2188
+    .lex "self", self
+    .lex "$/", param_2189
+.annotate 'line', 775
+    find_lex $P2190, "$/"
+    get_hll_global $P2191, ["PAST"], "Op"
+    find_lex $P2192, "$/"
+    unless_null $P2192, vivify_640
+    $P2192 = root_new ['parrot';'Hash']
   vivify_640:
-    set $P2181, $P2180["quote_EXPR"]
-    unless_null $P2181, vivify_641
-    new $P2181, "Undef"
+    set $P2193, $P2192["quote_EXPR"]
+    unless_null $P2193, vivify_641
+    new $P2193, "Undef"
   vivify_641:
-    $P2182 = $P2181."ast"()
-    $P2183 = $P2182."value"()
-    find_lex $P2184, "$/"
-    $P2185 = $P2179."new"($P2183 :named("inline"), "inline" :named("pasttype"), $P2184 :named("node"))
-    $P2186 = $P2178."!make"($P2185)
-.annotate 'line', 773
-    .return ($P2186)
-  control_2175:
+    $P2194 = $P2193."ast"()
+    $P2195 = $P2194."value"()
+    find_lex $P2196, "$/"
+    $P2197 = $P2191."new"($P2195 :named("inline"), "inline" :named("pasttype"), $P2196 :named("node"))
+    $P2198 = $P2190."!make"($P2197)
+.annotate 'line', 774
+    .return ($P2198)
+  control_2187:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2187, exception, "payload"
-    .return ($P2187)
+    getattribute $P2199, exception, "payload"
+    .return ($P2199)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym</ />"  :subid("121_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2191
-    .param pmc param_2192 :optional
-    .param int has_param_2192 :opt_flag
-.annotate 'line', 779
-    new $P2190, 'ExceptionHandler'
-    set_addr $P2190, control_2189
-    $P2190."handle_types"(.CONTROL_RETURN)
-    push_eh $P2190
-    .lex "self", self
-    .lex "$/", param_2191
-    if has_param_2192, optparam_642
-    new $P2193, "Undef"
-    set param_2192, $P2193
-  optparam_642:
-    .lex "$key", param_2192
-.annotate 'line', 789
-    new $P2194, "Undef"
-    .lex "$regex", $P2194
-.annotate 'line', 791
-    new $P2195, "Undef"
-    .lex "$past", $P2195
+.sub "quote:sym</ />"  :subid("121_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2203
+    .param pmc param_2204 :optional
+    .param int has_param_2204 :opt_flag
 .annotate 'line', 780
-    find_lex $P2197, "$key"
-    set $S2198, $P2197
-    iseq $I2199, $S2198, "open"
-    unless $I2199, if_2196_end
+    new $P2202, 'ExceptionHandler'
+    set_addr $P2202, control_2201
+    $P2202."handle_types"(.CONTROL_RETURN)
+    push_eh $P2202
+    .lex "self", self
+    .lex "$/", param_2203
+    if has_param_2204, optparam_642
+    new $P2205, "Undef"
+    set param_2204, $P2205
+  optparam_642:
+    .lex "$key", param_2204
+.annotate 'line', 790
+    new $P2206, "Undef"
+    .lex "$regex", $P2206
+.annotate 'line', 792
+    new $P2207, "Undef"
+    .lex "$past", $P2207
 .annotate 'line', 781
+    find_lex $P2209, "$key"
+    set $S2210, $P2209
+    iseq $I2211, $S2210, "open"
+    unless $I2211, if_2208_end
+.annotate 'line', 782
 
             null $P0
             set_hll_global ['Regex';'P6Regex';'Actions'], '$REGEXNAME', $P0
         
-.annotate 'line', 785
-    get_global $P2200, "@BLOCK"
-    unless_null $P2200, vivify_643
-    $P2200 = root_new ['parrot';'ResizablePMCArray']
+.annotate 'line', 786
+    get_global $P2212, "@BLOCK"
+    unless_null $P2212, vivify_643
+    $P2212 = root_new ['parrot';'ResizablePMCArray']
   vivify_643:
-    set $P2201, $P2200[0]
-    unless_null $P2201, vivify_644
-    new $P2201, "Undef"
+    set $P2213, $P2212[0]
+    unless_null $P2213, vivify_644
+    new $P2213, "Undef"
   vivify_644:
-    $P2201."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
-.annotate 'line', 786
-    get_global $P2202, "@BLOCK"
-    unless_null $P2202, vivify_645
-    $P2202 = root_new ['parrot';'ResizablePMCArray']
+    $P2213."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
+.annotate 'line', 787
+    get_global $P2214, "@BLOCK"
+    unless_null $P2214, vivify_645
+    $P2214 = root_new ['parrot';'ResizablePMCArray']
   vivify_645:
-    set $P2203, $P2202[0]
-    unless_null $P2203, vivify_646
-    new $P2203, "Undef"
+    set $P2215, $P2214[0]
+    unless_null $P2215, vivify_646
+    new $P2215, "Undef"
   vivify_646:
-    $P2203."symbol"("$/", "lexical" :named("scope"))
-.annotate 'line', 787
-    new $P2204, "Exception"
-    set $P2204['type'], .CONTROL_RETURN
-    new $P2205, "Integer"
-    assign $P2205, 0
-    setattribute $P2204, 'payload', $P2205
-    throw $P2204
-  if_2196_end:
-.annotate 'line', 790
-    get_hll_global $P2206, ["Regex";"P6Regex";"Actions"], "buildsub"
-    find_lex $P2207, "$/"
-    unless_null $P2207, vivify_647
-    $P2207 = root_new ['parrot';'Hash']
+    $P2215."symbol"("$/", "lexical" :named("scope"))
+.annotate 'line', 788
+    new $P2216, "Exception"
+    set $P2216['type'], .CONTROL_RETURN
+    new $P2217, "Integer"
+    assign $P2217, 0
+    setattribute $P2216, 'payload', $P2217
+    throw $P2216
+  if_2208_end:
+.annotate 'line', 791
+    get_hll_global $P2218, ["Regex";"P6Regex";"Actions"], "buildsub"
+    find_lex $P2219, "$/"
+    unless_null $P2219, vivify_647
+    $P2219 = root_new ['parrot';'Hash']
   vivify_647:
-    set $P2208, $P2207["p6regex"]
-    unless_null $P2208, vivify_648
-    new $P2208, "Undef"
+    set $P2220, $P2219["p6regex"]
+    unless_null $P2220, vivify_648
+    new $P2220, "Undef"
   vivify_648:
-    $P2209 = $P2208."ast"()
-    get_global $P2210, "@BLOCK"
-    $P2211 = $P2210."shift"()
-    $P2212 = $P2206($P2209, $P2211)
-    store_lex "$regex", $P2212
-.annotate 'line', 792
-    get_hll_global $P2213, ["PAST"], "Op"
-.annotate 'line', 794
-    get_hll_global $P2214, ["PAST"], "Var"
-    new $P2215, "ResizablePMCArray"
-    push $P2215, "Regex"
-    $P2216 = $P2214."new"("Regex" :named("name"), $P2215 :named("namespace"), "package" :named("scope"))
-    find_lex $P2217, "$regex"
-    $P2218 = $P2213."new"($P2216, $P2217, "callmethod" :named("pasttype"), "new" :named("name"))
-.annotate 'line', 792
-    store_lex "$past", $P2218
-.annotate 'line', 798
-    find_lex $P2219, "$regex"
-    find_lex $P2220, "$past"
-    unless_null $P2220, vivify_649
-    $P2220 = root_new ['parrot';'Hash']
-    store_lex "$past", $P2220
-  vivify_649:
-    set $P2220["sink"], $P2219
+    $P2221 = $P2220."ast"()
+    get_global $P2222, "@BLOCK"
+    $P2223 = $P2222."shift"()
+    $P2224 = $P2218($P2221, $P2223)
+    store_lex "$regex", $P2224
+.annotate 'line', 793
+    get_hll_global $P2225, ["PAST"], "Op"
+.annotate 'line', 795
+    get_hll_global $P2226, ["PAST"], "Var"
+    new $P2227, "ResizablePMCArray"
+    push $P2227, "Regex"
+    $P2228 = $P2226."new"("Regex" :named("name"), $P2227 :named("namespace"), "package" :named("scope"))
+    find_lex $P2229, "$regex"
+    $P2230 = $P2225."new"($P2228, $P2229, "callmethod" :named("pasttype"), "new" :named("name"))
+.annotate 'line', 793
+    store_lex "$past", $P2230
 .annotate 'line', 799
-    find_lex $P2221, "$/"
-    find_lex $P2222, "$past"
-    $P2223 = $P2221."!make"($P2222)
-.annotate 'line', 779
-    .return ($P2223)
-  control_2189:
+    find_lex $P2231, "$regex"
+    find_lex $P2232, "$past"
+    unless_null $P2232, vivify_649
+    $P2232 = root_new ['parrot';'Hash']
+    store_lex "$past", $P2232
+  vivify_649:
+    set $P2232["sink"], $P2231
+.annotate 'line', 800
+    find_lex $P2233, "$/"
+    find_lex $P2234, "$past"
+    $P2235 = $P2233."!make"($P2234)
+.annotate 'line', 780
+    .return ($P2235)
+  control_2201:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2224, exception, "payload"
-    .return ($P2224)
+    getattribute $P2236, exception, "payload"
+    .return ($P2236)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<$>"  :subid("122_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2228
-.annotate 'line', 802
-    new $P2227, 'ExceptionHandler'
-    set_addr $P2227, control_2226
-    $P2227."handle_types"(.CONTROL_RETURN)
-    push_eh $P2227
+.sub "quote_escape:sym<$>"  :subid("122_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2240
+.annotate 'line', 803
+    new $P2239, 'ExceptionHandler'
+    set_addr $P2239, control_2238
+    $P2239."handle_types"(.CONTROL_RETURN)
+    push_eh $P2239
     .lex "self", self
-    .lex "$/", param_2228
-    find_lex $P2229, "$/"
-    find_lex $P2230, "$/"
-    unless_null $P2230, vivify_650
-    $P2230 = root_new ['parrot';'Hash']
+    .lex "$/", param_2240
+    find_lex $P2241, "$/"
+    find_lex $P2242, "$/"
+    unless_null $P2242, vivify_650
+    $P2242 = root_new ['parrot';'Hash']
   vivify_650:
-    set $P2231, $P2230["variable"]
-    unless_null $P2231, vivify_651
-    new $P2231, "Undef"
+    set $P2243, $P2242["variable"]
+    unless_null $P2243, vivify_651
+    new $P2243, "Undef"
   vivify_651:
-    $P2232 = $P2231."ast"()
-    $P2233 = $P2229."!make"($P2232)
-    .return ($P2233)
-  control_2226:
+    $P2244 = $P2243."ast"()
+    $P2245 = $P2241."!make"($P2244)
+    .return ($P2245)
+  control_2238:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2234, exception, "payload"
-    .return ($P2234)
+    getattribute $P2246, exception, "payload"
+    .return ($P2246)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<{ }>"  :subid("123_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2238
-.annotate 'line', 803
-    new $P2237, 'ExceptionHandler'
-    set_addr $P2237, control_2236
-    $P2237."handle_types"(.CONTROL_RETURN)
-    push_eh $P2237
-    .lex "self", self
-    .lex "$/", param_2238
+.sub "quote_escape:sym<{ }>"  :subid("123_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2250
 .annotate 'line', 804
-    find_lex $P2239, "$/"
-    get_hll_global $P2240, ["PAST"], "Op"
+    new $P2249, 'ExceptionHandler'
+    set_addr $P2249, control_2248
+    $P2249."handle_types"(.CONTROL_RETURN)
+    push_eh $P2249
+    .lex "self", self
+    .lex "$/", param_2250
 .annotate 'line', 805
-    find_lex $P2241, "$/"
-    unless_null $P2241, vivify_652
-    $P2241 = root_new ['parrot';'Hash']
+    find_lex $P2251, "$/"
+    get_hll_global $P2252, ["PAST"], "Op"
+.annotate 'line', 806
+    find_lex $P2253, "$/"
+    unless_null $P2253, vivify_652
+    $P2253 = root_new ['parrot';'Hash']
   vivify_652:
-    set $P2242, $P2241["block"]
-    unless_null $P2242, vivify_653
-    new $P2242, "Undef"
+    set $P2254, $P2253["block"]
+    unless_null $P2254, vivify_653
+    new $P2254, "Undef"
   vivify_653:
-    $P2243 = $P2242."ast"()
-    $P2244 = "block_immediate"($P2243)
-    find_lex $P2245, "$/"
-    $P2246 = $P2240."new"($P2244, "set S*" :named("pirop"), $P2245 :named("node"))
+    $P2255 = $P2254."ast"()
+    $P2256 = "block_immediate"($P2255)
+    find_lex $P2257, "$/"
+    $P2258 = $P2252."new"($P2256, "set S*" :named("pirop"), $P2257 :named("node"))
+.annotate 'line', 805
+    $P2259 = $P2251."!make"($P2258)
 .annotate 'line', 804
-    $P2247 = $P2239."!make"($P2246)
-.annotate 'line', 803
-    .return ($P2247)
-  control_2236:
+    .return ($P2259)
+  control_2248:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2248, exception, "payload"
-    .return ($P2248)
+    getattribute $P2260, exception, "payload"
+    .return ($P2260)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<esc>"  :subid("124_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2252
-.annotate 'line', 808
-    new $P2251, 'ExceptionHandler'
-    set_addr $P2251, control_2250
-    $P2251."handle_types"(.CONTROL_RETURN)
-    push_eh $P2251
+.sub "quote_escape:sym<esc>"  :subid("124_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2264
+.annotate 'line', 809
+    new $P2263, 'ExceptionHandler'
+    set_addr $P2263, control_2262
+    $P2263."handle_types"(.CONTROL_RETURN)
+    push_eh $P2263
     .lex "self", self
-    .lex "$/", param_2252
-    find_lex $P2253, "$/"
-    $P2254 = $P2253."!make"("\e")
-    .return ($P2254)
-  control_2250:
+    .lex "$/", param_2264
+    find_lex $P2265, "$/"
+    $P2266 = $P2265."!make"("\e")
+    .return ($P2266)
+  control_2262:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2255, exception, "payload"
-    .return ($P2255)
+    getattribute $P2267, exception, "payload"
+    .return ($P2267)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postfix:sym<.>"  :subid("125_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2259
-.annotate 'line', 812
-    new $P2258, 'ExceptionHandler'
-    set_addr $P2258, control_2257
-    $P2258."handle_types"(.CONTROL_RETURN)
-    push_eh $P2258
+.sub "postfix:sym<.>"  :subid("125_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2271
+.annotate 'line', 813
+    new $P2270, 'ExceptionHandler'
+    set_addr $P2270, control_2269
+    $P2270."handle_types"(.CONTROL_RETURN)
+    push_eh $P2270
     .lex "self", self
-    .lex "$/", param_2259
-    find_lex $P2260, "$/"
-    find_lex $P2261, "$/"
-    unless_null $P2261, vivify_654
-    $P2261 = root_new ['parrot';'Hash']
+    .lex "$/", param_2271
+    find_lex $P2272, "$/"
+    find_lex $P2273, "$/"
+    unless_null $P2273, vivify_654
+    $P2273 = root_new ['parrot';'Hash']
   vivify_654:
-    set $P2262, $P2261["dotty"]
-    unless_null $P2262, vivify_655
-    new $P2262, "Undef"
+    set $P2274, $P2273["dotty"]
+    unless_null $P2274, vivify_655
+    new $P2274, "Undef"
   vivify_655:
-    $P2263 = $P2262."ast"()
-    $P2264 = $P2260."!make"($P2263)
-    .return ($P2264)
-  control_2257:
+    $P2275 = $P2274."ast"()
+    $P2276 = $P2272."!make"($P2275)
+    .return ($P2276)
+  control_2269:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2265, exception, "payload"
-    .return ($P2265)
+    getattribute $P2277, exception, "payload"
+    .return ($P2277)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postfix:sym<++>"  :subid("126_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2269
-.annotate 'line', 814
-    new $P2268, 'ExceptionHandler'
-    set_addr $P2268, control_2267
-    $P2268."handle_types"(.CONTROL_RETURN)
-    push_eh $P2268
-    .lex "self", self
-    .lex "$/", param_2269
+.sub "postfix:sym<++>"  :subid("126_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2281
 .annotate 'line', 815
-    find_lex $P2270, "$/"
-    get_hll_global $P2271, ["PAST"], "Op"
+    new $P2280, 'ExceptionHandler'
+    set_addr $P2280, control_2279
+    $P2280."handle_types"(.CONTROL_RETURN)
+    push_eh $P2280
+    .lex "self", self
+    .lex "$/", param_2281
+.annotate 'line', 816
+    find_lex $P2282, "$/"
+    get_hll_global $P2283, ["PAST"], "Op"
+.annotate 'line', 817
+    new $P2284, "ResizablePMCArray"
+    push $P2284, "    clone %r, %0"
+    push $P2284, "    inc %0"
+    $P2285 = $P2283."new"("postfix:<++>" :named("name"), $P2284 :named("inline"), "inline" :named("pasttype"))
 .annotate 'line', 816
-    new $P2272, "ResizablePMCArray"
-    push $P2272, "    clone %r, %0"
-    push $P2272, "    inc %0"
-    $P2273 = $P2271."new"("postfix:<++>" :named("name"), $P2272 :named("inline"), "inline" :named("pasttype"))
+    $P2286 = $P2282."!make"($P2285)
 .annotate 'line', 815
-    $P2274 = $P2270."!make"($P2273)
-.annotate 'line', 814
-    .return ($P2274)
-  control_2267:
+    .return ($P2286)
+  control_2279:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2275, exception, "payload"
-    .return ($P2275)
+    getattribute $P2287, exception, "payload"
+    .return ($P2287)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postfix:sym<-->"  :subid("127_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2279
-.annotate 'line', 820
-    new $P2278, 'ExceptionHandler'
-    set_addr $P2278, control_2277
-    $P2278."handle_types"(.CONTROL_RETURN)
-    push_eh $P2278
-    .lex "self", self
-    .lex "$/", param_2279
+.sub "postfix:sym<-->"  :subid("127_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2291
 .annotate 'line', 821
-    find_lex $P2280, "$/"
-    get_hll_global $P2281, ["PAST"], "Op"
+    new $P2290, 'ExceptionHandler'
+    set_addr $P2290, control_2289
+    $P2290."handle_types"(.CONTROL_RETURN)
+    push_eh $P2290
+    .lex "self", self
+    .lex "$/", param_2291
+.annotate 'line', 822
+    find_lex $P2292, "$/"
+    get_hll_global $P2293, ["PAST"], "Op"
+.annotate 'line', 823
+    new $P2294, "ResizablePMCArray"
+    push $P2294, "    clone %r, %0"
+    push $P2294, "    dec %0"
+    $P2295 = $P2293."new"("postfix:<-->" :named("name"), $P2294 :named("inline"), "inline" :named("pasttype"))
 .annotate 'line', 822
-    new $P2282, "ResizablePMCArray"
-    push $P2282, "    clone %r, %0"
-    push $P2282, "    dec %0"
-    $P2283 = $P2281."new"("postfix:<-->" :named("name"), $P2282 :named("inline"), "inline" :named("pasttype"))
+    $P2296 = $P2292."!make"($P2295)
 .annotate 'line', 821
-    $P2284 = $P2280."!make"($P2283)
-.annotate 'line', 820
-    .return ($P2284)
-  control_2277:
+    .return ($P2296)
+  control_2289:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2285, exception, "payload"
-    .return ($P2285)
+    getattribute $P2297, exception, "payload"
+    .return ($P2297)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "prefix:sym<make>"  :subid("128_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2289
-.annotate 'line', 826
-    new $P2288, 'ExceptionHandler'
-    set_addr $P2288, control_2287
-    $P2288."handle_types"(.CONTROL_RETURN)
-    push_eh $P2288
-    .lex "self", self
-    .lex "$/", param_2289
+.sub "prefix:sym<make>"  :subid("128_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2301
 .annotate 'line', 827
-    find_lex $P2290, "$/"
-    get_hll_global $P2291, ["PAST"], "Op"
+    new $P2300, 'ExceptionHandler'
+    set_addr $P2300, control_2299
+    $P2300."handle_types"(.CONTROL_RETURN)
+    push_eh $P2300
+    .lex "self", self
+    .lex "$/", param_2301
 .annotate 'line', 828
-    get_hll_global $P2292, ["PAST"], "Var"
-    $P2293 = $P2292."new"("$/" :named("name"), "contextual" :named("scope"))
-    find_lex $P2294, "$/"
-    $P2295 = $P2291."new"($P2293, "callmethod" :named("pasttype"), "!make" :named("name"), $P2294 :named("node"))
+    find_lex $P2302, "$/"
+    get_hll_global $P2303, ["PAST"], "Op"
+.annotate 'line', 829
+    get_hll_global $P2304, ["PAST"], "Var"
+    $P2305 = $P2304."new"("$/" :named("name"), "contextual" :named("scope"))
+    find_lex $P2306, "$/"
+    $P2307 = $P2303."new"($P2305, "callmethod" :named("pasttype"), "!make" :named("name"), $P2306 :named("node"))
+.annotate 'line', 828
+    $P2308 = $P2302."!make"($P2307)
 .annotate 'line', 827
-    $P2296 = $P2290."!make"($P2295)
-.annotate 'line', 826
-    .return ($P2296)
-  control_2287:
+    .return ($P2308)
+  control_2299:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2297, exception, "payload"
-    .return ($P2297)
+    getattribute $P2309, exception, "payload"
+    .return ($P2309)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<next>"  :subid("129_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2302
-.annotate 'line', 844
-    new $P2301, 'ExceptionHandler'
-    set_addr $P2301, control_2300
-    $P2301."handle_types"(.CONTROL_RETURN)
-    push_eh $P2301
+.sub "term:sym<next>"  :subid("129_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2314
+.annotate 'line', 845
+    new $P2313, 'ExceptionHandler'
+    set_addr $P2313, control_2312
+    $P2313."handle_types"(.CONTROL_RETURN)
+    push_eh $P2313
     .lex "self", self
-    .lex "$/", param_2302
-    find_lex $P2303, "$/"
-    $P2304 = "control"($P2303, "CONTROL_LOOP_NEXT")
-    .return ($P2304)
-  control_2300:
+    .lex "$/", param_2314
+    find_lex $P2315, "$/"
+    $P2316 = "control"($P2315, "CONTROL_LOOP_NEXT")
+    .return ($P2316)
+  control_2312:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2305, exception, "payload"
-    .return ($P2305)
+    getattribute $P2317, exception, "payload"
+    .return ($P2317)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<last>"  :subid("130_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2309
-.annotate 'line', 845
-    new $P2308, 'ExceptionHandler'
-    set_addr $P2308, control_2307
-    $P2308."handle_types"(.CONTROL_RETURN)
-    push_eh $P2308
+.sub "term:sym<last>"  :subid("130_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2321
+.annotate 'line', 846
+    new $P2320, 'ExceptionHandler'
+    set_addr $P2320, control_2319
+    $P2320."handle_types"(.CONTROL_RETURN)
+    push_eh $P2320
     .lex "self", self
-    .lex "$/", param_2309
-    find_lex $P2310, "$/"
-    $P2311 = "control"($P2310, "CONTROL_LOOP_LAST")
-    .return ($P2311)
-  control_2307:
+    .lex "$/", param_2321
+    find_lex $P2322, "$/"
+    $P2323 = "control"($P2322, "CONTROL_LOOP_LAST")
+    .return ($P2323)
+  control_2319:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2312, exception, "payload"
-    .return ($P2312)
+    getattribute $P2324, exception, "payload"
+    .return ($P2324)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<redo>"  :subid("131_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2316
-.annotate 'line', 846
-    new $P2315, 'ExceptionHandler'
-    set_addr $P2315, control_2314
-    $P2315."handle_types"(.CONTROL_RETURN)
-    push_eh $P2315
+.sub "term:sym<redo>"  :subid("131_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2328
+.annotate 'line', 847
+    new $P2327, 'ExceptionHandler'
+    set_addr $P2327, control_2326
+    $P2327."handle_types"(.CONTROL_RETURN)
+    push_eh $P2327
     .lex "self", self
-    .lex "$/", param_2316
-    find_lex $P2317, "$/"
-    $P2318 = "control"($P2317, "CONTROL_LOOP_REDO")
-    .return ($P2318)
-  control_2314:
+    .lex "$/", param_2328
+    find_lex $P2329, "$/"
+    $P2330 = "control"($P2329, "CONTROL_LOOP_REDO")
+    .return ($P2330)
+  control_2326:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2319, exception, "payload"
-    .return ($P2319)
+    getattribute $P2331, exception, "payload"
+    .return ($P2331)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "infix:sym<~~>"  :subid("132_1280467483.70067") :method :outer("11_1280467483.70067")
-    .param pmc param_2323
-.annotate 'line', 848
-    new $P2322, 'ExceptionHandler'
-    set_addr $P2322, control_2321
-    $P2322."handle_types"(.CONTROL_RETURN)
-    push_eh $P2322
+.sub "infix:sym<~~>"  :subid("132_1283368216.90714") :method :outer("11_1283368216.90714")
+    .param pmc param_2335
+.annotate 'line', 849
+    new $P2334, 'ExceptionHandler'
+    set_addr $P2334, control_2333
+    $P2334."handle_types"(.CONTROL_RETURN)
+    push_eh $P2334
     .lex "self", self
-    .lex "$/", param_2323
+    .lex "$/", param_2335
+.annotate 'line', 850
+    find_lex $P2336, "$/"
+    get_hll_global $P2337, ["PAST"], "Op"
+    find_lex $P2338, "$/"
+    $P2339 = $P2337."new"("callmethod" :named("pasttype"), "ACCEPTS" :named("name"), $P2338 :named("node"))
+    $P2340 = $P2336."!make"($P2339)
 .annotate 'line', 849
-    find_lex $P2324, "$/"
-    get_hll_global $P2325, ["PAST"], "Op"
-    find_lex $P2326, "$/"
-    $P2327 = $P2325."new"("callmethod" :named("pasttype"), "ACCEPTS" :named("name"), $P2326 :named("node"))
-    $P2328 = $P2324."!make"($P2327)
-.annotate 'line', 848
-    .return ($P2328)
-  control_2321:
+    .return ($P2340)
+  control_2333:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2329, exception, "payload"
-    .return ($P2329)
+    getattribute $P2341, exception, "payload"
+    .return ($P2341)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "_block2330"  :subid("133_1280467483.70067") :outer("11_1280467483.70067")
-.annotate 'line', 853
-    .const 'Sub' $P2416 = "140_1280467483.70067" 
-    capture_lex $P2416
-    .const 'Sub' $P2403 = "139_1280467483.70067" 
-    capture_lex $P2403
-    .const 'Sub' $P2386 = "138_1280467483.70067" 
-    capture_lex $P2386
-    .const 'Sub' $P2373 = "137_1280467483.70067" 
-    capture_lex $P2373
-    .const 'Sub' $P2360 = "136_1280467483.70067" 
-    capture_lex $P2360
-    .const 'Sub' $P2347 = "135_1280467483.70067" 
-    capture_lex $P2347
-    .const 'Sub' $P2332 = "134_1280467483.70067" 
-    capture_lex $P2332
-.annotate 'line', 887
-    .const 'Sub' $P2416 = "140_1280467483.70067" 
-    newclosure $P2441, $P2416
-.annotate 'line', 853
-    .return ($P2441)
+.sub "_block2342"  :subid("133_1283368216.90714") :outer("11_1283368216.90714")
+.annotate 'line', 854
+    .const 'Sub' $P2428 = "140_1283368216.90714" 
+    capture_lex $P2428
+    .const 'Sub' $P2415 = "139_1283368216.90714" 
+    capture_lex $P2415
+    .const 'Sub' $P2398 = "138_1283368216.90714" 
+    capture_lex $P2398
+    .const 'Sub' $P2385 = "137_1283368216.90714" 
+    capture_lex $P2385
+    .const 'Sub' $P2372 = "136_1283368216.90714" 
+    capture_lex $P2372
+    .const 'Sub' $P2359 = "135_1283368216.90714" 
+    capture_lex $P2359
+    .const 'Sub' $P2344 = "134_1283368216.90714" 
+    capture_lex $P2344
+.annotate 'line', 888
+    .const 'Sub' $P2428 = "140_1283368216.90714" 
+    newclosure $P2453, $P2428
+.annotate 'line', 854
+    .return ($P2453)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "metachar:sym<:my>"  :subid("134_1280467483.70067") :method :outer("133_1280467483.70067")
-    .param pmc param_2335
-.annotate 'line', 855
-    new $P2334, 'ExceptionHandler'
-    set_addr $P2334, control_2333
-    $P2334."handle_types"(.CONTROL_RETURN)
-    push_eh $P2334
-    .lex "self", self
-    .lex "$/", param_2335
+.sub "metachar:sym<:my>"  :subid("134_1283368216.90714") :method :outer("133_1283368216.90714")
+    .param pmc param_2347
 .annotate 'line', 856
-    new $P2336, "Undef"
-    .lex "$past", $P2336
-    find_lex $P2337, "$/"
-    unless_null $P2337, vivify_656
-    $P2337 = root_new ['parrot';'Hash']
+    new $P2346, 'ExceptionHandler'
+    set_addr $P2346, control_2345
+    $P2346."handle_types"(.CONTROL_RETURN)
+    push_eh $P2346
+    .lex "self", self
+    .lex "$/", param_2347
+.annotate 'line', 857
+    new $P2348, "Undef"
+    .lex "$past", $P2348
+    find_lex $P2349, "$/"
+    unless_null $P2349, vivify_656
+    $P2349 = root_new ['parrot';'Hash']
   vivify_656:
-    set $P2338, $P2337["statement"]
-    unless_null $P2338, vivify_657
-    new $P2338, "Undef"
+    set $P2350, $P2349["statement"]
+    unless_null $P2350, vivify_657
+    new $P2350, "Undef"
   vivify_657:
-    $P2339 = $P2338."ast"()
-    store_lex "$past", $P2339
-.annotate 'line', 857
-    find_lex $P2340, "$/"
-    get_hll_global $P2341, ["PAST"], "Regex"
-    find_lex $P2342, "$past"
-    find_lex $P2343, "$/"
-    $P2344 = $P2341."new"($P2342, "pastnode" :named("pasttype"), "declarative" :named("subtype"), $P2343 :named("node"))
-    $P2345 = $P2340."!make"($P2344)
-.annotate 'line', 855
-    .return ($P2345)
-  control_2333:
+    $P2351 = $P2350."ast"()
+    store_lex "$past", $P2351
+.annotate 'line', 858
+    find_lex $P2352, "$/"
+    get_hll_global $P2353, ["PAST"], "Regex"
+    find_lex $P2354, "$past"
+    find_lex $P2355, "$/"
+    $P2356 = $P2353."new"($P2354, "pastnode" :named("pasttype"), "declarative" :named("subtype"), $P2355 :named("node"))
+    $P2357 = $P2352."!make"($P2356)
+.annotate 'line', 856
+    .return ($P2357)
+  control_2345:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2346, exception, "payload"
-    .return ($P2346)
+    getattribute $P2358, exception, "payload"
+    .return ($P2358)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "metachar:sym<{ }>"  :subid("135_1280467483.70067") :method :outer("133_1280467483.70067")
-    .param pmc param_2350
-.annotate 'line', 861
-    new $P2349, 'ExceptionHandler'
-    set_addr $P2349, control_2348
-    $P2349."handle_types"(.CONTROL_RETURN)
-    push_eh $P2349
-    .lex "self", self
-    .lex "$/", param_2350
+.sub "metachar:sym<{ }>"  :subid("135_1283368216.90714") :method :outer("133_1283368216.90714")
+    .param pmc param_2362
 .annotate 'line', 862
-    find_lex $P2351, "$/"
-    get_hll_global $P2352, ["PAST"], "Regex"
-    find_lex $P2353, "$/"
-    unless_null $P2353, vivify_658
-    $P2353 = root_new ['parrot';'Hash']
+    new $P2361, 'ExceptionHandler'
+    set_addr $P2361, control_2360
+    $P2361."handle_types"(.CONTROL_RETURN)
+    push_eh $P2361
+    .lex "self", self
+    .lex "$/", param_2362
+.annotate 'line', 863
+    find_lex $P2363, "$/"
+    get_hll_global $P2364, ["PAST"], "Regex"
+    find_lex $P2365, "$/"
+    unless_null $P2365, vivify_658
+    $P2365 = root_new ['parrot';'Hash']
   vivify_658:
-    set $P2354, $P2353["codeblock"]
-    unless_null $P2354, vivify_659
-    new $P2354, "Undef"
+    set $P2366, $P2365["codeblock"]
+    unless_null $P2366, vivify_659
+    new $P2366, "Undef"
   vivify_659:
-    $P2355 = $P2354."ast"()
-    find_lex $P2356, "$/"
-    $P2357 = $P2352."new"($P2355, "pastnode" :named("pasttype"), $P2356 :named("node"))
-    $P2358 = $P2351."!make"($P2357)
-.annotate 'line', 861
-    .return ($P2358)
-  control_2348:
+    $P2367 = $P2366."ast"()
+    find_lex $P2368, "$/"
+    $P2369 = $P2364."new"($P2367, "pastnode" :named("pasttype"), $P2368 :named("node"))
+    $P2370 = $P2363."!make"($P2369)
+.annotate 'line', 862
+    .return ($P2370)
+  control_2360:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2359, exception, "payload"
-    .return ($P2359)
+    getattribute $P2371, exception, "payload"
+    .return ($P2371)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "metachar:sym<nqpvar>"  :subid("136_1280467483.70067") :method :outer("133_1280467483.70067")
-    .param pmc param_2363
-.annotate 'line', 866
-    new $P2362, 'ExceptionHandler'
-    set_addr $P2362, control_2361
-    $P2362."handle_types"(.CONTROL_RETURN)
-    push_eh $P2362
-    .lex "self", self
-    .lex "$/", param_2363
+.sub "metachar:sym<nqpvar>"  :subid("136_1283368216.90714") :method :outer("133_1283368216.90714")
+    .param pmc param_2375
 .annotate 'line', 867
-    find_lex $P2364, "$/"
-    get_hll_global $P2365, ["PAST"], "Regex"
-    find_lex $P2366, "$/"
-    unless_null $P2366, vivify_660
-    $P2366 = root_new ['parrot';'Hash']
+    new $P2374, 'ExceptionHandler'
+    set_addr $P2374, control_2373
+    $P2374."handle_types"(.CONTROL_RETURN)
+    push_eh $P2374
+    .lex "self", self
+    .lex "$/", param_2375
+.annotate 'line', 868
+    find_lex $P2376, "$/"
+    get_hll_global $P2377, ["PAST"], "Regex"
+    find_lex $P2378, "$/"
+    unless_null $P2378, vivify_660
+    $P2378 = root_new ['parrot';'Hash']
   vivify_660:
-    set $P2367, $P2366["var"]
-    unless_null $P2367, vivify_661
-    new $P2367, "Undef"
+    set $P2379, $P2378["var"]
+    unless_null $P2379, vivify_661
+    new $P2379, "Undef"
   vivify_661:
-    $P2368 = $P2367."ast"()
-    find_lex $P2369, "$/"
-    $P2370 = $P2365."new"("!INTERPOLATE", $P2368, "subrule" :named("pasttype"), "method" :named("subtype"), $P2369 :named("node"))
-    $P2371 = $P2364."!make"($P2370)
-.annotate 'line', 866
-    .return ($P2371)
-  control_2361:
+    $P2380 = $P2379."ast"()
+    find_lex $P2381, "$/"
+    $P2382 = $P2377."new"("!INTERPOLATE", $P2380, "subrule" :named("pasttype"), "method" :named("subtype"), $P2381 :named("node"))
+    $P2383 = $P2376."!make"($P2382)
+.annotate 'line', 867
+    .return ($P2383)
+  control_2373:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2372, exception, "payload"
-    .return ($P2372)
+    getattribute $P2384, exception, "payload"
+    .return ($P2384)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "assertion:sym<{ }>"  :subid("137_1280467483.70067") :method :outer("133_1280467483.70067")
-    .param pmc param_2376
-.annotate 'line', 871
-    new $P2375, 'ExceptionHandler'
-    set_addr $P2375, control_2374
-    $P2375."handle_types"(.CONTROL_RETURN)
-    push_eh $P2375
-    .lex "self", self
-    .lex "$/", param_2376
+.sub "assertion:sym<{ }>"  :subid("137_1283368216.90714") :method :outer("133_1283368216.90714")
+    .param pmc param_2388
 .annotate 'line', 872
-    find_lex $P2377, "$/"
-    get_hll_global $P2378, ["PAST"], "Regex"
-    find_lex $P2379, "$/"
-    unless_null $P2379, vivify_662
-    $P2379 = root_new ['parrot';'Hash']
+    new $P2387, 'ExceptionHandler'
+    set_addr $P2387, control_2386
+    $P2387."handle_types"(.CONTROL_RETURN)
+    push_eh $P2387
+    .lex "self", self
+    .lex "$/", param_2388
+.annotate 'line', 873
+    find_lex $P2389, "$/"
+    get_hll_global $P2390, ["PAST"], "Regex"
+    find_lex $P2391, "$/"
+    unless_null $P2391, vivify_662
+    $P2391 = root_new ['parrot';'Hash']
   vivify_662:
-    set $P2380, $P2379["codeblock"]
-    unless_null $P2380, vivify_663
-    new $P2380, "Undef"
+    set $P2392, $P2391["codeblock"]
+    unless_null $P2392, vivify_663
+    new $P2392, "Undef"
   vivify_663:
-    $P2381 = $P2380."ast"()
-    find_lex $P2382, "$/"
-    $P2383 = $P2378."new"("!INTERPOLATE_REGEX", $P2381, "subrule" :named("pasttype"), "method" :named("subtype"), $P2382 :named("node"))
-    $P2384 = $P2377."!make"($P2383)
-.annotate 'line', 871
-    .return ($P2384)
-  control_2374:
+    $P2393 = $P2392."ast"()
+    find_lex $P2394, "$/"
+    $P2395 = $P2390."new"("!INTERPOLATE_REGEX", $P2393, "subrule" :named("pasttype"), "method" :named("subtype"), $P2394 :named("node"))
+    $P2396 = $P2389."!make"($P2395)
+.annotate 'line', 872
+    .return ($P2396)
+  control_2386:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2385, exception, "payload"
-    .return ($P2385)
+    getattribute $P2397, exception, "payload"
+    .return ($P2397)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "assertion:sym<?{ }>"  :subid("138_1280467483.70067") :method :outer("133_1280467483.70067")
-    .param pmc param_2389
-.annotate 'line', 876
-    new $P2388, 'ExceptionHandler'
-    set_addr $P2388, control_2387
-    $P2388."handle_types"(.CONTROL_RETURN)
-    push_eh $P2388
-    .lex "self", self
-    .lex "$/", param_2389
+.sub "assertion:sym<?{ }>"  :subid("138_1283368216.90714") :method :outer("133_1283368216.90714")
+    .param pmc param_2401
 .annotate 'line', 877
-    find_lex $P2390, "$/"
-    get_hll_global $P2391, ["PAST"], "Regex"
-    find_lex $P2392, "$/"
-    unless_null $P2392, vivify_664
-    $P2392 = root_new ['parrot';'Hash']
+    new $P2400, 'ExceptionHandler'
+    set_addr $P2400, control_2399
+    $P2400."handle_types"(.CONTROL_RETURN)
+    push_eh $P2400
+    .lex "self", self
+    .lex "$/", param_2401
+.annotate 'line', 878
+    find_lex $P2402, "$/"
+    get_hll_global $P2403, ["PAST"], "Regex"
+    find_lex $P2404, "$/"
+    unless_null $P2404, vivify_664
+    $P2404 = root_new ['parrot';'Hash']
   vivify_664:
-    set $P2393, $P2392["codeblock"]
-    unless_null $P2393, vivify_665
-    new $P2393, "Undef"
+    set $P2405, $P2404["codeblock"]
+    unless_null $P2405, vivify_665
+    new $P2405, "Undef"
   vivify_665:
-    $P2394 = $P2393."ast"()
-.annotate 'line', 878
-    find_lex $P2395, "$/"
-    unless_null $P2395, vivify_666
-    $P2395 = root_new ['parrot';'Hash']
+    $P2406 = $P2405."ast"()
+.annotate 'line', 879
+    find_lex $P2407, "$/"
+    unless_null $P2407, vivify_666
+    $P2407 = root_new ['parrot';'Hash']
   vivify_666:
-    set $P2396, $P2395["zw"]
-    unless_null $P2396, vivify_667
-    new $P2396, "Undef"
+    set $P2408, $P2407["zw"]
+    unless_null $P2408, vivify_667
+    new $P2408, "Undef"
   vivify_667:
-    set $S2397, $P2396
-    iseq $I2398, $S2397, "!"
-    find_lex $P2399, "$/"
-    $P2400 = $P2391."new"($P2394, "zerowidth" :named("subtype"), $I2398 :named("negate"), "pastnode" :named("pasttype"), $P2399 :named("node"))
+    set $S2409, $P2408
+    iseq $I2410, $S2409, "!"
+    find_lex $P2411, "$/"
+    $P2412 = $P2403."new"($P2406, "zerowidth" :named("subtype"), $I2410 :named("negate"), "pastnode" :named("pasttype"), $P2411 :named("node"))
+.annotate 'line', 878
+    $P2413 = $P2402."!make"($P2412)
 .annotate 'line', 877
-    $P2401 = $P2390."!make"($P2400)
-.annotate 'line', 876
-    .return ($P2401)
-  control_2387:
+    .return ($P2413)
+  control_2399:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2402, exception, "payload"
-    .return ($P2402)
+    getattribute $P2414, exception, "payload"
+    .return ($P2414)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "assertion:sym<var>"  :subid("139_1280467483.70067") :method :outer("133_1280467483.70067")
-    .param pmc param_2406
-.annotate 'line', 882
-    new $P2405, 'ExceptionHandler'
-    set_addr $P2405, control_2404
-    $P2405."handle_types"(.CONTROL_RETURN)
-    push_eh $P2405
-    .lex "self", self
-    .lex "$/", param_2406
+.sub "assertion:sym<var>"  :subid("139_1283368216.90714") :method :outer("133_1283368216.90714")
+    .param pmc param_2418
 .annotate 'line', 883
-    find_lex $P2407, "$/"
-    get_hll_global $P2408, ["PAST"], "Regex"
-    find_lex $P2409, "$/"
-    unless_null $P2409, vivify_668
-    $P2409 = root_new ['parrot';'Hash']
+    new $P2417, 'ExceptionHandler'
+    set_addr $P2417, control_2416
+    $P2417."handle_types"(.CONTROL_RETURN)
+    push_eh $P2417
+    .lex "self", self
+    .lex "$/", param_2418
+.annotate 'line', 884
+    find_lex $P2419, "$/"
+    get_hll_global $P2420, ["PAST"], "Regex"
+    find_lex $P2421, "$/"
+    unless_null $P2421, vivify_668
+    $P2421 = root_new ['parrot';'Hash']
   vivify_668:
-    set $P2410, $P2409["var"]
-    unless_null $P2410, vivify_669
-    new $P2410, "Undef"
+    set $P2422, $P2421["var"]
+    unless_null $P2422, vivify_669
+    new $P2422, "Undef"
   vivify_669:
-    $P2411 = $P2410."ast"()
-    find_lex $P2412, "$/"
-    $P2413 = $P2408."new"("!INTERPOLATE_REGEX", $P2411, "subrule" :named("pasttype"), "method" :named("subtype"), $P2412 :named("node"))
-    $P2414 = $P2407."!make"($P2413)
-.annotate 'line', 882
-    .return ($P2414)
-  control_2404:
+    $P2423 = $P2422."ast"()
+    find_lex $P2424, "$/"
+    $P2425 = $P2420."new"("!INTERPOLATE_REGEX", $P2423, "subrule" :named("pasttype"), "method" :named("subtype"), $P2424 :named("node"))
+    $P2426 = $P2419."!make"($P2425)
+.annotate 'line', 883
+    .return ($P2426)
+  control_2416:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2415, exception, "payload"
-    .return ($P2415)
+    getattribute $P2427, exception, "payload"
+    .return ($P2427)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "codeblock"  :subid("140_1280467483.70067") :method :outer("133_1280467483.70067")
-    .param pmc param_2419
-.annotate 'line', 887
-    new $P2418, 'ExceptionHandler'
-    set_addr $P2418, control_2417
-    $P2418."handle_types"(.CONTROL_RETURN)
-    push_eh $P2418
-    .lex "self", self
-    .lex "$/", param_2419
-.annotate 'line', 888
-    new $P2420, "Undef"
-    .lex "$block", $P2420
-.annotate 'line', 890
-    new $P2421, "Undef"
-    .lex "$past", $P2421
+.sub "codeblock"  :subid("140_1283368216.90714") :method :outer("133_1283368216.90714")
+    .param pmc param_2431
 .annotate 'line', 888
-    find_lex $P2422, "$/"
-    unless_null $P2422, vivify_670
-    $P2422 = root_new ['parrot';'Hash']
-  vivify_670:
-    set $P2423, $P2422["block"]
-    unless_null $P2423, vivify_671
-    new $P2423, "Undef"
-  vivify_671:
-    $P2424 = $P2423."ast"()
-    store_lex "$block", $P2424
+    new $P2430, 'ExceptionHandler'
+    set_addr $P2430, control_2429
+    $P2430."handle_types"(.CONTROL_RETURN)
+    push_eh $P2430
+    .lex "self", self
+    .lex "$/", param_2431
 .annotate 'line', 889
-    find_lex $P2425, "$block"
-    $P2425."blocktype"("immediate")
+    new $P2432, "Undef"
+    .lex "$block", $P2432
 .annotate 'line', 891
-    get_hll_global $P2426, ["PAST"], "Stmts"
+    new $P2433, "Undef"
+    .lex "$past", $P2433
+.annotate 'line', 889
+    find_lex $P2434, "$/"
+    unless_null $P2434, vivify_670
+    $P2434 = root_new ['parrot';'Hash']
+  vivify_670:
+    set $P2435, $P2434["block"]
+    unless_null $P2435, vivify_671
+    new $P2435, "Undef"
+  vivify_671:
+    $P2436 = $P2435."ast"()
+    store_lex "$block", $P2436
+.annotate 'line', 890
+    find_lex $P2437, "$block"
+    $P2437."blocktype"("immediate")
 .annotate 'line', 892
-    get_hll_global $P2427, ["PAST"], "Op"
+    get_hll_global $P2438, ["PAST"], "Stmts"
 .annotate 'line', 893
-    get_hll_global $P2428, ["PAST"], "Var"
-    $P2429 = $P2428."new"("$/" :named("name"))
+    get_hll_global $P2439, ["PAST"], "Op"
 .annotate 'line', 894
-    get_hll_global $P2430, ["PAST"], "Op"
+    get_hll_global $P2440, ["PAST"], "Var"
+    $P2441 = $P2440."new"("$/" :named("name"))
 .annotate 'line', 895
-    get_hll_global $P2431, ["PAST"], "Var"
-    $P2432 = $P2431."new"(unicode:"$\x{a2}" :named("name"))
-    $P2433 = $P2430."new"($P2432, "MATCH" :named("name"), "callmethod" :named("pasttype"))
-.annotate 'line', 894
-    $P2434 = $P2427."new"($P2429, $P2433, "bind" :named("pasttype"))
+    get_hll_global $P2442, ["PAST"], "Op"
+.annotate 'line', 896
+    get_hll_global $P2443, ["PAST"], "Var"
+    $P2444 = $P2443."new"(unicode:"$\x{a2}" :named("name"))
+    $P2445 = $P2442."new"($P2444, "MATCH" :named("name"), "callmethod" :named("pasttype"))
+.annotate 'line', 895
+    $P2446 = $P2439."new"($P2441, $P2445, "bind" :named("pasttype"))
+.annotate 'line', 893
+    find_lex $P2447, "$block"
+    $P2448 = $P2438."new"($P2446, $P2447)
 .annotate 'line', 892
-    find_lex $P2435, "$block"
-    $P2436 = $P2426."new"($P2434, $P2435)
-.annotate 'line', 891
-    store_lex "$past", $P2436
-.annotate 'line', 903
-    find_lex $P2437, "$/"
-    find_lex $P2438, "$past"
-    $P2439 = $P2437."!make"($P2438)
-.annotate 'line', 887
-    .return ($P2439)
-  control_2417:
+    store_lex "$past", $P2448
+.annotate 'line', 904
+    find_lex $P2449, "$/"
+    find_lex $P2450, "$past"
+    $P2451 = $P2449."!make"($P2450)
+.annotate 'line', 888
+    .return ($P2451)
+  control_2429:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2440, exception, "payload"
-    .return ($P2440)
+    getattribute $P2452, exception, "payload"
+    .return ($P2452)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2443" :load :anon :subid("141_1280467483.70067")
+.sub "_block2455" :load :anon :subid("141_1283368216.90714")
 .annotate 'line', 3
-    .const 'Sub' $P2445 = "11_1280467483.70067" 
-    $P2446 = $P2445()
-    .return ($P2446)
+    .const 'Sub' $P2457 = "11_1283368216.90714" 
+    $P2458 = $P2457()
+    .return ($P2458)
 .end
 
 
 .namespace []
-.sub "_block2453" :load :anon :subid("143_1280467483.70067")
+.sub "_block2465" :load :anon :subid("143_1283368216.90714")
 .annotate 'line', 1
-    .const 'Sub' $P2455 = "10_1280467483.70067" 
-    $P2456 = $P2455()
-    .return ($P2456)
+    .const 'Sub' $P2467 = "10_1283368216.90714" 
+    $P2468 = $P2467()
+    .return ($P2468)
 .end
 
 ### .include 'src/cheats/nqp-builtins.pir'

Modified: branches/gc_massacre/ext/nqp-rx/src/stage0/P6Regex-s0.pir
==============================================================================
--- branches/gc_massacre/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -16,7 +16,7 @@
 ### .include 'gen/p6regex-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467470.54449")
+.sub "_block11"  :anon :subid("10_1283368197.39621")
 .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_1283368197.39621" 
+    .return ($P583)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post162") :outer("10_1280467470.54449")
+.sub "" :load :init :subid("post164") :outer("10_1283368197.39621")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467470.54449" 
+    .const 'Sub' $P12 = "10_1283368197.39621" 
     .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_1283368197.39621") :outer("10_1283368197.39621")
 .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_1283368197.39621" 
+    capture_lex $P570
+    .const 'Sub' $P563 = "158_1283368197.39621" 
+    capture_lex $P563
+    .const 'Sub' $P556 = "156_1283368197.39621" 
+    capture_lex $P556
+    .const 'Sub' $P536 = "151_1283368197.39621" 
+    capture_lex $P536
+    .const 'Sub' $P502 = "145_1283368197.39621" 
+    capture_lex $P502
+    .const 'Sub' $P490 = "142_1283368197.39621" 
+    capture_lex $P490
+    .const 'Sub' $P478 = "139_1283368197.39621" 
+    capture_lex $P478
+    .const 'Sub' $P472 = "137_1283368197.39621" 
+    capture_lex $P472
+    .const 'Sub' $P461 = "134_1283368197.39621" 
+    capture_lex $P461
+    .const 'Sub' $P450 = "131_1283368197.39621" 
+    capture_lex $P450
+    .const 'Sub' $P441 = "127_1283368197.39621" 
     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_1283368197.39621" 
+    capture_lex $P435
+    .const 'Sub' $P429 = "123_1283368197.39621" 
+    capture_lex $P429
+    .const 'Sub' $P423 = "121_1283368197.39621" 
+    capture_lex $P423
+    .const 'Sub' $P417 = "119_1283368197.39621" 
+    capture_lex $P417
+    .const 'Sub' $P409 = "117_1283368197.39621" 
+    capture_lex $P409
+    .const 'Sub' $P398 = "115_1283368197.39621" 
+    capture_lex $P398
+    .const 'Sub' $P387 = "113_1283368197.39621" 
+    capture_lex $P387
+    .const 'Sub' $P381 = "111_1283368197.39621" 
+    capture_lex $P381
+    .const 'Sub' $P375 = "109_1283368197.39621" 
+    capture_lex $P375
+    .const 'Sub' $P369 = "107_1283368197.39621" 
+    capture_lex $P369
+    .const 'Sub' $P363 = "105_1283368197.39621" 
+    capture_lex $P363
+    .const 'Sub' $P357 = "103_1283368197.39621" 
+    capture_lex $P357
+    .const 'Sub' $P351 = "101_1283368197.39621" 
+    capture_lex $P351
+    .const 'Sub' $P345 = "99_1283368197.39621" 
+    capture_lex $P345
+    .const 'Sub' $P339 = "97_1283368197.39621" 
+    capture_lex $P339
+    .const 'Sub' $P327 = "93_1283368197.39621" 
+    capture_lex $P327
+    .const 'Sub' $P317 = "91_1283368197.39621" 
+    capture_lex $P317
+    .const 'Sub' $P310 = "89_1283368197.39621" 
+    capture_lex $P310
+    .const 'Sub' $P298 = "87_1283368197.39621" 
+    capture_lex $P298
+    .const 'Sub' $P291 = "85_1283368197.39621" 
+    capture_lex $P291
+    .const 'Sub' $P285 = "83_1283368197.39621" 
+    capture_lex $P285
+    .const 'Sub' $P279 = "81_1283368197.39621" 
+    capture_lex $P279
+    .const 'Sub' $P272 = "79_1283368197.39621" 
+    capture_lex $P272
+    .const 'Sub' $P265 = "77_1283368197.39621" 
+    capture_lex $P265
+    .const 'Sub' $P258 = "75_1283368197.39621" 
+    capture_lex $P258
+    .const 'Sub' $P251 = "73_1283368197.39621" 
+    capture_lex $P251
+    .const 'Sub' $P245 = "71_1283368197.39621" 
+    capture_lex $P245
+    .const 'Sub' $P239 = "69_1283368197.39621" 
+    capture_lex $P239
+    .const 'Sub' $P233 = "67_1283368197.39621" 
+    capture_lex $P233
+    .const 'Sub' $P227 = "65_1283368197.39621" 
+    capture_lex $P227
+    .const 'Sub' $P221 = "63_1283368197.39621" 
+    capture_lex $P221
+    .const 'Sub' $P216 = "61_1283368197.39621" 
+    capture_lex $P216
+    .const 'Sub' $P211 = "59_1283368197.39621" 
+    capture_lex $P211
+    .const 'Sub' $P205 = "57_1283368197.39621" 
+    capture_lex $P205
+    .const 'Sub' $P199 = "55_1283368197.39621" 
+    capture_lex $P199
+    .const 'Sub' $P193 = "53_1283368197.39621" 
+    capture_lex $P193
+    .const 'Sub' $P178 = "48_1283368197.39621" 
+    capture_lex $P178
+    .const 'Sub' $P163 = "46_1283368197.39621" 
+    capture_lex $P163
+    .const 'Sub' $P156 = "44_1283368197.39621" 
+    capture_lex $P156
+    .const 'Sub' $P149 = "42_1283368197.39621" 
+    capture_lex $P149
+    .const 'Sub' $P142 = "40_1283368197.39621" 
+    capture_lex $P142
+    .const 'Sub' $P125 = "35_1283368197.39621" 
+    capture_lex $P125
+    .const 'Sub' $P113 = "32_1283368197.39621" 
+    capture_lex $P113
+    .const 'Sub' $P106 = "30_1283368197.39621" 
+    capture_lex $P106
+    .const 'Sub' $P97 = "28_1283368197.39621" 
     capture_lex $P97
-    .const 'Sub' $P87 = "26_1280467470.54449" 
+    .const 'Sub' $P87 = "26_1283368197.39621" 
     capture_lex $P87
-    .const 'Sub' $P80 = "24_1280467470.54449" 
+    .const 'Sub' $P80 = "24_1283368197.39621" 
     capture_lex $P80
-    .const 'Sub' $P68 = "22_1280467470.54449" 
+    .const 'Sub' $P68 = "22_1283368197.39621" 
     capture_lex $P68
-    .const 'Sub' $P61 = "20_1280467470.54449" 
+    .const 'Sub' $P61 = "20_1283368197.39621" 
     capture_lex $P61
-    .const 'Sub' $P54 = "18_1280467470.54449" 
+    .const 'Sub' $P54 = "18_1283368197.39621" 
     capture_lex $P54
-    .const 'Sub' $P44 = "15_1280467470.54449" 
+    .const 'Sub' $P44 = "15_1283368197.39621" 
     capture_lex $P44
-    .const 'Sub' $P37 = "13_1280467470.54449" 
+    .const 'Sub' $P37 = "13_1283368197.39621" 
     capture_lex $P37
-    .const 'Sub' $P15 = "12_1280467470.54449" 
+    .const 'Sub' $P15 = "12_1283368197.39621" 
     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_1283368197.39621" 
+    capture_lex $P570
+    .return ($P570)
+    .const 'Sub' $P578 = "162_1283368197.39621" 
+    .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_1283368197.39621") :method :outer("11_1283368197.39621")
     .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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .annotate 'line', 3
-    .const 'Sub' $P50 = "17_1280467470.54449" 
+    .const 'Sub' $P50 = "17_1283368197.39621" 
     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_1283368197.39621" 
     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_1283368197.39621") :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_1283368197.39621") :method :outer("15_1283368197.39621")
 .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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.annotate 'line', 3
+    .const 'Sub' $P122 = "34_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :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_1283368197.39621") :method :outer("32_1283368197.39621")
+.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_1283368197.39621") :method :outer("11_1283368197.39621")
+.annotate 'line', 3
+    .const 'Sub' $P135 = "37_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :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_1283368197.39621") :method :outer("35_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P166, "ResizablePMCArray"
+    push $P166, "**"
+    .return ($P166)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backmod"  :subid("48_1283368197.39621") :method :outer("11_1283368197.39621")
+.annotate 'line', 3
+    .const 'Sub' $P186 = "50_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :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_1283368197.39621") :method :outer("48_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P214, "ResizablePMCArray"
+    push $P214, "'"
+    .return ($P214)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<\">"  :subid("61_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P219, "ResizablePMCArray"
+    push $P219, "\""
+    .return ($P219)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<.>"  :subid("63_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P224, "ResizablePMCArray"
+    push $P224, "."
+    .return ($P224)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<^>"  :subid("65_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P230, "ResizablePMCArray"
+    push $P230, "^"
+    .return ($P230)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<^^>"  :subid("67_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P236, "ResizablePMCArray"
+    push $P236, "^^"
+    .return ($P236)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<$>"  :subid("69_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P242, "ResizablePMCArray"
+    push $P242, "$"
+    .return ($P242)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<$$>"  :subid("71_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P301, "ResizablePMCArray"
+    push $P301, "{*}"
+    .return ($P301)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<assert>"  :subid("89_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P320, "ResizablePMCArray"
+    push $P320, "$"
+    push $P320, "$<"
+    .return ($P320)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<PIR>"  :subid("93_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :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_1283368197.39621") :method
+.annotate 'line', 147
+    $P447 = self."!protoregex"("assertion")
+    .return ($P447)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__assertion"  :subid("130_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :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_1283368197.39621") :method :outer("131_1283368197.39621")
+.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_1283368197.39621") :method :outer("11_1283368197.39621")
+.annotate 'line', 3
+    .const 'Sub' $P469 = "136_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :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_1283368197.39621") :method :outer("134_1283368197.39621")
+.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_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
+.annotate 'line', 3
+    .const 'Sub' $P487 = "141_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :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_1283368197.39621") :method :outer("139_1283368197.39621")
+.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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P493, "ResizablePMCArray"
+    push $P493, ""
+    .return ($P493)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "_block495"  :anon :subid("144_1283368197.39621") :method :outer("142_1283368197.39621")
+.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_1283368197.39621") :method :outer("11_1283368197.39621")
+.annotate 'line', 3
+    .const 'Sub' $P514 = "147_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :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_1283368197.39621") :method :outer("145_1283368197.39621")
+.annotate 'line', 173
+    .const 'Sub' $P529 = "150_1283368197.39621" 
+    capture_lex $P529
+    .const 'Sub' $P524 = "149_1283368197.39621" 
+    capture_lex $P524
+    .const 'Sub' $P520 = "148_1283368197.39621" 
     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_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :method :outer("147_1283368197.39621")
+.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_1283368197.39621") :method :outer("147_1283368197.39621")
+.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_1283368197.39621") :method :outer("147_1283368197.39621")
+.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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621" 
+    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_1283368197.39621" 
+    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_1283368197.39621") :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_1283368197.39621") :method :outer("151_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 190
+    $P553 = self."!protoregex"("mod_ident")
+    .return ($P553)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__mod_ident"  :subid("155_1283368197.39621") :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_1283368197.39621") :method :outer("11_1283368197.39621")
 .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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P559, "ResizablePMCArray"
+    push $P559, "i"
+    .return ($P559)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_ident:sym<ratchet>"  :subid("158_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :method
+.annotate 'line', 3
+    new $P566, "ResizablePMCArray"
+    push $P566, "r"
+    .return ($P566)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_ident:sym<sigspace>"  :subid("160_1283368197.39621") :method :outer("11_1283368197.39621")
+.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_1283368197.39621") :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_1283368197.39621")
 .annotate 'line', 3
-    .const 'Sub' $P570 = "11_1280467470.54449" 
-    $P571 = $P570()
-    .return ($P571)
+    .const 'Sub' $P579 = "11_1283368197.39621" 
+    $P580 = $P579()
+    .return ($P580)
 .end
 
 
 .namespace []
-.sub "_block573" :load :anon :subid("161_1280467470.54449")
+.sub "_block582" :load :anon :subid("163_1283368197.39621")
 .annotate 'line', 1
-    .const 'Sub' $P575 = "10_1280467470.54449" 
-    $P576 = $P575()
-    .return ($P576)
+    .const 'Sub' $P584 = "10_1283368197.39621" 
+    $P585 = $P584()
+    .return ($P585)
 .end
 
 ### .include 'gen/p6regex-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1280467473.99327")
+.sub "_block11"  :anon :subid("10_1283368202.55748")
 .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_1283368202.55748" 
+    .return ($P1673)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post93") :outer("10_1280467473.99327")
+.sub "" :load :init :subid("post95") :outer("10_1283368202.55748")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1280467473.99327" 
+    .const 'Sub' $P12 = "10_1283368202.55748" 
     .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_1283368202.55748") :outer("10_1283368202.55748")
 .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_1283368202.55748" 
+    capture_lex $P1648
+    .const 'Sub' $P1628 = "91_1283368202.55748" 
+    capture_lex $P1628
+    .const 'Sub' $P1596 = "90_1283368202.55748" 
+    capture_lex $P1596
+    .const 'Sub' $P1527 = "86_1283368202.55748" 
+    capture_lex $P1527
+    .const 'Sub' $P1459 = "84_1283368202.55748" 
+    capture_lex $P1459
+    .const 'Sub' $P1387 = "81_1283368202.55748" 
+    capture_lex $P1387
+    .const 'Sub' $P1373 = "80_1283368202.55748" 
+    capture_lex $P1373
+    .const 'Sub' $P1349 = "79_1283368202.55748" 
+    capture_lex $P1349
+    .const 'Sub' $P1331 = "78_1283368202.55748" 
+    capture_lex $P1331
+    .const 'Sub' $P1317 = "77_1283368202.55748" 
+    capture_lex $P1317
+    .const 'Sub' $P1304 = "76_1283368202.55748" 
+    capture_lex $P1304
+    .const 'Sub' $P1273 = "75_1283368202.55748" 
+    capture_lex $P1273
+    .const 'Sub' $P1242 = "74_1283368202.55748" 
+    capture_lex $P1242
+    .const 'Sub' $P1226 = "73_1283368202.55748" 
+    capture_lex $P1226
+    .const 'Sub' $P1210 = "72_1283368202.55748" 
+    capture_lex $P1210
+    .const 'Sub' $P1194 = "71_1283368202.55748" 
+    capture_lex $P1194
+    .const 'Sub' $P1178 = "70_1283368202.55748" 
+    capture_lex $P1178
+    .const 'Sub' $P1162 = "69_1283368202.55748" 
+    capture_lex $P1162
+    .const 'Sub' $P1146 = "68_1283368202.55748" 
+    capture_lex $P1146
+    .const 'Sub' $P1130 = "67_1283368202.55748" 
+    capture_lex $P1130
+    .const 'Sub' $P1106 = "66_1283368202.55748" 
+    capture_lex $P1106
+    .const 'Sub' $P1091 = "65_1283368202.55748" 
+    capture_lex $P1091
+    .const 'Sub' $P1033 = "64_1283368202.55748" 
+    capture_lex $P1033
+    .const 'Sub' $P1012 = "63_1283368202.55748" 
+    capture_lex $P1012
+    .const 'Sub' $P990 = "62_1283368202.55748" 
+    capture_lex $P990
+    .const 'Sub' $P980 = "61_1283368202.55748" 
+    capture_lex $P980
+    .const 'Sub' $P970 = "60_1283368202.55748" 
+    capture_lex $P970
+    .const 'Sub' $P960 = "59_1283368202.55748" 
+    capture_lex $P960
+    .const 'Sub' $P948 = "58_1283368202.55748" 
+    capture_lex $P948
+    .const 'Sub' $P936 = "57_1283368202.55748" 
+    capture_lex $P936
+    .const 'Sub' $P924 = "56_1283368202.55748" 
+    capture_lex $P924
+    .const 'Sub' $P912 = "55_1283368202.55748" 
+    capture_lex $P912
+    .const 'Sub' $P900 = "54_1283368202.55748" 
+    capture_lex $P900
+    .const 'Sub' $P888 = "53_1283368202.55748" 
+    capture_lex $P888
+    .const 'Sub' $P876 = "52_1283368202.55748" 
+    capture_lex $P876
+    .const 'Sub' $P864 = "51_1283368202.55748" 
+    capture_lex $P864
+    .const 'Sub' $P836 = "50_1283368202.55748" 
+    capture_lex $P836
+    .const 'Sub' $P808 = "49_1283368202.55748" 
+    capture_lex $P808
+    .const 'Sub' $P790 = "48_1283368202.55748" 
+    capture_lex $P790
+    .const 'Sub' $P780 = "47_1283368202.55748" 
+    capture_lex $P780
+    .const 'Sub' $P762 = "46_1283368202.55748" 
+    capture_lex $P762
+    .const 'Sub' $P689 = "44_1283368202.55748" 
+    capture_lex $P689
+    .const 'Sub' $P672 = "43_1283368202.55748" 
+    capture_lex $P672
+    .const 'Sub' $P657 = "42_1283368202.55748" 
+    capture_lex $P657
+    .const 'Sub' $P642 = "41_1283368202.55748" 
+    capture_lex $P642
+    .const 'Sub' $P616 = "40_1283368202.55748" 
+    capture_lex $P616
+    .const 'Sub' $P565 = "38_1283368202.55748" 
+    capture_lex $P565
+    .const 'Sub' $P497 = "36_1283368202.55748" 
+    capture_lex $P497
+    .const 'Sub' $P460 = "34_1283368202.55748" 
     capture_lex $P460
-    .const 'Sub' $P404 = "31_1280467473.99327" 
+    .const 'Sub' $P404 = "31_1283368202.55748" 
     capture_lex $P404
-    .const 'Sub' $P389 = "30_1280467473.99327" 
+    .const 'Sub' $P389 = "30_1283368202.55748" 
     capture_lex $P389
-    .const 'Sub' $P363 = "28_1280467473.99327" 
+    .const 'Sub' $P363 = "28_1283368202.55748" 
     capture_lex $P363
-    .const 'Sub' $P346 = "27_1280467473.99327" 
+    .const 'Sub' $P346 = "27_1283368202.55748" 
     capture_lex $P346
-    .const 'Sub' $P312 = "26_1280467473.99327" 
+    .const 'Sub' $P312 = "26_1283368202.55748" 
     capture_lex $P312
-    .const 'Sub' $P57 = "13_1280467473.99327" 
+    .const 'Sub' $P57 = "13_1283368202.55748" 
     capture_lex $P57
-    .const 'Sub' $P16 = "12_1280467473.99327" 
+    .const 'Sub' $P16 = "12_1283368202.55748" 
     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_1283368202.55748" 
     newclosure $P56, $P16
     .lex "buildsub", $P56
-.annotate 'line', 510
-    .const 'Sub' $P57 = "13_1280467473.99327" 
+.annotate 'line', 524
+    .const 'Sub' $P57 = "13_1283368202.55748" 
     newclosure $P311, $P57
     .lex "capnames", $P311
-.annotate 'line', 576
-    .const 'Sub' $P312 = "26_1280467473.99327" 
+.annotate 'line', 590
+    .const 'Sub' $P312 = "26_1283368202.55748" 
     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_1283368202.55748" 
+    newclosure $P1665, $P1648
 .annotate 'line', 4
-    .return ($P1628)
-    .const 'Sub' $P1630 = "91_1280467473.99327" 
-    .return ($P1630)
+    .return ($P1665)
+    .const 'Sub' $P1667 = "93_1283368202.55748" 
+    .return ($P1667)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "" :load :init :subid("post94") :outer("11_1280467473.99327")
+.sub "" :load :init :subid("post96") :outer("11_1283368202.55748")
 .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_1283368202.55748") :outer("11_1283368202.55748")
     .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_1283368202.55748") :outer("11_1283368202.55748")
     .param pmc param_60
     .param pmc param_61
-.annotate 'line', 510
-    .const 'Sub' $P286 = "24_1280467473.99327" 
+.annotate 'line', 524
+    .const 'Sub' $P286 = "24_1283368202.55748" 
     capture_lex $P286
-    .const 'Sub' $P223 = "21_1280467473.99327" 
+    .const 'Sub' $P223 = "21_1283368202.55748" 
     capture_lex $P223
-    .const 'Sub' $P181 = "19_1280467473.99327" 
+    .const 'Sub' $P181 = "19_1283368202.55748" 
     capture_lex $P181
-    .const 'Sub' $P139 = "17_1280467473.99327" 
+    .const 'Sub' $P139 = "17_1283368202.55748" 
     capture_lex $P139
-    .const 'Sub' $P72 = "14_1280467473.99327" 
+    .const 'Sub' $P72 = "14_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748") :outer("13_1283368202.55748")
+.annotate 'line', 579
+    .const 'Sub' $P297 = "25_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748") :outer("24_1283368202.55748")
     .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_1283368202.55748") :outer("13_1283368202.55748")
+.annotate 'line', 562
+    .const 'Sub' $P263 = "23_1283368202.55748" 
     capture_lex $P263
-    .const 'Sub' $P235 = "22_1280467473.99327" 
+    .const 'Sub' $P235 = "22_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748") :outer("21_1283368202.55748")
     .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_1283368202.55748") :outer("21_1283368202.55748")
     .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_1283368202.55748") :outer("13_1283368202.55748")
+.annotate 'line', 549
+    .const 'Sub' $P199 = "20_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748") :outer("19_1283368202.55748")
     .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_1283368202.55748") :outer("13_1283368202.55748")
     .param pmc param_141
-.annotate 'line', 527
-    .const 'Sub' $P150 = "18_1280467473.99327" 
+.annotate 'line', 541
+    .const 'Sub' $P150 = "18_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748") :outer("17_1283368202.55748")
     .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_1283368202.55748") :outer("13_1283368202.55748")
+.annotate 'line', 527
+    .const 'Sub' $P81 = "15_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748") :outer("14_1283368202.55748")
     .param pmc param_83
-.annotate 'line', 515
-    .const 'Sub' $P92 = "16_1280467473.99327" 
+.annotate 'line', 529
+    .const 'Sub' $P92 = "16_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748") :outer("15_1283368202.55748")
     .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_1283368202.55748") :outer("11_1283368202.55748")
     .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_1283368202.55748") :method :outer("11_1283368202.55748")
     .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_1283368202.55748") :method :outer("11_1283368202.55748")
     .param pmc param_366
 .annotate 'line', 18
-    .const 'Sub' $P376 = "29_1280467473.99327" 
+    .const 'Sub' $P376 = "29_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748") :outer("28_1283368202.55748")
     .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_1283368202.55748") :method :outer("11_1283368202.55748")
     .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_1283368202.55748") :method :outer("11_1283368202.55748")
     .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_1283368202.55748" 
     capture_lex $P443
-    .const 'Sub' $P416 = "32_1280467473.99327" 
+    .const 'Sub' $P416 = "32_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748" 
     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_1283368202.55748") :outer("31_1283368202.55748")
 .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_1283368202.55748") :outer("31_1283368202.55748")
     .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_1283368202.55748") :method :outer("11_1283368202.55748")
     .param pmc param_463
 .annotate 'line', 52
-    .const 'Sub' $P476 = "35_1280467473.99327" 
-    capture_lex $P476
+    .const 'Sub' $P480 = "35_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748") :outer("34_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748") :outer("36_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .param pmc param_568
+.annotate 'line', 87
+    .const 'Sub' $P577 = "39_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748") :outer("38_1283368202.55748")
+.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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .param pmc param_692
+.annotate 'line', 128
+    .const 'Sub' $P707 = "45_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748") :outer("44_1283368202.55748")
+.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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .param pmc param_1390
+.annotate 'line', 400
+    .const 'Sub' $P1447 = "83_1283368202.55748" 
+    capture_lex $P1447
+    .const 'Sub' $P1413 = "82_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748") :outer("81_1283368202.55748")
+    .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_1283368202.55748") :outer("81_1283368202.55748")
+.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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748") :outer("84_1283368202.55748")
+.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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .param pmc param_1530
+.annotate 'line', 461
+    .const 'Sub' $P1555 = "88_1283368202.55748" 
+    capture_lex $P1555
+    .const 'Sub' $P1539 = "87_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748") :outer("86_1283368202.55748")
+    .param pmc param_1556
+.annotate 'line', 468
+    .const 'Sub' $P1562 = "89_1283368202.55748" 
+    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_1283368202.55748" 
+    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_1283368202.55748") :outer("88_1283368202.55748")
+.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_1283368202.55748") :outer("86_1283368202.55748")
+.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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748") :method :outer("11_1283368202.55748")
+    .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_1283368202.55748")
 .annotate 'line', 4
-    .const 'Sub' $P1631 = "11_1280467473.99327" 
-    $P1632 = $P1631()
-    .return ($P1632)
+    .const 'Sub' $P1668 = "11_1283368202.55748" 
+    $P1669 = $P1668()
+    .return ($P1669)
 .end
 
 
 .namespace []
-.sub "_block1635" :load :anon :subid("92_1280467473.99327")
+.sub "_block1672" :load :anon :subid("94_1283368202.55748")
 .annotate 'line', 1
-    .const 'Sub' $P1637 = "10_1280467473.99327" 
-    $P1638 = $P1637()
-    .return ($P1638)
+    .const 'Sub' $P1674 = "10_1283368202.55748" 
+    $P1675 = $P1674()
+    .return ($P1675)
 .end
 
 # .include 'src/cheats/p6regex-grammar.pir'

Modified: branches/gc_massacre/ext/nqp-rx/src/stage0/Regex-s0.pir
==============================================================================
--- branches/gc_massacre/ext/nqp-rx/src/stage0/Regex-s0.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/ext/nqp-rx/src/stage0/Regex-s0.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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
 
@@ -1058,11 +1074,23 @@
     .local int pos
     .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', name)
+  debug_1:
     $I0 = is_cclass cclass, tgt, pos
     unless $I0 goto fail
     inc pos
+  pass:
     cur.'!cursor_pass'(pos, name)
+    if null debug goto done
+    cur.'!cursor_debug'('PASS', name)
+    goto done
   fail:
+    if null debug goto done
+    cur.'!cursor_debug'('FAIL', name)
+  done:
     .return (cur)
 .end
 
@@ -1071,6 +1099,11 @@
     .local int pos
     .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', 'alpha')
+  debug_1:
     $I0 = is_cclass .CCLASS_ALPHABETIC, tgt, pos
     if $I0 goto pass
 
@@ -1082,7 +1115,13 @@
   pass:
     inc pos
     cur.'!cursor_pass'(pos, 'alpha')
+    if null debug goto done
+    cur.'!cursor_debug'('PASS', 'alpha')
+    goto done
   fail:
+    if null debug goto done
+    cur.'!cursor_debug'('FAIL', 'alpha')
+  done:
     .return (cur)
 .end
 
@@ -1197,11 +1236,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 +1267,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 +1318,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 +1392,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 +2552,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 +2596,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 +2629,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 +2652,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 +2665,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 +2689,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 +2723,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 +3140,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 +3260,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 +3374,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 +3391,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 +3460,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/gc_massacre/ext/nqp-rx/src/stage0/nqp-setting.nqp
==============================================================================
--- branches/gc_massacre/ext/nqp-rx/src/stage0/nqp-setting.nqp	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/ext/nqp-rx/src/stage0/nqp-setting.nqp	Sun Sep  5 13:20:27 2010	(r48799)
@@ -213,6 +213,36 @@
     ~$result;
 }
 
+=begin item split
+Splits C<$text> on occurences of C<$regex>
+=end item
+
+# our sub split ($regex, $text) {
+#     my $pos := 0;
+#     my @result;
+#     my $looking := 1;
+#     while $looking {
+#         my $match :=
+#             Regex::Cursor.parse($text, :rule($regex), :c($pos)) ;
+# 
+#         if ?$match {
+#             my $from := $match.from();
+#             my $to := $match.to();
+#             my $prefix := pir::substr__sPii($text, $pos, $from-$pos);
+#             @result.push($prefix);
+#             $pos := $match.to();
+#         } else {
+#             my $len := pir::length($text);
+#             if $pos < $len {
+#                 @result.push(pir::substr__ssi($text, $pos) );
+#             }
+#             $looking := 0;
+#         }
+#     }
+#     return @result;
+# }
+
+
 # vim: ft=perl6
 # From src/setting/IO.pm
 

Modified: branches/gc_massacre/include/parrot/call.h
==============================================================================
--- branches/gc_massacre/include/parrot/call.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/call.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -29,6 +29,7 @@
                                              * jump buffer stack */
     opcode_t                *handler_start; /* Used in exception handling */
     int                      id;            /* runloop id */
+    PMC                     *exception;     /* Reference to the exception object */
 
     /* let the biggest element cross the cacheline boundary */
     Parrot_jump_buff         resume;        /* jmp_buf */
@@ -301,12 +302,11 @@
     PARROT_ASSERT((sig)->vtable->base_type == enum_class_FixedIntegerArray); \
 } while (0)
 
-/* XXX Remove interp from this */
 #define ADD_OP_VAR_PART(interp, seg, pc, n) do { \
-    if (*(pc) == PARROT_OP_set_args_pc       \
-    ||  *(pc) == PARROT_OP_get_results_pc    \
-    ||  *(pc) == PARROT_OP_get_params_pc     \
-    ||  *(pc) == PARROT_OP_set_returns_pc) { \
+    if (OPCODE_IS((interp), (seg), *(pc), PARROT_OP_set_args_pc)       \
+    ||  OPCODE_IS((interp), (seg), *(pc), PARROT_OP_get_results_pc)    \
+    ||  OPCODE_IS((interp), (seg), *(pc), PARROT_OP_get_params_pc)     \
+    ||  OPCODE_IS((interp), (seg), *(pc), PARROT_OP_set_returns_pc)) { \
         PMC * const sig = (seg)->const_table->constants[(pc)[1]].u.key; \
         (n) += VTABLE_elements((interp), sig); \
     } \
@@ -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/gc_massacre/include/parrot/encoding.h
==============================================================================
--- branches/gc_massacre/include/parrot/encoding.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/encoding.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/include/parrot/hash.h
==============================================================================
--- branches/gc_massacre/include/parrot/hash.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/hash.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -11,19 +11,18 @@
 
 typedef enum {
     enum_hash_undef,
-    enum_hash_int = enum_type_INTVAL,
-    enum_hash_num = enum_type_FLOATVAL,
+    enum_hash_int    = enum_type_INTVAL,
+    enum_hash_num    = enum_type_FLOATVAL,
     enum_hash_string = enum_type_STRING,
-    enum_hash_pmc = enum_type_PMC,
-    enum_hash_ptr = enum_type_ptr
+    enum_hash_pmc    = enum_type_PMC,
+    enum_hash_ptr    = enum_type_ptr
 } HashEntryType;
 
 
 /* A BucketIndex is an index into the pool of available buckets. */
 typedef UINTVAL BucketIndex;
-#define INITBucketIndex ((BucketIndex)-2)
 
-#define N_BUCKETS(n) ((n) - (n)/4)
+#define N_BUCKETS(n) ((n))
 #define HASH_ALLOC_SIZE(n) (N_BUCKETS(n) * sizeof (HashBucket) + \
                                      (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;
@@ -62,9 +61,6 @@
     /* alloced - 1 */
     UINTVAL mask;
 
-    /* The owner PMC */
-    PMC *container;
-
     /* The type of key object this hash uses */
     Hash_key_type key_type;
 
@@ -81,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 */
@@ -149,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,
@@ -177,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)
@@ -213,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)
@@ -324,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);
@@ -373,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),
@@ -382,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 = (\
@@ -427,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))
@@ -451,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))
@@ -503,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) \
@@ -522,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/gc_massacre/include/parrot/interpreter.h
==============================================================================
--- branches/gc_massacre/include/parrot/interpreter.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/interpreter.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -503,24 +503,26 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-void register_nci_method(PARROT_INTERP,
+void register_native_pcc_method_in_ns(PARROT_INTERP,
     const int type,
     ARGIN(void *func),
-    ARGIN(const char *name),
-    ARGIN(const char *proto))
+    ARGIN(STRING *name),
+    ARGIN(STRING *signature))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
         __attribute__nonnull__(5);
 
 PARROT_EXPORT
-void register_raw_nci_method_in_ns(PARROT_INTERP,
+void register_nci_method(PARROT_INTERP,
     const int type,
     ARGIN(void *func),
-    ARGIN(STRING *name))
+    ARGIN(const char *name),
+    ARGIN(const char *proto))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
-        __attribute__nonnull__(4);
+        __attribute__nonnull__(4)
+        __attribute__nonnull__(5);
 
 #define ASSERT_ARGS_interpinfo __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -539,15 +541,17 @@
 #define ASSERT_ARGS_Parrot_mark_method_writes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_register_nci_method __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_register_native_pcc_method_in_ns \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(func) \
     , PARROT_ASSERT_ARG(name) \
-    , PARROT_ASSERT_ARG(proto))
-#define ASSERT_ARGS_register_raw_nci_method_in_ns __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+    , PARROT_ASSERT_ARG(signature))
+#define ASSERT_ARGS_register_nci_method __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(func) \
-    , PARROT_ASSERT_ARG(name))
+    , PARROT_ASSERT_ARG(name) \
+    , PARROT_ASSERT_ARG(proto))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/interp/inter_misc.c */
 

Modified: branches/gc_massacre/include/parrot/io.h
==============================================================================
--- branches/gc_massacre/include/parrot/io.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/io.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/include/parrot/memory.h
==============================================================================
--- branches/gc_massacre/include/parrot/memory.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/memory.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -17,20 +17,33 @@
 /* Use these macros instead of calling the functions listed below. */
 /* They protect against things like passing null to mem__sys_realloc, */
 /* which is not portable. */
-#define mem_internal_allocate(x) mem__internal_allocate((x), __FILE__, __LINE__)
-#define mem_internal_allocate_typed(type) \
-    (type *)mem__internal_allocate(sizeof (type), __FILE__, __LINE__)
-#define mem_internal_allocate_zeroed(x) mem__internal_allocate_zeroed((x), \
-    __FILE__, __LINE__)
+
+/* It was decided that having a second set of memory allocation functions
+   is a waste. These macros were rewritten to use the much more prevalent
+   mem_sys_* functions and then the mem__internal_* functions were
+   eliminated. */
+
+#define mem_internal_allocate(x) mem_sys_allocate(x)
+
+#define mem_internal_allocate_typed(type) (type *)mem_sys_allocate(sizeof (type))
+
+#define mem_internal_allocate_zeroed(x) mem_sys_allocate_zeroed(x)
+
 #define mem_internal_allocate_zeroed_typed(type) \
-    (type *)mem__internal_allocate_zeroed(sizeof (type), __FILE__, __LINE__)
+    (type *)mem_sys_allocate_zeroed(sizeof (type))
+
 #define mem_internal_allocate_n_zeroed_typed(n, type) \
-    (type *)mem__internal_allocate_zeroed((n) * sizeof (type), __FILE__, __LINE__)
+    (type *)mem_sys_allocate_zeroed((n) * sizeof (type))
+
+#define mem_internal_realloc(x, y) mem_sys_realloc((x), (y))
+
+#define mem_internal_realloc_zeroed(p, x, y) mem_sys_realloc_zeroed((p), (x), (y))
+
+#define mem_internal_realloc_n_zeroed_typed(p, x, y, type) \
+  (type *)mem_sys_realloc_zeroed((p), (x) * sizeof (type), (y) * sizeof (type))
+
+#define mem_internal_free(x) mem_sys_free(x)
 
-#define mem_internal_realloc(x, y) mem__internal_realloc((x), (y), __FILE__, __LINE__)
-#define mem_internal_realloc_zeroed(p, x, y) mem__internal_realloc_zeroed((p), (x), (y), __FILE__, __LINE__)
-#define mem_internal_realloc_n_zeroed_typed(p, x, y, type) (type *)mem__internal_realloc_zeroed((p), (x) * sizeof (type), (y) * sizeof (type), __FILE__, __LINE__)
-#define mem_internal_free(x) mem__internal_free((x), __FILE__, __LINE__)
 
 #define mem_sys_memcopy memcpy
 #define mem_sys_memmove memmove
@@ -93,47 +106,6 @@
 char * mem_sys_strdup(ARGIN(const char *src))
         __attribute__nonnull__(1);
 
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void * mem__internal_allocate(
-    size_t size,
-    ARGIN(const char *file),
-    int line)
-        __attribute__nonnull__(2);
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void * mem__internal_allocate_zeroed(
-    size_t size,
-    ARGIN(const char *file),
-    int line)
-        __attribute__nonnull__(2);
-
-void mem__internal_free(
-    ARGFREE(void *from),
-    ARGIN(const char *file),
-    int line)
-        __attribute__nonnull__(2);
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void * mem__internal_realloc(
-    ARGFREE(void *from),
-    size_t size,
-    ARGIN(const char *file),
-    int line)
-        __attribute__nonnull__(3);
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void * mem__internal_realloc_zeroed(
-    ARGFREE(void *from),
-    size_t size,
-    size_t old_size,
-    ARGIN(const char *file),
-    int line)
-        __attribute__nonnull__(4);
-
 #define ASSERT_ARGS_mem_sys_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_mem_sys_allocate_zeroed __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_mem_sys_free __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -141,16 +113,6 @@
 #define ASSERT_ARGS_mem_sys_realloc_zeroed __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_mem_sys_strdup __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_mem__internal_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(file))
-#define ASSERT_ARGS_mem__internal_allocate_zeroed __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(file))
-#define ASSERT_ARGS_mem__internal_free __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(file))
-#define ASSERT_ARGS_mem__internal_realloc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(file))
-#define ASSERT_ARGS_mem__internal_realloc_zeroed __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(file))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/gc/alloc_memory.c */
 

Modified: branches/gc_massacre/include/parrot/namespace.h
==============================================================================
--- branches/gc_massacre/include/parrot/namespace.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/namespace.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -19,14 +19,6 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-PMC * Parrot_find_global_s(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *str_key),
-    ARGIN_NULLOK(STRING *globalname))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
 PMC * Parrot_ns_find_current_namespace_global(PARROT_INTERP,
     ARGIN_NULLOK(STRING *globalname))
         __attribute__nonnull__(1);
@@ -138,15 +130,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_EXPORT
-void Parrot_store_global_s(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *str_key),
-    ARGIN_NULLOK(STRING *globalname),
-    ARGIN_NULLOK(PMC *val))
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_find_global_s __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_ns_find_current_namespace_global \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -192,8 +175,6 @@
 #define ASSERT_ARGS_Parrot_ns_store_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub_pmc))
-#define ASSERT_ARGS_Parrot_store_global_s __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/namespace.c */
 

Modified: branches/gc_massacre/include/parrot/nci.h
==============================================================================
--- branches/gc_massacre/include/parrot/nci.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/nci.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -17,6 +17,7 @@
 
 typedef PMC *(*nci_fb_func_t)(PARROT_INTERP, PMC *user_data, STRING *signature);
 typedef void (*nci_thunk_t)(PARROT_INTERP, PMC *, PMC *);
+typedef void (*native_pcc_method_t)(PARROT_INTERP);
 
 void Parrot_nci_load_core_thunks(PARROT_INTERP);
 void Parrot_nci_load_extra_thunks(PARROT_INTERP);

Modified: branches/gc_massacre/include/parrot/op.h
==============================================================================
--- branches/gc_massacre/include/parrot/op.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/op.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -67,16 +67,19 @@
 */
 
 typedef struct op_info_t {
-    const char    *name;
-    const char    *full_name;
-    const char    *func_name;
-    unsigned short jump;
-    short          op_count;                /* Includes opcode as one arg */
-    arg_type_t     types[PARROT_MAX_ARGS];  /* arg_type_t, 0 = 1st arg */
-    arg_dir_t      dirs[PARROT_MAX_ARGS];   /* arg_dir_t   0 = 1st arg */
-    char           labels[PARROT_MAX_ARGS]; /* 0/1         0 = 1st arg */
+    const char      *name;
+    const char      *full_name;
+    const char      *func_name;
+    unsigned short   jump;
+    short            op_count;                /* Includes opcode as one arg */
+    arg_type_t       types[PARROT_MAX_ARGS];  /* arg_type_t, 0 = 1st arg */
+    arg_dir_t        dirs[PARROT_MAX_ARGS];   /* arg_dir_t   0 = 1st arg */
+    char             labels[PARROT_MAX_ARGS]; /* 0/1         0 = 1st arg */
+    struct op_lib_t *lib;
 } op_info_t;
 
+#define OPCODE_IS(interp, seg, opnum, global_opnum) \
+    ((seg)->op_func_table[(opnum)] == (interp)->op_func_table[(global_opnum)])
 
 #endif /* PARROT_OP_H_GUARD */
 

Modified: branches/gc_massacre/include/parrot/oplib/core_ops.h
==============================================================================
--- branches/gc_massacre/include/parrot/oplib/core_ops.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/oplib/core_ops.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/include/parrot/packfile.h
==============================================================================
--- branches/gc_massacre/include/parrot/packfile.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/packfile.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -263,16 +263,32 @@
     opcode_t                   const_count;
     PackFile_Constant         *constants;
     PackFile_ByteCode         *code;  /* where this segment belongs to */
-
     PMC                       *string_hash; /* Hash for lookup strings and numbers */
 } PackFile_ConstTable;
 
+typedef struct PackFile_ByteCode_OpMappingEntry {
+    op_lib_t *lib;       /* library for this entry */
+    opcode_t  n_ops;     /* number of ops used */
+    opcode_t *lib_ops;   /* indices of ops within the library */
+    opcode_t *table_ops; /* indices of ops within the op table */
+} PackFile_ByteCode_OpMappingEntry;
+
+typedef struct PackFile_ByteCode_OpMapping {
+    opcode_t                          n_libs; /* number of library entries */
+    PackFile_ByteCode_OpMappingEntry *libs;   /* opcode libraries used by this segment */
+} PackFile_ByteCode_OpMapping;
+
 struct PackFile_ByteCode {
-    PackFile_Segment       base;
-    struct PackFile_Debug *debugs;
-    PackFile_ConstTable   *const_table;
-    PackFile_FixupTable   *fixups;
-    struct PackFile_Annotations *annotations;
+    PackFile_Segment              base;
+    struct PackFile_Debug        *debugs;
+    PackFile_ConstTable          *const_table;
+    PackFile_FixupTable          *fixups;
+    struct PackFile_Annotations  *annotations;
+    PackFile_ByteCode_OpMapping   op_mapping;      /* opcode mapping information */
+    size_t                        op_count;        /* number of ops in the func table */
+    op_func_t                    *op_func_table;   /* opcode dispatch table */
+    op_func_t                    *save_func_table; /* for when we hijack op_func_table */
+    op_info_t                   **op_info_table;
 };
 
 typedef struct PackFile_DebugFilenameMapping {
@@ -1038,6 +1054,14 @@
         __attribute__nonnull__(1)
         FUNC_MODIFIES(*pf);
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING * PF_fetch_buf(PARROT_INTERP,
+    ARGIN_NULLOK(PackFile *pf),
+    ARGIN(const opcode_t **cursor))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 char * PF_fetch_cstring(PARROT_INTERP,
@@ -1075,6 +1099,10 @@
         __attribute__nonnull__(3);
 
 PARROT_PURE_FUNCTION
+size_t PF_size_buf(ARGIN(const STRING *s))
+        __attribute__nonnull__(1);
+
+PARROT_PURE_FUNCTION
 size_t PF_size_cstring(ARGIN(const char *s))
         __attribute__nonnull__(1);
 
@@ -1097,6 +1125,13 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
+opcode_t* PF_store_buf(ARGOUT(opcode_t *cursor), ARGIN(const STRING *s))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*cursor);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 opcode_t* PF_store_cstring(ARGOUT(opcode_t *cursor), ARGIN(const char *s))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -1132,6 +1167,9 @@
 
 #define ASSERT_ARGS_PackFile_assign_transforms __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pf))
+#define ASSERT_ARGS_PF_fetch_buf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_PF_fetch_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pf) \
@@ -1146,6 +1184,8 @@
 #define ASSERT_ARGS_PF_fetch_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(cursor))
+#define ASSERT_ARGS_PF_size_buf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_PF_size_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_PF_size_integer __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -1154,6 +1194,9 @@
 #define ASSERT_ARGS_PF_size_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_PF_size_strlen __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_PF_store_buf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(cursor) \
+    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_PF_store_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(cursor) \
     , PARROT_ASSERT_ARG(s))
@@ -1170,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/gc_massacre/include/parrot/platform_interface.h
==============================================================================
--- branches/gc_massacre/include/parrot/platform_interface.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/platform_interface.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/include/parrot/pmc_freeze.h
==============================================================================
--- branches/gc_massacre/include/parrot/pmc_freeze.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/pmc_freeze.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -123,12 +123,14 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-STRING * Parrot_freeze_pbc(PARROT_INTERP,
+opcode_t * Parrot_freeze_pbc(PARROT_INTERP,
     ARGIN(PMC *pmc),
-    ARGIN(const PackFile_ConstTable *pf))
+    ARGIN(const PackFile_ConstTable *pf),
+    ARGIN(opcode_t *cursor))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -170,11 +172,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 PMC* Parrot_thaw_pbc(PARROT_INTERP,
-    ARGIN(STRING *image),
-    ARGIN(PackFile_ConstTable *pf))
+    ARGIN(PackFile_ConstTable *ct),
+    ARGMOD(const opcode_t **cursor))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*cursor);
 
 void Parrot_visit_loop_thawfinish(PARROT_INTERP, ARGIN(PMC *info))
         __attribute__nonnull__(1)
@@ -193,7 +196,8 @@
 #define ASSERT_ARGS_Parrot_freeze_pbc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc) \
-    , PARROT_ASSERT_ARG(pf))
+    , PARROT_ASSERT_ARG(pf) \
+    , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_Parrot_freeze_pbc_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc) \
@@ -212,8 +216,8 @@
     , PARROT_ASSERT_ARG(image))
 #define ASSERT_ARGS_Parrot_thaw_pbc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(image) \
-    , PARROT_ASSERT_ARG(pf))
+    , PARROT_ASSERT_ARG(ct) \
+    , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_Parrot_visit_loop_thawfinish __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(info))

Modified: branches/gc_massacre/include/parrot/pobj.h
==============================================================================
--- branches/gc_massacre/include/parrot/pobj.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/pobj.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -7,7 +7,7 @@
  *  Data Structure and Algorithms:
  *  History:
  *  Notes:
- *  References: memory_internals.pod
+ *  References: memory_internals.pod (out of date as of 8/2010).
  */
 
 #ifndef PARROT_POBJ_H_GUARD
@@ -15,51 +15,65 @@
 
 #include "parrot/config.h"
 
-/* Parrot Object - base class for all others */
+/* This is the base Parrot object structure. Every object begins with
+   this slot, then has additional slots as required. */
+
 typedef struct pobj_t {
-    Parrot_UInt flags;
+    Parrot_UInt flags;                  /* Lots of flags (see below). */
 } PObj;
 
+/* This is a buffer header object, "inheriting" from PObj. */
+
 typedef struct buffer_t {
     Parrot_UInt flags;
-    void *     _bufstart;
-    size_t     _buflen;
+    void *     _bufstart;               /* Pointer to start of buffer data
+                                           (not buffer prolog). */
+    size_t     _buflen;                 /* Length of buffer data. */
 } Buffer;
 
+/* Use these macros to access the two buffer header slots. */
+
 #define Buffer_bufstart(buffer)    (buffer)->_bufstart
 #define Buffer_buflen(buffer)      (buffer)->_buflen
 
-/* See src/gc/alloc_resources.c. the basic idea is that buffer memory is
-   set up as follows:
-                    +-----------------+
-                    |  ref_count   |f |    # GC header
-  obj->bufstart  -> +-----------------+
-                    |  data           |
-                    v                 v
-
-The actual set-up is more involved because of padding.  obj->bufstart must
-be suitably aligned. The start of the memory region (as returned by malloc())
-is suitably aligned for any use.  If, for example, malloc() returns
-objects aligned on 8-byte boundaries, and obj->bufstart is also aligned
-on 8-byte boundaries, then there should be 4 bytes of padding.
-
-ptr from malloc ->  +------------------+
-                      [other blocks?]  |
-                    | INTVAL ref_count |
-obj->bufstart   ->  +------------------+
-                    |     data         |
-                    v                  v
-
+/* A buffer header object points to a buffer in a Memory_Block.
+   The buffer includes a prolog, but _bufstart points to the data
+   portion. Here is how it works:
+
+    Buffer header                         buffer
+   +-------------------+                 +------------------------+
+   |       flags       |                 |  (possible padding)    | }
+   +-------------------+                 +---------------------+--+  > prolog
+   |      _bufstart    | ------+         |    *Memory_Block    |fl| }
+   +-------------------+       |         +---------------------+--+
+   |      _buflen      |       +-------> |    data portion        |
+   +-------------------+                 |                        |
+                                         ~                        ~
+                                         |                        |
+                                         +------------------------+
+
+   The buffer prolog consists of possible padding and a pointer to the
+   Memory_Block containing the buffer. There are two flags in the low-order
+   bits of the pointer (see string.h). Padding is only required if the
+   alignment of the data portion is higher than that of a pointer.
+   This was not the case as of 8/2010.
 */
 
-/* Given a pointer to the buffer, find the ref_count and the actual start of
-   the allocated space. Setting ref_count is clunky because we avoid lvalue
-   casts. */
-#define Buffer_alloc_offset sizeof (void*)
-#define Buffer_bufallocstart(b)  ((char *)Buffer_bufstart(b) - Buffer_alloc_offset)
-#define Buffer_bufrefcountptr(b) ((INTVAL *)Buffer_bufallocstart(b))
-#define Buffer_pool(b) ((Memory_Block *)( *(INTVAL*)(Buffer_bufallocstart(b)) & ~3 ))
-#define Buffer_poolptr(b) ((Memory_Block **)Buffer_bufallocstart(b))
+/* These macros let us address the prolog of a buffer. */
+
+#define Buffer_prolog_offset (sizeof (void*))
+#define Buffer_bufprolog(b) ((char *)Buffer_bufstart(b) - Buffer_prolog_offset)
+
+/* This macro gives us the address of the buffer prolog treated as
+   a pointer to the flags. */
+
+#define Buffer_bufflagsptr(b) ((INTVAL *)Buffer_bufprolog(b))
+
+/* These macros give us the Memory_Block pointer and pointer-pointer,
+   eliminating the flags. */
+
+#define Buffer_pool(b) ((Memory_Block *)( *(INTVAL*)(Buffer_bufprolog(b)) & ~3 ))
+#define Buffer_poolptr(b) ((Memory_Block **)Buffer_bufprolog(b))
 
 
 typedef enum {
@@ -69,29 +83,34 @@
     enum_stringrep_four    = 4
 } parrot_string_representation_t;
 
+/* Here is the Parrot string header object, "inheriting" from Buffer. */
+
 struct parrot_string_t {
     Parrot_UInt flags;
     void *     _bufstart;
     size_t     _buflen;
-    char       *strstart;
-    UINTVAL     bufused;
-    UINTVAL     strlen;
-    UINTVAL     hashval; /* cached hash value computation */
+    char       *strstart;               /* Pointer to start of string
+                                           (not necessarily at _bufstart). */
+    UINTVAL     bufused;                /* Length of string in bytes. */
+    UINTVAL     strlen;                 /* Length of string in characters. */
+    UINTVAL     hashval;                /* Cached hash value. */
 
     /*    parrot_string_representation_t representation;*/
-    const struct _encoding *encoding;
-    const struct _charset  *charset;
+    const struct _encoding *encoding;   /* Pointer to encoding structure. */
+    const struct _charset  *charset;    /* Pointer to charset structure. */
 };
 
-/* note that cache and flags are isomorphic with Buffer and PObj */
-struct PMC {
-    Parrot_UInt     flags;
-    VTABLE         *vtable;
-    DPOINTER       *data;
+/* Here is the Parrot PMC object, "inheriting" from PObj. */
 
-    PMC *_metadata;      /* properties */
+struct PMC {
+    Parrot_UInt    flags;
+    VTABLE         *vtable;             /* Pointer to vtable. */
+    DPOINTER       *data;               /* Pointer to attribute structure. */
+    PMC            *_metadata;          /* Pointer to metadata PMC. */
 };
 
+/* Use these macros to access the data and metadata. */
+
 #define PMC_data(pmc)                   (pmc)->data
 #define PMC_data_typed(pmc, type) (type)(pmc)->data
 #define PMC_metadata(pmc)         ((pmc)->_metadata)
@@ -315,8 +334,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/gc_massacre/include/parrot/runcore_api.h
==============================================================================
--- branches/gc_massacre/include/parrot/runcore_api.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/runcore_api.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -15,7 +15,7 @@
 #include "parrot/parrot.h"
 #include "parrot/op.h"
 
-#  define DO_OP(PC, INTERP) ((PC) = (((INTERP)->op_func_table)[*(PC)])((PC), (INTERP)))
+#  define DO_OP(PC, INTERP) ((PC) = (((INTERP)->code->op_func_table)[*(PC)])((PC), (INTERP)))
 
 typedef opcode_t * (*runcore_runops_fn_type) (PARROT_INTERP, ARGIN(Parrot_runcore_t *), ARGIN(opcode_t *pc));
 typedef       void (*runcore_destroy_fn_type)(PARROT_INTERP, ARGIN(Parrot_runcore_t *));

Modified: branches/gc_massacre/include/parrot/scheduler_private.h
==============================================================================
--- branches/gc_massacre/include/parrot/scheduler_private.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/scheduler_private.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/include/parrot/string.h
==============================================================================
--- branches/gc_massacre/include/parrot/string.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/string.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -30,14 +30,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/gc_massacre/include/parrot/string_funcs.h
==============================================================================
--- branches/gc_massacre/include/parrot/string_funcs.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/include/parrot/string_funcs.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/lib/Parrot/Configure/Compiler.pm
==============================================================================
--- branches/gc_massacre/lib/Parrot/Configure/Compiler.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/lib/Parrot/Configure/Compiler.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/lib/Parrot/Configure/Step/List.pm
==============================================================================
--- branches/gc_massacre/lib/Parrot/Configure/Step/List.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/lib/Parrot/Configure/Step/List.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -41,6 +41,7 @@
     auto::isreg
     auto::jit
     auto::frames
+    auto::llvm
     auto::inline
     auto::gc
     auto::memalign

Modified: branches/gc_massacre/lib/Parrot/Docs/Section/Tools.pm
==============================================================================
--- branches/gc_massacre/lib/Parrot/Docs/Section/Tools.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/lib/Parrot/Docs/Section/Tools.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/gc_massacre/lib/Parrot/Pmc2c/PMCEmitter.pm	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/lib/Parrot/Pmc2c/PMCEmitter.pm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -656,11 +656,18 @@
         next unless $method->type eq Parrot::Pmc2c::Method::NON_VTABLE;
 
         #these differ for METHODs
-        my $method_name = $method->name;
-        my $symbol_name = $method->symbol;
+        my $method_name     = $method->name;
+        my $symbol_name     = $method->symbol;
+        my ($pcc_signature) = $method->pcc_signature;
 
         $cout .= <<"EOC";
-        register_raw_nci_method_in_ns(interp, entry, F2DPTR(Parrot_${classname}_${method_name}), CONST_STRING_GEN(interp, "$symbol_name"));
+        {
+            STRING *method_name = CONST_STRING_GEN(interp, "$symbol_name");
+            STRING *signature   = CONST_STRING_GEN(interp, "$pcc_signature");
+            register_native_pcc_method_in_ns(interp, entry,
+                F2DPTR(Parrot_${classname}_${method_name}),
+                method_name, signature);
+        }
 EOC
         if ( $method->{attrs}{write} ) {
             $cout .= <<"EOC";

Modified: branches/gc_massacre/ports/debian/rules
==============================================================================
--- branches/gc_massacre/ports/debian/rules	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/ports/debian/rules	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/runtime/parrot/library/Digest/MD5.pir
==============================================================================
--- branches/gc_massacre/runtime/parrot/library/Digest/MD5.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/runtime/parrot/library/Digest/MD5.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -49,6 +49,8 @@
 
 =cut
 
+.HLL 'parrot'
+
 .loadlib 'bit_ops'
 
 ###########################################################################

Modified: branches/gc_massacre/runtime/parrot/library/HTTP/Message.pir
==============================================================================
--- branches/gc_massacre/runtime/parrot/library/HTTP/Message.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/runtime/parrot/library/HTTP/Message.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -20,7 +20,6 @@
 
 .namespace ['HTTP';'Date']
 
-.loadlib 'io_ops' # XXX avoids segfaults for some reason (see TT #1663)
 .loadlib 'sys_ops'
 .include 'tm.pasm'
 

Modified: branches/gc_massacre/runtime/parrot/library/distutils.pir
==============================================================================
--- branches/gc_massacre/runtime/parrot/library/distutils.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/runtime/parrot/library/distutils.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -201,7 +201,6 @@
 
 =cut
 
-.loadlib 'io_ops' # workaround TT #1663
 .loadlib 'sys_ops'
 
 .sub '__onload' :load :init :anon
@@ -2334,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/gc_massacre/src/byteorder.c
==============================================================================
--- branches/gc_massacre/src/byteorder.c	Sun Sep  5 13:20:27 2010	(r48798)
+++ /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/gc_massacre/src/call/args.c
==============================================================================
--- branches/gc_massacre/src/call/args.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/call/args.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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,
@@ -563,9 +553,9 @@
         ARGMOD(va_list *args))
 {
     ASSERT_ARGS(Parrot_pcc_build_call_from_varargs)
-    PMC         * arg_flags         = PMCNULL;
-    PMC         * call_object;
-    INTVAL       i                  = 0;
+    PMC         *call_object;
+    PMC         *arg_flags    = PMCNULL;
+    INTVAL       i            = 0;
 
     if (PMC_IS_NULL(signature))
         call_object = Parrot_pmc_new(interp, enum_class_CallContext);
@@ -758,7 +748,6 @@
 
     GETATTR_FixedIntegerArray_size(interp, raw_sig, param_count);
 
-
     /* A null call object is fine if there are no arguments and no returns. */
     if (PMC_IS_NULL(call_object)) {
         if (param_count > 0 && err_check)
@@ -817,27 +806,29 @@
         /* If the parameter is slurpy, collect all remaining positional
          * arguments into an array.*/
         if (param_flags & PARROT_ARG_SLURPY_ARRAY) {
-            PMC *collect_positional;
-
             /* Can't handle named slurpy here, go to named argument handling */
-            if (param_flags & PARROT_ARG_NAME)
-                break;
+            if (!(param_flags & PARROT_ARG_NAME)) {
+                PMC *collect_positional;
+                int  j;
+                INTVAL num_positionals = positional_args - arg_index;
+                if (num_positionals < 0)
+                    num_positionals = 0;
+                if (named_count > 0)
+                    Parrot_ex_throw_from_c_args(interp, NULL,
+                        EXCEPTION_INVALID_OPERATION,
+                        "named parameters must follow all positional parameters");
 
-            if (named_count > 0)
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                    EXCEPTION_INVALID_OPERATION,
-                    "named parameters must follow all positional parameters");
+                collect_positional = Parrot_pmc_new_init_int(interp,
+                    Parrot_get_ctx_HLL_type(interp, enum_class_ResizablePMCArray),
+                    num_positionals);
 
-            collect_positional = Parrot_pmc_new(interp,
-                Parrot_get_ctx_HLL_type(interp, enum_class_ResizablePMCArray));
+                for (j = 0; arg_index < positional_args; ++arg_index)
+                    VTABLE_set_pmc_keyed_int(interp, collect_positional, j++,
+                        VTABLE_get_pmc_keyed_int(interp, call_object, arg_index));
 
-            for (; arg_index < positional_args; ++arg_index) {
-                VTABLE_push_pmc(interp, collect_positional,
-                    VTABLE_get_pmc_keyed_int(interp, call_object, arg_index));
+                *accessor->pmc(interp, arg_info, param_index) = collect_positional;
+                ++param_index;
             }
-
-            *accessor->pmc(interp, arg_info, param_index) = collect_positional;
-            ++param_index;
             break; /* Terminate the positional arg loop. */
         }
 
@@ -1363,14 +1354,34 @@
         ARGMOD(PMC **arg_flags))
 {
     ASSERT_ARGS(parse_signature_string)
-    PMC *current_array;
+    PMC        *current_array;
     const char *x;
-    INTVAL flags = 0;
-    INTVAL set = 0;
+    INTVAL      flags = 0;
+    INTVAL      set   = 0;
+    INTVAL      count = 0;
+
+    for (x = signature; *x; ++x) {
+        if (*x == '-')
+            break;
+        switch (*x) {
+            case 'I': count++; break;
+            case 'N': count++; break;
+            case 'S': count++; break;
+            case 'P': count++; break;
+            default: break;
+        }
+    }
 
     if (PMC_IS_NULL(*arg_flags))
-        *arg_flags = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
-    current_array = *arg_flags;
+        current_array = *arg_flags
+                      = Parrot_pmc_new_init_int(interp,
+                            enum_class_ResizableIntegerArray, count);
+    else {
+        current_array = *arg_flags;
+        VTABLE_set_integer_native(interp, current_array, count);
+    }
+
+    count = 0;
 
     for (x = signature; *x != '\0'; ++x) {
 
@@ -1383,7 +1394,7 @@
             /* Starting a new argument, so store the previous argument,
              * if there was one. */
             if (set) {
-                VTABLE_push_integer(interp, current_array, flags);
+                VTABLE_set_integer_keyed_int(interp, current_array, count++, flags);
                 set = 0;
             }
 
@@ -1420,7 +1431,7 @@
 
     /* Store the final argument, if there was one. */
     if (set)
-        VTABLE_push_integer(interp, current_array, flags);
+        VTABLE_set_integer_keyed_int(interp, current_array, count, flags);
 }
 
 /*

Modified: branches/gc_massacre/src/call/context.c
==============================================================================
--- branches/gc_massacre/src/call/context.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/call/context.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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;
 }
 
@@ -689,8 +690,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.
 
@@ -699,9 +700,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);
@@ -710,8 +712,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.
 
@@ -720,9 +722,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);
@@ -741,6 +744,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 STRING **
 Parrot_pcc_get_STRING_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
@@ -761,6 +765,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 PMC **
 Parrot_pcc_get_PMC_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
@@ -772,7 +777,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.
 
@@ -780,8 +786,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];
@@ -807,7 +814,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.
 
@@ -815,9 +822,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);
@@ -851,6 +859,7 @@
 
 */
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 Regs_ps*
 Parrot_pcc_get_regs_ps(PARROT_INTERP, ARGIN(PMC *ctx))

Modified: branches/gc_massacre/src/debug.c
==============================================================================
--- branches/gc_massacre/src/debug.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/debug.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -2452,13 +2452,15 @@
        one fixed parameter (the signature vector), plus a varying number of
        registers/constants.  For each arg/return, we show the register and its
        flags using PIR syntax. */
-    if (*(op) == PARROT_OP_set_args_pc || *(op) == PARROT_OP_set_returns_pc)
+    if (OPCODE_IS(interp, interp->code, *(op), PARROT_OP_set_args_pc)
+    ||  OPCODE_IS(interp, interp->code, *(op), PARROT_OP_set_returns_pc))
         specialop = 1;
 
     /* if it's a retrieving op, specialop = 2, so that later a :flat flag
      * can be changed into a :slurpy flag. See flag handling below.
      */
-    if (*(op) == PARROT_OP_get_results_pc || *(op) == PARROT_OP_get_params_pc)
+    if (OPCODE_IS(interp, interp->code, *(op), PARROT_OP_get_results_pc)
+    ||  OPCODE_IS(interp, interp->code, *(op), PARROT_OP_get_params_pc))
         specialop = 2;
 
     if (specialop > 0) {
@@ -2593,14 +2595,14 @@
         }
 
         size = PDB_disassemble_op(interp, pfile->source + pfile->size,
-                space, &interp->op_info_table[*pc], pc, pfile, NULL, 1);
+                space, interp->code->op_info_table[*pc], pc, pfile, NULL, 1);
         space       -= size;
         pfile->size += size;
         pfile->source[pfile->size - 1] = '\n';
 
         /* Store the opcode of this line */
         pline->opcode = pc;
-        n             = interp->op_info_table[*pc].op_count;
+        n             = interp->code->op_info_table[*pc]->op_count;
 
         ADD_OP_VAR_PART(interp, interp->code, pc, n);
         pc += n;
@@ -2797,7 +2799,8 @@
     pfile->line   = pline;
     pline->number = 1;
 
-    PARROT_ASSERT(interp->op_info_table);
+    PARROT_ASSERT(interp->code);
+    PARROT_ASSERT(interp->code->op_info_table);
     PARROT_ASSERT(pc);
 
     while ((c = fgetc(file)) != EOF) {
@@ -2817,7 +2820,7 @@
             PDB_line_t *newline = mem_gc_allocate_zeroed_typed(interp, PDB_line_t);
 
             if (PDB_hasinstruction(pfile->source + pline->source_offset)) {
-                size_t n      = interp->op_info_table[*pc].op_count;
+                size_t n      = interp->code->op_info_table[*pc]->op_count;
                 pline->opcode = pc;
                 ADD_OP_VAR_PART(interp, interp->code, pc, n);
                 pc           += n;

Modified: branches/gc_massacre/src/dynext.c
==============================================================================
--- branches/gc_massacre/src/dynext.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/dynext.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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(lib->strstart, "lib", 3) == 0) {
         *handle = Parrot_dlopen((char *)lib->strstart + 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
 
@@ -472,12 +477,6 @@
     Parrot_pcc_set_namespace(interp, context,
             Parrot_get_HLL_namespace(interp, parrot_hll_id));
 
-    /*
-     * work around gcc 3.3.3 and other problem with dynpmcs
-     * something during library loading doesn't stand a GC run
-     */
-    Parrot_block_GC_mark(interp);
-
     if (lib_name) {
         STRING * const load_name       = Parrot_sprintf_c(interp,
                                         "Parrot_lib_%Ss_load", lib_name);
@@ -512,14 +511,12 @@
     /* remember lib_pmc in iglobals */
     store_lib_pmc(interp, lib_pmc, wo_ext, type, lib_name);
 
-    /* UNLOCK */
-    Parrot_unblock_GC_mark(interp);
-
     Parrot_pop_context(interp);
 
     return lib_pmc;
 }
 
+
 /*
 
 =item C<static STRING * clone_string_into(Interp *d, Interp *s, PMC *value)>
@@ -538,9 +535,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 +545,7 @@
     return ret;
 }
 
+
 /*
 
 =item C<static PMC * make_string_pmc(PARROT_INTERP, STRING *string)>
@@ -570,6 +568,7 @@
     return ret;
 }
 
+
 /*
 
 =item C<PMC * Parrot_clone_lib_into(Interp *d, Interp *s, PMC *lib_pmc)>
@@ -608,7 +607,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 +619,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 +633,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 +684,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 +693,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/gc_massacre/src/dynoplibs/math.ops
==============================================================================
--- branches/gc_massacre/src/dynoplibs/math.ops	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/dynoplibs/math.ops	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/dynoplibs/trans.ops
==============================================================================
--- branches/gc_massacre/src/dynoplibs/trans.ops	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/dynoplibs/trans.ops	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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

Modified: branches/gc_massacre/src/dynpmc/dynlexpad.pmc
==============================================================================
--- branches/gc_massacre/src/dynpmc/dynlexpad.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/dynpmc/dynlexpad.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2005-2008, Parrot Foundation.
+Copyright (C) 2005-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -52,7 +52,6 @@
 
         hash             = parrot_new_hash(INTERP);
         attrs->hash      = hash;
-        hash->container  = SELF;
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
@@ -166,6 +165,17 @@
     VTABLE void set_pmc_keyed_str(STRING* name, PMC* value) {
         PMC *std_pad = PARROT_DYNLEXPAD(SELF)->init;
 
+        if (PObj_constant_TEST(SELF)) {
+            if (!PObj_constant_TEST((PObj *)name))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant STRING key in constant hash.");
+            if (!PObj_constant_TEST((PObj *)value))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant PMC value in constant hash.");
+        }
+
         if (std_pad && VTABLE_exists_keyed_str(INTERP, std_pad, name))
             VTABLE_set_pmc_keyed_str(INTERP, std_pad, name, value);
 

Modified: branches/gc_massacre/src/dynpmc/rational.pmc
==============================================================================
--- branches/gc_massacre/src/dynpmc/rational.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/dynpmc/rational.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -46,7 +46,7 @@
 
 /*
 
-=item * static STRING *rat_get_string_to_base(PARROT_INTERP, PMC *self, int base)
+=item C<static STRING *rat_get_string_to_base(PARROT_INTERP, PMC *self, int base)>
 
 Returns a string representation of a Rational-PMC to a certain base.
 
@@ -66,7 +66,7 @@
 
 /*
 
-=item * static void rat_add_integer(PARROT_INTERP, PMC *self, int value)
+=item C<static void rat_add_integer(PARROT_INTERP, PMC *self, int value)>
 
 Adds an integer "value" to a Rational-PMC inplace.
 
@@ -87,7 +87,7 @@
 
 /*
 
-=item * static void rat_add_float(PARROT_INTERP, PMC *self, double value)
+=item C<static void rat_add_float(PARROT_INTERP, PMC *self, double value)>
 
 Adds a float "value" to a Rational-PMC in-place. "value" is first conveted to a
 rational using GMPs mpq_set_d-function. This is meant to be exact.
@@ -110,7 +110,7 @@
 
 /*
 
-=item * static void rat_multiply_integer(PARROT_INTERP, PMC *self, int value)
+=item C<static void rat_multiply_integer(PARROT_INTERP, PMC *self, int value)>
 
 Multiplys a Rational-PMC with an integer "value" in-place.
 
@@ -127,7 +127,7 @@
 
 /*
 
-=item * static void rat_multiply_float(PARROT_INTERP, PMC *self, double value)
+=item C<static void rat_multiply_float(PARROT_INTERP, PMC *self, double value)>
 
 Multiplies a Rational-PMC with a float "value" in-place.
 
@@ -149,7 +149,7 @@
 
 /*
 
-=item * static void rat_divide_integer(PARROT_INTERP, PMC *self, int value)
+=item C<static void rat_divide_integer(PARROT_INTERP, PMC *self, int value)>
 
 Divides a Rational-PMC through an integer "value" in-place.
 
@@ -171,7 +171,7 @@
 
 /*
 
-=item * static void rat_divide_float(PARROT_INTERP, PMC *self, double value)
+=item C<static void rat_divide_float(PARROT_INTERP, PMC *self, double value)>
 
 Divides a Rational-PMC through a float "value" in-place.
 

Modified: branches/gc_massacre/src/embed.c
==============================================================================
--- branches/gc_massacre/src/embed.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/embed.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1079,16 +1079,23 @@
 {
     ASSERT_ARGS(Parrot_run_native)
     PackFile * const pf = PackFile_new(interp, 0);
-    static opcode_t program_code[2];
+    static opcode_t program_code[2] = {
+        0, /* enternative */
+        1  /* end */
+    };
+
+    static op_func_t op_func_table[2];
+    op_func_table[0] = interp->op_func_table[ interp->op_lib->op_code(interp, "enternative", 0) ];
+    op_func_table[1] = interp->op_func_table[ interp->op_lib->op_code(interp, "end", 0) ];
 
-    program_code[0] = interp->op_lib->op_code(interp, "enternative", 0);
-    program_code[1] = 0; /* end */
 
     pf->cur_cs = (PackFile_ByteCode *)
         (pf->PackFuncs[PF_BYTEC_SEG].new_seg)(interp, pf,
                 Parrot_str_new_constant(interp, "code"), 1);
-    pf->cur_cs->base.data = program_code;
-    pf->cur_cs->base.size = 2;
+    pf->cur_cs->base.data     = program_code;
+    pf->cur_cs->base.size     = 2;
+    pf->cur_cs->op_func_table = op_func_table;
+    /* TODO fill out cur_cs with op_mapping */
 
     Parrot_pbc_load(interp, pf);
 

Modified: branches/gc_massacre/src/exceptions.c
==============================================================================
--- branches/gc_massacre/src/exceptions.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/exceptions.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -242,6 +242,7 @@
     if (PObj_get_FLAGS(handler) & SUB_FLAG_C_HANDLER) {
         /* it's a C exception handler */
         Parrot_runloop * const jump_point = (Parrot_runloop *)address;
+        jump_point->exception = exception;
         longjmp(jump_point->resume, 1);
     }
 
@@ -367,6 +368,7 @@
     if (PObj_get_FLAGS(handler) & SUB_FLAG_C_HANDLER) {
         Parrot_runloop * const jump_point =
             (Parrot_runloop * const)VTABLE_get_pointer(interp, handler);
+        jump_point->exception = exception;
         longjmp(jump_point->resume, 1);
     }
 

Deleted: branches/gc_massacre/src/frame_builder.c
==============================================================================
--- branches/gc_massacre/src/frame_builder.c	Sun Sep  5 13:20:27 2010	(r48798)
+++ /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/gc_massacre/src/frame_builder.h
==============================================================================
--- branches/gc_massacre/src/frame_builder.h	Sun Sep  5 13:20:27 2010	(r48798)
+++ /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/gc_massacre/src/gc/alloc_memory.c
==============================================================================
--- branches/gc_massacre/src/gc/alloc_memory.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/gc/alloc_memory.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -64,37 +64,6 @@
 
 /*
 
-=item C<void * mem__internal_allocate(size_t size, const char *file, int line)>
-
-Calls C<malloc> to allocate memory from the system, Panics if there is no
-memory available. If C<DETAIL_MEMORY_DEBUG> macro is defined, prints
-debug information to C<STDERR>.
-
-=cut
-
-*/
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void *
-mem__internal_allocate(size_t size, ARGIN(const char *file), int line)
-{
-    ASSERT_ARGS(mem__internal_allocate)
-    void * const ptr = malloc((size_t)size);
-#ifdef DETAIL_MEMORY_DEBUG
-    fprintf(stderr, "Internal malloc %i at %p (%s/%d)\n",
-            size, ptr, file, line);
-#else
-    UNUSED(file);
-    UNUSED(line);
-#endif
-    if (!ptr)
-        PANIC_OUT_OF_MEM(size);
-    return ptr;
-}
-
-/*
-
 =item C<void * mem_sys_allocate_zeroed(size_t size)>
 
 Uses C<calloc> to allocate system memory.  Guaranteed to succeed, Panics
@@ -122,38 +91,6 @@
 
 /*
 
-=item C<void * mem__internal_allocate_zeroed(size_t size, const char *file, int
-line)>
-
-Uses C<calloc> to allocate system memory.  Guaranteed to succeed, Panics
-otherwise. If C<DETAIL_MEMORY_DEBUG> macro is defined, prints
-debug information to C<STDERR>.
-
-=cut
-
-*/
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void *
-mem__internal_allocate_zeroed(size_t size, ARGIN(const char *file), int line)
-{
-    ASSERT_ARGS(mem__internal_allocate_zeroed)
-    void * const ptr = calloc(1, (size_t)size);
-#ifdef DETAIL_MEMORY_DEBUG
-    fprintf(stderr, "Internal malloc %i at %p (%s/%d)\n",
-            size, ptr, file, line);
-#else
-    UNUSED(file);
-    UNUSED(line);
-#endif
-    if (!ptr)
-        PANIC_OUT_OF_MEM(size);
-    return ptr;
-}
-
-/*
-
 =item C<void * mem_sys_realloc(void *from, size_t size)>
 
 Resizes a chunk of memory.  Unlike C<realloc>, it can handle a
@@ -226,81 +163,6 @@
 
 /*
 
-=item C<void * mem__internal_realloc(void *from, size_t size, const char *file,
-int line)>
-
-Resizes a chunk of system memory.  Unlike C<realloc>, it can handle a
-NULL pointer, in which case a new memory block is allocated for the
-requested size. If C<DETAIL_MEMORY_DEBUG> macro is defined, debug
-information is printed to C<STDERR>.
-
-=cut
-
-*/
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void *
-mem__internal_realloc(ARGFREE(void *from), size_t size,
-        ARGIN(const char *file), int line)
-{
-    ASSERT_ARGS(mem__internal_realloc)
-    void * const ptr = realloc(from, size);
-#ifdef DETAIL_MEMORY_DEBUG
-    fprintf(stderr, "internal free of %p (realloc -- %i bytes) (%s/%d)\n",
-            from, size, file, line);
-    fprintf(stderr, "Internal malloc %i at %p (%s/%d)\n",
-            size, ptr, file, line);
-#else
-    UNUSED(file);
-    UNUSED(line);
-#endif
-    if (!ptr)
-        PANIC_OUT_OF_MEM(size);
-    return ptr;
-}
-
-/*
-
-=item C<void * mem__internal_realloc_zeroed(void *from, size_t size, size_t
-old_size, const char *file, int line)>
-
-Reallocates a given buffer of size C<old_size> to C<size>. If the new size
-is larger then the old size, the difference is filled with zeros. Contains
-debugging information, and can print filename and line number where it is
-used if C<DETAIL_MEMORY_DEBUG> is defined.
-
-=cut
-
-*/
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void *
-mem__internal_realloc_zeroed(ARGFREE(void *from), size_t size, size_t old_size,
-    ARGIN(const char *file), int line)
-{
-    ASSERT_ARGS(mem__internal_realloc_zeroed)
-    void * const ptr = realloc(from, size);
-#ifdef DETAIL_MEMORY_DEBUG
-    fprintf(stderr, "internal free of %p (realloc -- %i bytes) (%s/%d)\n",
-            from, size, file, line);
-    fprintf(stderr, "Internal malloc %i at %p (%s/%d)\n",
-            size, ptr, file, line);
-#else
-    UNUSED(file);
-    UNUSED(line);
-#endif
-    if (!ptr)
-        PANIC_OUT_OF_MEM(size);
-    if (size > old_size)
-        memset((char*)ptr + old_size, 0, size - old_size);
-
-    return ptr;
-}
-
-/*
-
 =item C<void mem_sys_free(void *from)>
 
 Frees a chunk of memory back to the system.
@@ -323,31 +185,6 @@
 
 /*
 
-=item C<void mem__internal_free(void *from, const char *file, int line)>
-
-Frees a chunk of memory back to the system. If
-C<DETAIL_MEMORY_DEBUG> macro is defined, prints debug information to
-C<STDERR>.
-
-=cut
-
-*/
-
-void
-mem__internal_free(ARGFREE(void *from), ARGIN(const char *file), int line)
-{
-    ASSERT_ARGS(mem__internal_free)
-#ifdef DETAIL_MEMORY_DEBUG
-    fprintf(stderr, "Internal free of %p (%s/%d)\n", from, file, line);
-#else
-    UNUSED(file);
-    UNUSED(line);
-#endif
-    free(from);
-}
-
-/*
-
 =item C<char * mem_sys_strdup(const char *src)>
 
 Copy a C string to a new block of memory allocated with mem_sys_allocate,

Modified: branches/gc_massacre/src/gc/alloc_resources.c
==============================================================================
--- branches/gc_massacre/src/gc/alloc_resources.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/gc/alloc_resources.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -281,18 +281,8 @@
 - reduce alignment to a reasonable value i.e. MALLOC_ALIGNMENT
   aka 2*sizeof (size_t) or just 8 (TODO make a config hint)
 
-Buffer memory layout:
-
-                    +-------------------+
-                    | flags # GC header |
-  obj->bufstart  -> +-------------------+
-                    |  data             |
-                    v                   v
-
- * if PObj_is_COWable is set, then we have space for flags.
-
- * if PObj_align_FLAG is set, obj->bufstart is aligned like discussed above
- * obj->buflen is the usable length excluding the optional GC part.
+See pobj.h for a discussion of the Buffer descriptor and the buffer itself,
+including its header.
 
 =cut
 
@@ -321,8 +311,11 @@
          * TODO pass required allocation size to the GC system,
          *      so that collection can be skipped if needed
          */
+        size_t new_mem = mem_pools->stats.memory_used -
+                         mem_pools->stats.mem_used_last_collect;
         if (!mem_pools->gc_mark_block_level
-        &&   mem_pools->stats.mem_allocs_since_last_collect) {
+            && new_mem > (mem_pools->stats.mem_used_last_collect >> 2)
+            && new_mem > GC_SIZE_THRESHOLD) {
             Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 
             if (interp->gc_sys->sys_type != INF) {
@@ -360,6 +353,7 @@
     return_val             = pool->top_block->top;
     pool->top_block->top  += size;
     pool->top_block->free -= size;
+    mem_pools->stats.memory_used += size;
 
     return return_val;
 }
@@ -464,6 +458,12 @@
     /* Snag a block big enough for everything */
     total_size = pad_pool_size(pool);
 
+    if (total_size == 0) {
+        free_old_mem_blocks(mem_pools, pool, pool->top_block, total_size);
+        --mem_pools->gc_sweep_block_level;
+        return;
+    }
+
     alloc_new_block(mem_pools, total_size, pool, "inside compact");
 
     new_block = pool->top_block;
@@ -511,7 +511,8 @@
 
     /* How much is free. That's the total size minus the amount we used */
     new_block->free = new_block->size - (cur_spot - new_block->start);
-    mem_pools->stats.memory_collected += (cur_spot - new_block->start);
+    mem_pools->stats.memory_collected +=      (cur_spot - new_block->start);
+    mem_pools->stats.memory_used      +=      (cur_spot - new_block->start);
 
     free_old_mem_blocks(mem_pools, pool, new_block, total_size);
 
@@ -526,6 +527,9 @@
 size minus the reclaimable size. Add a minimum block to the current amount, so
 we can avoid having to allocate it in the future.
 
+Returns 0 if all blocks below the top block are almost full. In this case
+compacting is not needed.
+
 TODO - Big blocks
 
 Currently all available blocks are compacted into one new
@@ -550,21 +554,29 @@
 pad_pool_size(ARGIN(const Variable_Size_Pool *pool))
 {
     ASSERT_ARGS(pad_pool_size)
-    Memory_Block *cur_block = pool->top_block;
+    Memory_Block *cur_block = pool->top_block->prev;
 
     UINTVAL total_size   = 0;
 #if RESOURCE_DEBUG
-    size_t  total_blocks = 0;
+    size_t  total_blocks = 1;
 #endif
 
     while (cur_block) {
-        total_size += cur_block->size - cur_block->freed - cur_block->free;
+        if (!is_block_almost_full(cur_block))
+            total_size += cur_block->size - cur_block->freed - cur_block->free;
         cur_block   = cur_block->prev;
 #if RESOURCE_DEBUG
         ++total_blocks;
 #endif
     }
 
+    if (total_size == 0)
+        return 0;
+
+    cur_block = pool->top_block;
+    if (!is_block_almost_full(cur_block))
+        total_size += cur_block->size - cur_block->freed - cur_block->free;
+
     /* this makes for ever increasing allocations but fewer collect runs */
 #if WE_WANT_EVER_GROWING_ALLOCATIONS
     total_size += pool->minimum_block_size;
@@ -612,7 +624,7 @@
     /* we can't perform the math all the time, because
         * strstart might be in unallocated memory */
     if (PObj_is_COWable_TEST(old_buf)) {
-        flags = Buffer_bufrefcountptr(old_buf);
+        flags = Buffer_bufflagsptr(old_buf);
         old_block = Buffer_pool(old_buf);
 
         if (PObj_is_string_TEST(old_buf)) {
@@ -631,7 +643,7 @@
 
         /* Make sure they know that we own it too */
         /* Set Buffer_shared_FLAG in new buffer */
-        *Buffer_bufrefcountptr(hdr) |= Buffer_shared_FLAG;
+        *Buffer_bufflagsptr(hdr) |= Buffer_shared_FLAG;
 
         /* Now make sure we point to where the other guy does */
         Buffer_bufstart(old_buf) = Buffer_bufstart(hdr);
@@ -719,6 +731,7 @@
         else {
             /* Note that we don't have it any more */
             mem_pools->stats.memory_allocated -= cur_block->size;
+            mem_pools->stats.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 */
@@ -759,7 +772,7 @@
 is_block_almost_full(ARGIN(const Memory_Block *block))
 {
     ASSERT_ARGS(is_block_almost_full)
-    return (block->free + block->freed) < block->size * 0.2;
+    return 5 * (block->free + block->freed) < block->size;
 }
 
 /*

Modified: branches/gc_massacre/src/gc/api.c
==============================================================================
--- branches/gc_massacre/src/gc/api.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/gc/api.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -331,9 +331,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
 
@@ -353,7 +353,7 @@
 
     string->strstart        = 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/gc_massacre/src/gc/gc_ms.c
==============================================================================
--- branches/gc_massacre/src/gc/gc_ms.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/gc/gc_ms.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -18,6 +18,8 @@
 #include "gc_private.h"
 #include "parrot/list.h"
 
+#define DEBUG_FREE_LIST 0
+
 PARROT_DOES_NOT_RETURN
 static void failed_allocation(unsigned int line, unsigned long size) /* HEADERIZER SKIP */
 {
@@ -32,15 +34,24 @@
 /* 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);
 
 static void gc_ms_add_free_object(SHIM_INTERP,
-    SHIM(Memory_Pools *mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool),
     ARGIN(void *to_add))
+        __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
+        FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool);
 
 static void gc_ms_alloc_objects(PARROT_INTERP,
@@ -135,11 +146,12 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static void * gc_ms_get_free_object(PARROT_INTERP,
-    ARGIN(Memory_Pools *mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool);
 
 static size_t gc_ms_get_gc_info(PARROT_INTERP, Interpinfo_enum which)
@@ -261,10 +273,14 @@
         __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 = (\
-       PARROT_ASSERT_ARG(pool) \
+       PARROT_ASSERT_ARG(mem_pools) \
+    , PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(to_add))
 #define ASSERT_ARGS_gc_ms_alloc_objects __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -586,6 +602,8 @@
     mem_pools->stats.header_allocs_since_last_collect = 0;
 
     --mem_pools->gc_mark_block_level;
+    mem_pools->stats.header_allocs_since_last_collect = 0;
+    mem_pools->stats.mem_used_last_collect = mem_pools->stats.memory_used;
 
     return;
 }
@@ -953,7 +971,6 @@
     ASSERT_ARGS(Parrot_gc_get_attributes_from_pool)
     PMC_Attribute_Free_List *item;
 
-#if GC_USE_LAZY_ALLOCATOR
     if (pool->free_list) {
         item            = pool->free_list;
         pool->free_list = item->next;
@@ -969,12 +986,6 @@
         Parrot_gc_allocate_new_attributes_arena(pool);
         return Parrot_gc_get_attributes_from_pool(interp, pool);
     }
-#else
-    if (pool->free_list == NULL)
-        Parrot_gc_allocate_new_attributes_arena(pool);
-    item            = pool->free_list;
-    pool->free_list = item->next;
-#endif
 
     --pool->num_free_objects;
     return (void *)item;
@@ -1000,18 +1011,8 @@
     pool->top_arena = new_arena;
     next            = (PMC_Attribute_Free_List *)(new_arena + 1);
 
-#if GC_USE_LAZY_ALLOCATOR
     pool->newfree   = next;
     pool->newlast   = (PMC_Attribute_Free_List *)((char *)next + item_space);
-#else
-    pool->free_list = next;
-    for (i = 0; i < num_items; ++i) {
-        list        = next;
-        list->next  = (PMC_Attribute_Free_List *)((char *)list + item_size);
-        next        = list->next;
-    }
-    list->next      = pool->free_list;
-#endif
 
     pool->num_free_objects += num_items;
     pool->total_objects    += num_items;
@@ -1109,18 +1110,43 @@
 {
     ASSERT_ARGS(gc_ms_allocate_pmc_attributes)
     const size_t attr_size = pmc->vtable->attr_size;
-#if GC_USE_FIXED_SIZE_ALLOCATOR
     PMC_Attribute_Pool * const pool = Parrot_gc_get_attribute_pool(interp,
             interp->mem_pools, attr_size);
     void * const attrs = Parrot_gc_get_attributes_from_pool(interp, pool);
     memset(attrs, 0, attr_size);
     PMC_data(pmc) = attrs;
     return attrs;
-#else
-    void * const data =  gc_ms_allocate_memory_chunk(attr_size);
-    PMC_data(pmc) = data;
-    return data;
-#endif
+}
+
+/*
+
+=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;
 }
 
 /*
@@ -1139,17 +1165,11 @@
     void * const data = PMC_data(pmc);
 
     if (data) {
-
-#if GC_USE_FIXED_SIZE_ALLOCATOR
         const size_t attr_size = pmc->vtable->attr_size;
         const size_t item_size = attr_size < sizeof (void *) ? sizeof (void *) : attr_size;
         PMC_Attribute_Pool ** const pools = interp->mem_pools->attrib_pools;
         const size_t idx = item_size - sizeof (void *);
         gc_ms_free_attributes_from_pool(pools[idx], data);
-#else
-        gc_ms_free_memory_chunk(intepr, PMC_data(pmc));
-        PMC_data(pmc) = NULL;
-#endif
     }
 }
 
@@ -1169,6 +1189,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;
 
@@ -1250,6 +1274,7 @@
     &&  (pool->top_block->top  == (char *)Buffer_bufstart(buffer) + old_size)) {
         pool->top_block->free -= needed;
         pool->top_block->top  += needed;
+        interp->mem_pools->stats.memory_used += needed;
         Buffer_buflen(buffer)  = newsize;
         return;
     }
@@ -1362,6 +1387,7 @@
     &&  pool->top_block->top  == (char *)Buffer_bufstart(str) + old_size) {
         pool->top_block->free -= needed;
         pool->top_block->top  += needed;
+        interp->mem_pools->stats.memory_used += needed;
         Buffer_buflen(str) = new_size - sizeof (void *);
         return;
     }
@@ -1379,11 +1405,11 @@
     PARROT_ASSERT(PObj_is_movable_TESTALL(str));
 
     /* We must not reallocate shared buffers! */
-    PARROT_ASSERT(!(*Buffer_bufrefcountptr(str) & Buffer_shared_FLAG));
+    PARROT_ASSERT(!(*Buffer_bufflagsptr(str) & Buffer_shared_FLAG));
 
     /* Decrease usage */
     PARROT_ASSERT(Buffer_pool(str));
-    Buffer_pool(str)->freed  += ALIGNED_STRING_SIZE(Buffer_buflen(str));
+    Buffer_pool(str)->freed += old_size;
 
     /* copy mem from strstart, *not* bufstart */
     oldmem             = str->strstart;
@@ -1646,24 +1672,22 @@
         ARGMOD(Fixed_Size_Pool *pool))
 {
     ASSERT_ARGS(gc_ms_more_traceable_objects)
+    size_t new_mem = mem_pools->stats.memory_used
+                   - mem_pools->stats.mem_used_last_collect;
 
     if (pool->skip == GC_ONE_SKIP)
         pool->skip = GC_NO_SKIP;
     else if (pool->skip == GC_NEVER_SKIP
          || (pool->skip == GC_NO_SKIP
-         &&  mem_pools->stats.header_allocs_since_last_collect >= GC_SIZE_THRESHOLD))
+         && (new_mem > (mem_pools->stats.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.
        If gc is disabled, then we must check the free list directly. */
-#if GC_USE_LAZY_ALLOCATOR
     if ((!pool->free_list || pool->num_free_objects < pool->replenish_level)
         && !pool->newfree)
         (*pool->alloc_objects) (interp, interp->mem_pools, pool);
-#else
-    if (!pool->free_list || pool->num_free_objects < pool->replenish_level)
-    (*pool->alloc_objects) (interp, interp->mem_pools, pool);
-#endif
 }
 
 /*
@@ -1680,17 +1704,22 @@
 
 static void
 gc_ms_add_free_object(SHIM_INTERP,
-        SHIM(Memory_Pools *mem_pools),
+        ARGMOD(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *pool),
         ARGIN(void *to_add))
 {
     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;
     pool->free_list  = object;
+    mem_pools->stats.memory_used -= pool->object_size;
 }
 
 /*
@@ -1711,15 +1740,13 @@
 PARROT_WARN_UNUSED_RESULT
 static void *
 gc_ms_get_free_object(PARROT_INTERP,
-        ARGIN(Memory_Pools *mem_pools),
+        ARGMOD(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *pool))
 {
     ASSERT_ARGS(gc_ms_get_free_object)
     PObj *ptr;
     PObj *free_list = (PObj *)pool->free_list;
 
-#if GC_USE_LAZY_ALLOCATOR
-
   HAVE_FREE:
     if (free_list) {
         ptr             = free_list;
@@ -1741,18 +1768,9 @@
         free_list = (PObj *)pool->free_list;
         goto HAVE_FREE;
     }
-#else
-    /* if we don't have any objects */
-    if (!free_list) {
-        (*pool->more_objects)(interp, mem_pools, pool);
-        free_list = (PObj *)pool->free_list;
-    }
-
-    ptr             = free_list;
-    pool->free_list = ((GC_MS_PObj_Wrapper*)ptr)->next_ptr;
-#endif
 
     --pool->num_free_objects;
+    mem_pools->stats.memory_used += pool->object_size;
 
     return ptr;
 }
@@ -1805,9 +1823,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/gc_massacre/src/gc/gc_private.h
==============================================================================
--- branches/gc_massacre/src/gc/gc_private.h	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/gc/gc_private.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -61,12 +61,6 @@
 #define GC_ATTRIB_POOLS_HEADROOM 8
 #define GC_FIXED_SIZE_POOL_SIZE 4096
 
-/* Use the lazy allocator. Since it amortizes arena allocation costs, turn
-   this on at the same time that you increase the size of allocated arenas.
-   increase *_HEADERS_PER_ALLOC and GC_FIXED_SIZE_POOL_SIZE to be large
-   enough to satisfy most startup costs. */
-#define GC_USE_LAZY_ALLOCATOR 1
-
 /* Set to 1 if we want to use the fixed-size allocator. Set to 0 if we want
    to allocate these things using mem_sys_allocate instead */
 #define GC_USE_FIXED_SIZE_ALLOCATOR 1
@@ -78,6 +72,7 @@
    larger then sizeof(PObj), thus creating overflow. However PObjs are never
    used by themselves, things like PMCs and STRINGs are cast to PObj in the
    GC, so we should have plenty of space. */
+
 typedef struct GC_MS_PObj_Wrapper {
     size_t flags;
     struct GC_MS_PObj_Wrapper * next_ptr;
@@ -94,9 +89,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 {
@@ -170,67 +165,86 @@
 
 } GC_Subsystem;
 
+/* This header structure describes an arena: a block of memory that is part of a
+   fixed-sized pool. The arena has enough memory for 'total_objects' objects
+   of a particular size specified in the pool. */
+
 typedef struct Fixed_Size_Arena {
-    size_t                     used;
-    size_t                     total_objects;
-    struct Fixed_Size_Arena *prev;
-    struct Fixed_Size_Arena *next;
-    void                      *start_objects;
+    size_t                   used;          /* Number of objects slots used. */
+    size_t                   total_objects; /* Total number of object slots. */
+    struct Fixed_Size_Arena *prev;          /* Pointer to previous arena. */
+    struct Fixed_Size_Arena *next;          /* Pointer to next arena. */
+    void                    *start_objects; /* Pointer to arena memory. */
 } Fixed_Size_Arena;
 
+/* This simple header structure describes a free PMC attribute object.
+   A list of them hang off the PMC attribute pool. */
+
 typedef struct PMC_Attribute_Free_List {
-    struct PMC_Attribute_Free_List * next;
+    struct PMC_Attribute_Free_List * next; /* Pointer to next free object. */
 } PMC_Attribute_Free_List;
 
+/* This header structure describes a PMC attribute arena: A block of memory
+   that is part of a PMC attribute pool. The allocatable memory follows
+   this header. */
+
 typedef struct PMC_Attribute_Arena {
-    struct PMC_Attribute_Arena * next;
-    struct PMC_Attribute_Arena * prev;
+    struct PMC_Attribute_Arena * next;  /* Pointer to next arena. */
+    struct PMC_Attribute_Arena * prev;  /* Pointer to previous arena. */
 } PMC_Attribute_Arena;
 
+/* This structure describes a PMC attribute pool. A vector of them hang
+   off the Memory_Pools root structure. */
+
 typedef struct PMC_Attribute_Pool {
-    size_t attr_size;
-    size_t total_objects;
-    size_t objects_per_alloc;
-    size_t num_free_objects;
-    PMC_Attribute_Free_List * free_list;
-    PMC_Attribute_Arena     * top_arena;
-#if GC_USE_LAZY_ALLOCATOR
-    PMC_Attribute_Free_List * newfree;
-    PMC_Attribute_Free_List * newlast;
-#endif
+    size_t attr_size;                    /* Size of attribute object. */
+    size_t total_objects;                /* Total objects in the pool. */
+    size_t objects_per_alloc;            /* Number of object slots to allocate. */
+    size_t num_free_objects;             /* Number of objects on the free list. */
+    PMC_Attribute_Free_List * free_list; /* List of free object slots, or NULL. */
+    PMC_Attribute_Arena     * top_arena; /* Pointer to most recent arena. */
+    PMC_Attribute_Free_List * newfree;   /* Pointer to next object slot in
+                                            latest arena, or NULL (slots weren't
+                                            put on free list). */
+    PMC_Attribute_Free_List * newlast;   /* High water mark in arena. */
+
 } PMC_Attribute_Pool;
 
-/* Tracked resource pool */
+/* This structure describes a fixed-size memory pool. Various such pools
+   hang off the Memory_Pools root structure. */
+
 typedef struct Fixed_Size_Pool {
 
-    struct Variable_Size_Pool *mem_pool;
-   /* Size in bytes of an individual pool item. This size may include
-    * a GC-system specific GC header. */
-    size_t object_size;
-
-    size_t start_arena_memory;
-    size_t end_arena_memory;
-
-    Fixed_Size_Arena *last_Arena;
-    GC_MS_PObj_Wrapper * free_list;
-    size_t num_free_objects;    /* number of resources in the free pool */
-    size_t total_objects;
-
-    PARROT_OBSERVER const char *name;
-
-    size_t objects_per_alloc;
-
-    int skip;
-    size_t replenish_level;
-
-    add_free_object_fn_type     add_free_object; /* adds a free object to
-                                                    the pool's free list  */
-    get_free_object_fn_type     get_free_object; /* gets and removes a free
-                                                    object from the pool's
-                                                    free list */
-    alloc_objects_fn_type       alloc_objects;  /* allocates more objects */
-    alloc_objects_fn_type       more_objects;
-    gc_object_fn_type           gc_object;
+    struct Variable_Size_Pool *mem_pool; /* Pointer to associated variable-size
+                                            pool, or NULL. */
+    size_t object_size;                 /* Size in bytes of an individual pool
+                                           object. This size may include
+                                           a GC system-specific GC header. */
+
+    size_t start_arena_memory;          /* Address of the lowest arena. */
+    size_t end_arena_memory;            /* And the highest one. */
+
+    Fixed_Size_Arena *last_Arena;       /* Pointer to most recent arena. */
+    GC_MS_PObj_Wrapper * free_list;     /* List of free object slots, or NULL. */
+    size_t num_free_objects;            /* Number of objects on the free list. */
+    size_t total_objects;               /* Total objects in the pool. */
+
+    PARROT_OBSERVER const char *name;   /* Name of pool. */
+
+    size_t objects_per_alloc;           /* Number of object slots to allocate. */
+
+    int skip;                           /* How often to skip full GC
+                                           (see gc_skip_type_enum). */
+    size_t replenish_level;             /* Replenish pool when free object slots
+                                           goes below this level. */
+
+    add_free_object_fn_type add_free_object; /* Adds a free object to
+                                                the pool's free list  */
+    get_free_object_fn_type get_free_object; /* Gets and removes a free object
+                                                from the pool's free list. */
+    alloc_objects_fn_type   alloc_objects;   /* Allocates an arena for objects. */
+    alloc_objects_fn_type   more_objects;    /* Obtain more free objects. */
+    gc_object_fn_type       gc_object;       /* GCs object during sweep. */
 
     /* Contains GC system-specific data structures ... unused at the moment,
      * but this is where it should go when we need it ...
@@ -238,10 +252,10 @@
     } gc_private;
     */
 
-#if GC_USE_LAZY_ALLOCATOR
-    void *newfree;
-    void *newlast;
-#endif
+    void *newfree;    /* Pointer to next object slot in
+                         latest arena, or NULL (slots weren't
+                         put on free list). */
+    void *newlast;    /* High water mark in arena. */
 
 } Fixed_Size_Pool;
 
@@ -259,14 +273,22 @@
                                                  * 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_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 */
     UINTVAL memory_collected;     /* Total amount of memory copied
                                      during collection */
+
 } GC_Statistics;
 
 typedef struct Memory_Pools {
@@ -300,7 +322,7 @@
     GC_Statistics        stats;   /* Stats */
 
     /* private data for the GC subsystem */
-    void *gc_private;           /* gc subsystem data */
+    void *gc_private;             /* GC subsystem data */
 } Memory_Pools;
 
 /* HEADERIZER BEGIN: src/gc/system.c */
@@ -340,7 +362,7 @@
     ARGMOD(Memory_Pools *mem_pools),
     int flag,
     ARGIN_NULLOK(void *arg),
-    NOTNULL(pool_iter_fn func))
+    NOTNULL(const pool_iter_fn func))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(5)

Modified: branches/gc_massacre/src/gc/mark_sweep.c
==============================================================================
--- branches/gc_massacre/src/gc/mark_sweep.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/gc/mark_sweep.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -426,7 +426,6 @@
 
     pool->total_objects += num_objects;
     object = (void *)arena->start_objects;
-#if GC_USE_LAZY_ALLOCATOR
     /* Don't move anything onto the free list. Set the pointers and do it
        lazily when we allocate. */
     {
@@ -435,14 +434,7 @@
         pool->newlast = (void*)((char*)object + total_size);
         arena->used = 0;
     }
-#else
-    /* Move all the new objects into the free list */
-    arena->used          = num_objects;
-    for (i = 0; i < num_objects; ++i) {
-        pool->add_free_object(interp, pool, object);
-        object = (void *)((char *)object + pool->object_size);
-    }
-#endif
+
     pool->num_free_objects += num_objects;
 }
 
@@ -487,6 +479,7 @@
 
     pool->last_Arena = new_arena;
     mem_pools->stats.header_allocs_since_last_collect += size;
+    mem_pools->stats.memory_allocated += size;
 }
 
 /*
@@ -610,12 +603,10 @@
     pool->last_Arena        = NULL;
     pool->free_list         = NULL;
     pool->mem_pool          = NULL;
-    pool->object_size       = object_size;
-    pool->objects_per_alloc = objects_per_alloc;
-#if GC_USE_LAZY_ALLOCATOR
     pool->newfree           = NULL;
     pool->newlast           = NULL;
-#endif
+    pool->object_size       = object_size;
+    pool->objects_per_alloc = objects_per_alloc;
 
     return pool;
 }
@@ -682,7 +673,7 @@
     if (mem_pool) {
         /* Update Memory_Block usage */
         if (PObj_is_movable_TESTALL(b)) {
-            INTVAL *buffer_flags = Buffer_bufrefcountptr(b);
+            INTVAL *buffer_flags = Buffer_bufflagsptr(b);
 
             /* Mask low 2 bits used for flags */
             Memory_Block * block = Buffer_pool(b);
@@ -799,7 +790,7 @@
 /*
 
 =item C<int header_pools_iterate_callback(PARROT_INTERP, Memory_Pools
-*mem_pools, int flag, void *arg, pool_iter_fn func)>
+*mem_pools, int flag, void *arg, const pool_iter_fn func)>
 
 Iterates through header pools, invoking the given callback function on each
 pool in the list matching the given criteria. Determines which pools to iterate
@@ -841,7 +832,7 @@
 header_pools_iterate_callback(PARROT_INTERP,
         ARGMOD(Memory_Pools *mem_pools),
         int flag, ARGIN_NULLOK(void *arg),
-        NOTNULL(pool_iter_fn func))
+        NOTNULL(const pool_iter_fn func))
 {
     ASSERT_ARGS(header_pools_iterate_callback)
 

Modified: branches/gc_massacre/src/hash.c
==============================================================================
--- branches/gc_massacre/src/hash.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/hash.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -25,51 +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 SMALL_HASH_SIZE  4
-#define INITIAL_BUCKETS  4
+#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
@@ -97,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 = (\
@@ -133,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 */
 
@@ -165,34 +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) {
-        const STRING * const s = (const STRING *)key;
-        if (s->hashval)
-            return s->hashval;
-    }
-
-    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.
 
@@ -202,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
@@ -235,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;
 
@@ -248,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
 
@@ -264,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;
 }
 
@@ -329,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.
@@ -341,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);
 }
 
@@ -369,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.
@@ -381,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)
@@ -417,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
@@ -430,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;
 }
 
@@ -509,25 +456,9 @@
 parrot_mark_hash_keys(PARROT_INTERP, ARGIN(Hash *hash))
 {
     ASSERT_ARGS(parrot_mark_hash_keys)
-    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 hash corruption at hash %p entries %d",
-                    hash, (int)entries);
-
-            PARROT_ASSERT(bucket->key);
-            Parrot_gc_mark_PObj_alive(interp, (PObj *)bucket->key);
-
-            bucket = bucket->next;
-        }
-    }
+    parrot_hash_iterate(hash,
+        PARROT_ASSERT(_bucket->key);
+        Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->key););
 }
 
 
@@ -545,27 +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;
-    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 hash corruption at hash %p entries %d",
-                        hash, (int)entries);
-
-            PARROT_ASSERT(bucket->value);
-            Parrot_gc_mark_PObj_alive(interp, (PObj *)bucket->value);
-
-            bucket = bucket->next;
-        }
-    }
+    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)>
@@ -580,34 +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;
-    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 hash corruption at hash %p entries %d",
-                        hash, (int)entries);
-
-            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);
-
-            bucket = bucket->next;
-        }
-    }
+    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.
 
@@ -617,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)
 
-    /* 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;
+    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->entries = 0;
+    {
+        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;
+        }
+
+        hash = parrot_create_hash_sized(interp, entry_type, key_type, cmp_fn, key_fn, num_entries);
+
+    }
 
     /* special case for great speed */
     if (key_type   == Hash_key_type_STRING
@@ -639,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) {
@@ -695,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");
-    }
+        });
 }
 
 
@@ -836,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:
@@ -846,7 +743,7 @@
          | --> buckets |     |
          +---+---+---+-+-+-+-+
          ^             ^
-         | old_mem     | hash->bucket_indices
+         | old_mem     | hash->index
     */
 
     /* resize mem */
@@ -867,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;
@@ -881,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);
-
-    /*
-     * 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;
-            }
-        }
-    }
+    memset(new_bi + old_size, 0, sizeof (HashBucket *) * (new_size - old_size));
 
-    /* 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;
 }
 
 
@@ -954,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);
 }
 
@@ -978,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);
 }
 
@@ -1002,7 +897,7 @@
     return parrot_create_hash(interp,
             enum_type_ptr,
             Hash_key_type_ptr,
-            pointer_compare,
+            hash_compare_pointer,
             key_hash_pointer);
 }
 
@@ -1029,7 +924,7 @@
     return parrot_create_hash(interp,
             enum_type_INTVAL,
             Hash_key_type_int,
-            int_compare,
+            hash_compare_int,
             key_hash_int);
 }
 
@@ -1039,8 +934,6 @@
 Hash_key_type hkey_type, hash_comp_fn compare, hash_hash_key_fn keyhash)>
 
 Creates and initializes a hash.  Function pointers determine its behaviors.
-The container passed in is the address of the hash PMC that is using it.  The
-hash and the PMC point to each other.
 
 Memory from this function must be freed.
 
@@ -1056,22 +949,69 @@
         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;
-    hash->container  = PMCNULL;
 
     bp = (HashBucket *)((char *)alloc + sizeof (Hash));
     hash->free_list = NULL;
@@ -1081,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;
     }
@@ -1132,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);
 }
 
@@ -1168,14 +1100,9 @@
     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);
+        func(_bucket->value););
 
     parrot_hash_destroy(interp, hash);
 }
@@ -1205,72 +1132,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)>
 
@@ -1287,35 +1148,48 @@
 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;
 
-    /* a very fast search for very small hashes */
-    if (hash->entries <= SMALL_HASH_SIZE) {
-        const UINTVAL  entries = hash->entries;
-        UINTVAL        i;
+    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);
 
-        for (i = 0; i < entries; ++i) {
-            HashBucket * const bucket = hash->buckets + i;
+        bucket = hash->index[hashval & hash->mask];
+
+        while (bucket) {
+            const STRING *s2 = (const STRING *)bucket->key;
 
-            /* the hash->compare cost is too high for this fast path */
-            if (bucket->key == key)
+            if (s == s2
+            || (hashval == s2->hashval
+            &&  CHARSET_COMPARE(interp, s, s2) == 0))
                 return bucket;
+
+            bucket = bucket->next;
         }
     }
-
-    /* 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];
+    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 */
             if (bucket->key == key
 
             /* ... but the slower comparison is more accurate */
-            || ((hash->compare)(interp, key, bucket->key) == 0))
+            || ((compare)(interp, key, bucket->key) == 0))
                 return bucket;
             bucket = bucket->next;
         }
@@ -1388,30 +1262,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];
+    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;
 
-    /* When the hash is constant, check that the key and value are also
-     * constant. */
-    if (!PMC_IS_NULL(hash->container)
-    &&   PObj_constant_TEST(hash->container)) {
-        if (hash->key_type == Hash_key_type_STRING
-        && !PObj_constant_TEST((PObj *)key))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                "Used non-constant key in constant hash.");
-            if (((hash->entry_type == enum_type_PMC)
-            ||   (hash->entry_type == enum_type_STRING))
-            &&   !PObj_constant_TEST((PObj *)value))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                "Used non-constant value in constant hash.");
-    }
-
-    /* See if we have an existing value for this key */
-    while (bucket) {
-        /* store hash_val or not */
-        if ((hash->compare)(interp, key, bucket->key) == 0)
-            break;
-        bucket = bucket->next;
+        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
@@ -1432,8 +1321,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;
@@ -1455,27 +1344,21 @@
 parrot_hash_delete(PARROT_INTERP, ARGMOD(Hash *hash), ARGIN(void *key))
 {
     ASSERT_ARGS(parrot_hash_delete)
-    HashBucket   *bucket;
-    HashBucket   *prev    = NULL;
     const UINTVAL hashval = (hash->hash_val)(interp, key, hash->seed) & hash->mask;
-
-    for (bucket = hash->bucket_indices[hashval]; bucket; bucket = bucket->next) {
-        if ((hash->compare)(interp, key, bucket->key) == 0) {
-
-            if (prev)
-                prev->next = bucket->next;
-            else
-                hash->bucket_indices[hashval] = bucket->next;
-
-            --hash->entries;
-            bucket->next    = hash->free_list;
-            bucket->key     = NULL;
-            hash->free_list = bucket;
-
-            return;
+    HashBucket   **prev   = &hash->index[hashval];
+    if (*prev) {
+        const hash_comp_fn compare = hash->compare;
+        for (; *prev; prev = &(*prev)->next) {
+            HashBucket *current = *prev;
+            if ((compare)(interp, key, current->key) == 0) {
+                *prev = current->next;
+                --hash->entries;
+                current->next    = hash->free_list;
+                current->key     = NULL;
+                hash->free_list = current;
+                return;
+            }
         }
-
-        prev = bucket;
     }
 }
 
@@ -1516,33 +1399,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:
@@ -1550,15 +1430,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.
 
@@ -1567,7 +1445,7 @@
 */
 
 PARROT_CANNOT_RETURN_NULL
-PMC*
+static PMC*
 get_integer_pmc(PARROT_INTERP, INTVAL value)
 {
     ASSERT_ARGS(get_integer_pmc)
@@ -1579,7 +1457,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.
 
@@ -1588,7 +1466,7 @@
 */
 
 PARROT_CANNOT_RETURN_NULL
-PMC*
+static PMC*
 get_number_pmc(PARROT_INTERP, FLOATVAL value)
 {
     ASSERT_ARGS(get_number_pmc)
@@ -1599,7 +1477,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.
 
@@ -1608,7 +1486,7 @@
 */
 
 PARROT_CANNOT_RETURN_NULL
-PMC *
+static PMC *
 get_string_pmc(PARROT_INTERP, ARGIN(STRING *value))
 {
     ASSERT_ARGS(get_string_pmc)

Modified: branches/gc_massacre/src/hll.c
==============================================================================
--- branches/gc_massacre/src/hll.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/hll.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -364,8 +364,6 @@
 Parrot_get_HLL_type(PARROT_INTERP, INTVAL hll_id, INTVAL core_type)
 {
     ASSERT_ARGS(Parrot_get_HLL_type)
-    PMC    *entry, *type_hash, *hll_info;
-    INTVAL  n, id;
 
     if (hll_id == PARROT_HLL_NONE || hll_id == 0)
         return core_type;
@@ -373,26 +371,28 @@
     if (hll_id < 0)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_GLOBAL_NOT_FOUND,
             "no such HLL ID (%vd)", hll_id);
+    else {
+        PMC * const hll_info = interp->HLL_info;
+        INTVAL  id;
+        PMC    *entry, *type_hash;
 
-    hll_info = interp->HLL_info;
-    n        = VTABLE_elements(interp, hll_info);
+        START_READ_HLL_INFO(interp, hll_info);
+        entry     = VTABLE_get_pmc_keyed_int(interp, hll_info, hll_id);
+        END_READ_HLL_INFO(interp, hll_info);
 
-    if (hll_id >= n)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_GLOBAL_NOT_FOUND,
-            "no such HLL ID (%vd)", hll_id);
-
-    START_READ_HLL_INFO(interp, hll_info);
-    entry     = VTABLE_get_pmc_keyed_int(interp, hll_info, hll_id);
-    END_READ_HLL_INFO(interp, hll_info);
+        if (PMC_IS_NULL(entry))
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_GLOBAL_NOT_FOUND, "no such HLL ID (%vd)", hll_id);
 
-    type_hash = VTABLE_get_pmc_keyed_int(interp, entry, e_HLL_typemap);
+        type_hash = VTABLE_get_pmc_keyed_int(interp, entry, e_HLL_typemap);
 
-    if (PMC_IS_NULL(type_hash))
-        return core_type;
+        if (PMC_IS_NULL(type_hash))
+            return core_type;
 
-    id = VTABLE_get_integer_keyed_int(interp, type_hash, core_type);
+        id = VTABLE_get_integer_keyed_int(interp, type_hash, core_type);
 
-    return id ? id : core_type;
+        return id ? id : core_type;
+    }
 }
 
 /*
@@ -412,6 +412,8 @@
 {
     ASSERT_ARGS(Parrot_get_ctx_HLL_type)
     const INTVAL hll_id = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp));
+    if (!hll_id || hll_id == PARROT_HLL_NONE)
+        return core_type;
 
     return Parrot_get_HLL_type(interp, hll_id, core_type);
 }

Modified: branches/gc_massacre/src/interp/inter_misc.c
==============================================================================
--- branches/gc_massacre/src/interp/inter_misc.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/interp/inter_misc.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -64,8 +64,8 @@
 
 /*
 
-=item C<void register_raw_nci_method_in_ns(PARROT_INTERP, const int type, void
-*func, STRING *name)>
+=item C<void register_native_pcc_method_in_ns(PARROT_INTERP, const int type,
+void *func, STRING *name, STRING *signature)>
 
 Create an entry in the C<nci_method_table> for the given raw NCI method
 of PMC class C<type>.
@@ -76,14 +76,14 @@
 
 PARROT_EXPORT
 void
-register_raw_nci_method_in_ns(PARROT_INTERP, const int type, ARGIN(void *func),
-        ARGIN(STRING *name))
+register_native_pcc_method_in_ns(PARROT_INTERP, const int type, ARGIN(void *func),
+        ARGIN(STRING *name), ARGIN(STRING *signature))
 {
-    ASSERT_ARGS(register_raw_nci_method_in_ns)
-    PMC    * const method      = Parrot_pmc_new(interp, enum_class_NCI);
+    ASSERT_ARGS(register_native_pcc_method_in_ns)
+    PMC * method = Parrot_pmc_new(interp, enum_class_NativePCCMethod);
 
     /* setup call func */
-    VTABLE_set_pointer(interp, method, func);
+    VTABLE_set_pointer_keyed_str(interp, method, signature, func);
 
     /* insert it into namespace */
     VTABLE_set_pmc_keyed_str(interp, interp->vtables[type]->_namespace,

Modified: branches/gc_massacre/src/io/socket_api.c
==============================================================================
--- branches/gc_massacre/src/io/socket_api.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/io/socket_api.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -107,6 +107,7 @@
 
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 INTVAL

Modified: branches/gc_massacre/src/io/utf8.c
==============================================================================
--- branches/gc_massacre/src/io/utf8.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/io/utf8.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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) {
@@ -78,14 +78,11 @@
                                          Parrot_unicode_charset_ptr, 0);
                 s2->bufused  = len2;
 
-                /* TT #1257: need to check the amount read here? */
                 read = Parrot_io_read_buffer(interp, filehandle, &s2);
                 UNUSED(read);
 
                 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 +90,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/gc_massacre/src/multidispatch.c
==============================================================================
--- branches/gc_massacre/src/multidispatch.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/multidispatch.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -43,6 +43,7 @@
 #include "parrot/oplib/ops.h"
 #include "multidispatch.str"
 #include "pmc/pmc_nci.h"
+#include "pmc/pmc_nativepccmethod.h"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_callcontext.h"
 
@@ -590,8 +591,17 @@
     Parrot_Sub_attributes *sub;
     INTVAL      args, dist, i, j, n, m;
 
-    /* has to be a builtin multi method */
-    if (pmc->vtable->base_type == enum_class_NCI) {
+    if (pmc->vtable->base_type == enum_class_NativePCCMethod) {
+        GETATTR_NativePCCMethod_mmd_multi_sig(interp, pmc, multi_sig);
+        if (PMC_IS_NULL(multi_sig)) {
+            STRING *long_sig;
+
+            GETATTR_NativePCCMethod_mmd_long_signature(interp, pmc, long_sig);
+            multi_sig = mmd_build_type_tuple_from_long_sig(interp, long_sig);
+            SETATTR_NativePCCMethod_mmd_multi_sig(interp, pmc, multi_sig);
+        }
+    }
+    else if (pmc->vtable->base_type == enum_class_NCI) {
         GETATTR_NCI_multi_sig(interp, pmc, multi_sig);
         if (PMC_IS_NULL(multi_sig)) {
             STRING *long_sig;
@@ -602,10 +612,10 @@
         }
     }
     else {
-        /* not a multi; no distance */
         PMC_get_sub(interp, pmc, sub);
+
         if (!sub->multi_signature)
-            return 0;
+            return 0; /* not a multi; no distance */
 
         multi_sig = Parrot_mmd_get_cached_multi_sig(interp, pmc);
     }
@@ -963,18 +973,19 @@
     ASSERT_ARGS(Parrot_mmd_add_multi_from_long_sig)
     Parrot_Sub_attributes *sub;
     STRING     *sub_str     = CONST_STRING(interp, "Sub");
-    STRING     *closure_str = CONST_STRING(interp, "Closure");
     PMC        *type_list   = Parrot_str_split(interp, CONST_STRING(interp, ","), long_sig);
     STRING     *ns_name     = VTABLE_get_string_keyed_int(interp, type_list, 0);
 
     /* Attach a type tuple array to the sub for multi dispatch */
     PMC    *multi_sig = mmd_build_type_tuple_from_type_list(interp, type_list);
 
-    if (sub_obj->vtable->base_type == enum_class_NCI) {
+    if (sub_obj->vtable->base_type == enum_class_NativePCCMethod) {
+        SETATTR_NativePCCMethod_mmd_multi_sig(interp, sub_obj, multi_sig);
+    }
+    else if (sub_obj->vtable->base_type == enum_class_NCI) {
         SETATTR_NCI_multi_sig(interp, sub_obj, multi_sig);
     }
-    else if (VTABLE_isa(interp, sub_obj, sub_str)
-         ||  VTABLE_isa(interp, sub_obj, closure_str)) {
+    else if (VTABLE_isa(interp, sub_obj, sub_str)) {
         PMC_get_sub(interp, sub_obj, sub);
         sub->multi_signature = multi_sig;
     }

Modified: branches/gc_massacre/src/namespace.c
==============================================================================
--- branches/gc_massacre/src/namespace.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/namespace.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -607,35 +607,6 @@
 
 /*
 
-=item C<PMC * Parrot_find_global_s(PARROT_INTERP, STRING *str_key, STRING
-*globalname)>
-
-Search the namespace designated by C<str_key>, or the HLL root if
-C<str_key> is NULL, for an object with name C<globalname>.  Return the
-object, or NULL if not found.
-
-TT #1222 - For now this function prefers non-namespaces, it will eventually
-entirely use the untyped interface.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC *
-Parrot_find_global_s(PARROT_INTERP, ARGIN_NULLOK(STRING *str_key),
-        ARGIN_NULLOK(STRING *globalname))
-{
-    ASSERT_ARGS(Parrot_find_global_s)
-    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
-    PMC * const ns = Parrot_ns_get_namespace_keyed_str(interp, hll_ns, str_key);
-    return Parrot_ns_find_namespace_global(interp, ns, globalname);
-}
-
-/*
-
 =item C<void Parrot_ns_store_global(PARROT_INTERP, PMC *ns, STRING *globalname,
 PMC *val)>
 
@@ -661,33 +632,6 @@
 
 /*
 
-=item C<void Parrot_store_global_s(PARROT_INTERP, STRING *str_key, STRING
-*globalname, PMC *val)>
-
-Store the PMC C<val> into the namespace designated by C<str_key>, or
-the HLL root if C<str_key> is NULL, with the name C<globalname>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_store_global_s(PARROT_INTERP, ARGIN_NULLOK(STRING *str_key),
-        ARGIN_NULLOK(STRING *globalname), ARGIN_NULLOK(PMC *val))
-{
-    ASSERT_ARGS(Parrot_store_global_s)
-    PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
-    PMC * const ns = Parrot_ns_make_namespace_keyed_str(interp, hll_ns, str_key);
-    Parrot_ns_store_global(interp, ns, globalname, val);
-
-    /* TT #1225 - method cache invalidation should be a namespace function */
-    Parrot_invalidate_method_cache(interp, str_key);
-}
-
-
-/*
-
 =item C<PMC * Parrot_ns_find_global_from_op(PARROT_INTERP, PMC *ns, STRING
 *globalname, void *next)>
 
@@ -783,9 +727,6 @@
     PMC *ns;
     Parrot_Sub_attributes *sub;
 
-    /* PF structures aren't fully constructed yet */
-    Parrot_block_GC_mark(interp);
-
     /* store relative to HLL namespace */
     PMC_get_sub(interp, sub_pmc, sub);
     Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp), sub->HLL_id);
@@ -818,7 +759,6 @@
 
     /* restore HLL_id */
     Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp), cur_id);
-    Parrot_unblock_GC_mark(interp);
 }
 
 /*

Modified: branches/gc_massacre/src/oo.c
==============================================================================
--- branches/gc_massacre/src/oo.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/oo.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -50,15 +50,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC * find_method_direct_1(PARROT_INTERP,
-    ARGIN(PMC *_class),
-    ARGIN(STRING *method_name))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
 PARROT_INLINE
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
@@ -81,10 +72,6 @@
 #define ASSERT_ARGS_fail_if_type_exists __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_find_method_direct_1 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(_class) \
-    , PARROT_ASSERT_ARG(method_name))
 #define ASSERT_ARGS_get_pmc_proxy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_invalidate_all_caches __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -94,6 +81,65 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+
+/*
+
+=item C<static void debug_trace_find_meth(PARROT_INTERP, const PMC *_class,
+const STRING *name, const PMC *sub)>
+
+Print some information about the search for a sub.
+
+=cut
+
+*/
+
+#ifdef NDEBUG
+#  define TRACE_FM(i, c, m, sub)
+#else
+#  define TRACE_FM(i, c, m, sub) \
+    debug_trace_find_meth((i), (c), (m), (sub))
+
+static void
+debug_trace_find_meth(PARROT_INTERP, ARGIN(const PMC *_class),
+        ARGIN(const STRING *name), ARGIN_NULLOK(const PMC *sub))
+{
+    ASSERT_ARGS(debug_trace_find_meth)
+    STRING *class_name;
+    const char *result;
+    Interp *tracer;
+
+    if (!Interp_trace_TEST(interp, PARROT_TRACE_FIND_METH_FLAG))
+        return;
+
+    if (PObj_is_class_TEST(_class)) {
+        SLOTTYPE * const class_array    = PMC_data_typed(_class, SLOTTYPE *);
+        PMC      * const class_name_pmc = get_attrib_num(class_array, PCD_CLASS_NAME);
+        class_name                      = VTABLE_get_string(interp, class_name_pmc);
+    }
+    else
+        class_name = _class->vtable->whoami;
+
+    if (sub) {
+        if (sub->vtable->base_type == enum_class_NativePCCMethod)
+            result = "NativePCCMethod";
+        else if (sub->vtable->base_type == enum_class_NCI)
+            result = "NCI";
+        else
+            result = "Sub";
+    }
+    else
+        result = "no";
+
+    tracer = (interp->pdb && interp->pdb->debugger) ?
+        interp->pdb->debugger :
+        interp;
+    Parrot_io_eprintf(tracer, "# find_method class '%Ss' method '%Ss': %s\n",
+            class_name, name, result);
+}
+
+#endif
+
+
 /*
 
 =item C<void Parrot_oo_extract_methods_from_namespace(PARROT_INTERP, PMC *self,
@@ -870,15 +916,38 @@
 Parrot_find_method_direct(PARROT_INTERP, ARGIN(PMC *_class), ARGIN(STRING *method_name))
 {
     ASSERT_ARGS(Parrot_find_method_direct)
-    PMC * const found = find_method_direct_1(interp, _class, method_name);
 
-    if (!PMC_IS_NULL(found))
-        return found;
+    STRING * const class_str   = CONST_STRING(interp, "class");
+    STRING * const methods_str = CONST_STRING(interp, "methods");
+    PMC    * const mro         = _class->vtable->mro;
+    const INTVAL   n           = VTABLE_elements(interp, mro);
+    INTVAL         i;
+
+    for (i = 0; i < n; ++i) {
+        PMC * const _class    = VTABLE_get_pmc_keyed_int(interp, mro, i);
+        PMC * const ns        = VTABLE_get_namespace(interp, _class);
+        PMC * const class_obj = VTABLE_inspect_str(interp, ns, class_str);
+        PMC        *method    = PMCNULL;
+        PMC        *method_hash;
+
+        if (PMC_IS_NULL(class_obj))
+            method_hash = VTABLE_inspect_str(interp, ns, methods_str);
+        else
+            method_hash = VTABLE_inspect_str(interp, class_obj, methods_str);
+
+        if (!PMC_IS_NULL(method_hash))
+            method = VTABLE_get_pmc_keyed_str(interp, method_hash, method_name);
+
+        if (PMC_IS_NULL(method))
+            method = VTABLE_get_pmc_keyed_str(interp, ns, method_name);
 
+        TRACE_FM(interp, _class, method_name, method);
 
-    if (Parrot_str_equal(interp, method_name, CONST_STRING(interp, "__get_string")))
-        return find_method_direct_1(interp, _class, CONST_STRING(interp, "__get_repr"));
+        if (!PMC_IS_NULL(method))
+            return method;
+    }
 
+    TRACE_FM(interp, _class, method_name, NULL);
     return PMCNULL;
 }
 
@@ -908,16 +977,14 @@
 {
     ASSERT_ARGS(Parrot_find_method_with_cache)
 
-    UINTVAL type, bits;
-    Caches           *mc;
-    Meth_cache_entry *e;
-
-    PARROT_ASSERT(method_name != 0);
-
 #if DISABLE_METH_CACHE
     return Parrot_find_method_direct(interp, _class, method_name);
 #else
 
+    Caches           *mc;
+    Meth_cache_entry *e;
+    UINTVAL type, bits;
+
     if (! PObj_constant_TEST(method_name))
         return Parrot_find_method_direct(interp, _class, method_name);
 
@@ -926,31 +993,29 @@
     bits = (((UINTVAL) Buffer_bufstart(method_name)) >> 2) & TBL_SIZE_MASK;
 
     if (type >= mc->mc_size) {
-        if (mc->idx) {
+        if (mc->idx)
             mc->idx = mem_gc_realloc_n_typed_zeroed(interp, mc->idx,
-                    type + 1, mc->mc_size, Meth_cache_entry**);
-        }
-        else {
-            mc->idx = mem_gc_allocate_n_zeroed_typed(interp, type + 1, Meth_cache_entry**);
-        }
+                    type + 1, mc->mc_size, Meth_cache_entry **);
+        else
+            mc->idx = mem_gc_allocate_n_zeroed_typed(interp, type + 1,
+                        Meth_cache_entry **);
+
         mc->mc_size = type + 1;
     }
 
-    if (mc->idx[type] == NULL) {
+    if (! mc->idx[type])
         mc->idx[type] = mem_gc_allocate_n_zeroed_typed(interp,
-                TBL_SIZE, Meth_cache_entry*);
-    }
+                TBL_SIZE, Meth_cache_entry *);
 
-    e   = mc->idx[type][bits];
+    e = mc->idx[type][bits];
 
-    while (e && e->strstart != Buffer_bufstart(method_name)) {
-        e   = e->next;
-    }
+    while (e && e->strstart != Buffer_bufstart(method_name))
+        e = e->next;
 
     if (!e) {
         /* when here no or no correct entry was at [bits] */
         /* Use zeroed allocation because find_method_direct can trigger GC */
-        e     = mem_gc_allocate_zeroed_typed(interp, Meth_cache_entry);
+        e = mem_gc_allocate_zeroed_typed(interp, Meth_cache_entry);
 
         mc->idx[type][bits] = e;
 
@@ -967,116 +1032,6 @@
 
 /*
 
-=item C<static void debug_trace_find_meth(PARROT_INTERP, const PMC *_class,
-const STRING *name, const PMC *sub)>
-
-Print some information about the search for a sub.
-
-=cut
-
-*/
-
-#ifdef NDEBUG
-#  define TRACE_FM(i, c, m, sub)
-#else
-#  define TRACE_FM(i, c, m, sub) \
-    debug_trace_find_meth((i), (c), (m), (sub))
-
-static void
-debug_trace_find_meth(PARROT_INTERP, ARGIN(const PMC *_class),
-        ARGIN(const STRING *name), ARGIN_NULLOK(const PMC *sub))
-{
-    ASSERT_ARGS(debug_trace_find_meth)
-    STRING *class_name;
-    const char *result;
-    Interp *tracer;
-
-    if (!Interp_trace_TEST(interp, PARROT_TRACE_FIND_METH_FLAG))
-        return;
-
-    if (PObj_is_class_TEST(_class)) {
-        SLOTTYPE * const class_array    = PMC_data_typed(_class, SLOTTYPE *);
-        PMC      * const class_name_pmc = get_attrib_num(class_array, PCD_CLASS_NAME);
-        class_name                      = VTABLE_get_string(interp, class_name_pmc);
-    }
-    else
-        class_name = _class->vtable->whoami;
-
-    if (sub) {
-        if (sub->vtable->base_type == enum_class_NCI)
-            result = "NCI";
-        else
-            result = "Sub";
-    }
-    else
-        result = "no";
-
-    tracer = (interp->pdb && interp->pdb->debugger) ?
-        interp->pdb->debugger :
-        interp;
-    Parrot_io_eprintf(tracer, "# find_method class '%Ss' method '%Ss': %s\n",
-            class_name, name, result);
-}
-
-#endif
-
-
-/*
-
-=item C<static PMC * find_method_direct_1(PARROT_INTERP, PMC *_class, STRING
-*method_name)>
-
-Find the method with the given name in the specified class.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static PMC *
-find_method_direct_1(PARROT_INTERP, ARGIN(PMC *_class),
-                              ARGIN(STRING *method_name))
-{
-    ASSERT_ARGS(find_method_direct_1)
-    INTVAL i;
-
-    PMC * const  mro = _class->vtable->mro;
-    const INTVAL n   = VTABLE_elements(interp, mro);
-    STRING * const methods_str = CONST_STRING(interp, "methods");
-    STRING * const class_str = CONST_STRING(interp, "class");
-
-    for (i = 0; i < n; ++i) {
-        PMC * const _class    = VTABLE_get_pmc_keyed_int(interp, mro, i);
-        PMC * const ns        = VTABLE_get_namespace(interp, _class);
-        PMC * const class_obj = VTABLE_inspect_str(interp, ns, class_str);
-        PMC           *method = PMCNULL;
-        PMC * method_hash;
-
-        if (PMC_IS_NULL(class_obj))
-            method_hash = VTABLE_inspect_str(interp, ns, methods_str);
-        else
-            method_hash = VTABLE_inspect_str(interp, class_obj, methods_str);
-
-        if (!PMC_IS_NULL(method_hash))
-            method = VTABLE_get_pmc_keyed_str(interp, method_hash, method_name);
-
-        if (PMC_IS_NULL(method))
-            method = VTABLE_get_pmc_keyed_str(interp, ns, method_name);
-
-        TRACE_FM(interp, _class, method_name, method);
-
-        if (!PMC_IS_NULL(method))
-            return method;
-    }
-
-    TRACE_FM(interp, _class, method_name, NULL);
-    return PMCNULL;
-}
-
-
-/*
-
 =item C<static PMC* C3_merge(PARROT_INTERP, PMC *merge_list)>
 
 Merge together the MRO of the items in the list.

Modified: branches/gc_massacre/src/ops/core.ops
==============================================================================
--- branches/gc_massacre/src/ops/core.ops	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/ops/core.ops	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1009,19 +1009,22 @@
 
 =item .PARROT_ERRORS_GLOBALS_FLAG
 
-Throw an exception if global doesn't exist.  Default: on.
+Throw an exception if a global doesn't exist. This
+flag is not used by Parrot and is deprecated.
 
 =item .PARROT_ERRORS_OVERFLOW_FLAG
 
-Throw math overflow instead of promoting to BigInt.  Default: off.
+When performing arithmetic on Integer PMCs, throw a math overflow exception
+instead of promoting to BigInt. This flag does not pertain to native integers,
+which are never promoted. Default: off.
 
 =item .PARROT_ERRORS_PARAM_COUNT_FLAG
 
-Throw exception on argument <-> param count mismatch.  Default: off.
+Throw an exception on an argument versus parameter count mismatch. Default: on.
 
 =item .PARROT_ERRORS_RESULT_COUNT_FLAG
 
-Throw exception on return <-> result count mismatch.  Default: off.
+Throw an exception on a return versus result count mismatch. Default: off.
 
 =item .PARROT_ERRORS_ALL_FLAG
 

Modified: branches/gc_massacre/src/ops/core_ops.c
==============================================================================
--- branches/gc_massacre/src/ops/core_ops.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/ops/core_ops.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -28,6 +28,9 @@
 static int get_op(PARROT_INTERP, const char * name, int full);
 
 
+/* XXX should be static, but C++ doesn't want to play ball */
+extern op_lib_t core_op_lib;
+
 
 
 #include "parrot/dynext.h"
@@ -1173,7 +1176,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 1 */
     /* type PARROT_INLINE_OP, */
@@ -1185,7 +1189,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 2 */
     /* type PARROT_INLINE_OP, */
@@ -1197,7 +1202,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 3 */
     /* type PARROT_INLINE_OP, */
@@ -1209,7 +1215,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 4 */
     /* type PARROT_INLINE_OP, */
@@ -1221,7 +1228,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 5 */
     /* type PARROT_INLINE_OP, */
@@ -1233,7 +1241,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 6 */
     /* type PARROT_INLINE_OP, */
@@ -1245,7 +1254,8 @@
     2,
     { PARROT_ARG_SC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 7 */
     /* type PARROT_INLINE_OP, */
@@ -1257,7 +1267,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 8 */
     /* type PARROT_INLINE_OP, */
@@ -1269,7 +1280,8 @@
     2,
     { PARROT_ARG_SC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 9 */
     /* type PARROT_INLINE_OP, */
@@ -1281,7 +1293,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 1 }
+    { 1 },
+    &core_op_lib
   },
   { /* 10 */
     /* type PARROT_INLINE_OP, */
@@ -1293,7 +1306,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 1 }
+    { 1 },
+    &core_op_lib
   },
   { /* 11 */
     /* type PARROT_INLINE_OP, */
@@ -1305,7 +1319,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 12 */
     /* type PARROT_INLINE_OP, */
@@ -1317,7 +1332,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 13 */
     /* type PARROT_INLINE_OP, */
@@ -1329,7 +1345,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 14 */
     /* type PARROT_INLINE_OP, */
@@ -1341,7 +1358,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 1 }
+    { 1 },
+    &core_op_lib
   },
   { /* 15 */
     /* type PARROT_INLINE_OP, */
@@ -1353,7 +1371,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 1 }
+    { 1 },
+    &core_op_lib
   },
   { /* 16 */
     /* type PARROT_FUNCTION_OP, */
@@ -1365,7 +1384,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 17 */
     /* type PARROT_INLINE_OP, */
@@ -1377,7 +1397,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 18 */
     /* type PARROT_INLINE_OP, */
@@ -1389,7 +1410,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 19 */
     /* type PARROT_FUNCTION_OP, */
@@ -1401,7 +1423,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 20 */
     /* type PARROT_FUNCTION_OP, */
@@ -1413,7 +1436,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 21 */
     /* type PARROT_INLINE_OP, */
@@ -1425,7 +1449,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 22 */
     /* type PARROT_INLINE_OP, */
@@ -1437,7 +1462,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 23 */
     /* type PARROT_FUNCTION_OP, */
@@ -1449,7 +1475,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 24 */
     /* type PARROT_FUNCTION_OP, */
@@ -1461,7 +1488,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 25 */
     /* type PARROT_INLINE_OP, */
@@ -1473,7 +1501,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 26 */
     /* type PARROT_INLINE_OP, */
@@ -1485,7 +1514,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 27 */
     /* type PARROT_INLINE_OP, */
@@ -1497,7 +1527,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 28 */
     /* type PARROT_INLINE_OP, */
@@ -1509,7 +1540,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 29 */
     /* type PARROT_INLINE_OP, */
@@ -1521,7 +1553,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 30 */
     /* type PARROT_INLINE_OP, */
@@ -1533,7 +1566,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 31 */
     /* type PARROT_INLINE_OP, */
@@ -1545,7 +1579,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 32 */
     /* type PARROT_FUNCTION_OP, */
@@ -1557,7 +1592,8 @@
     2,
     { PARROT_ARG_PC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 33 */
     /* type PARROT_FUNCTION_OP, */
@@ -1569,7 +1605,8 @@
     2,
     { PARROT_ARG_PC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 34 */
     /* type PARROT_FUNCTION_OP, */
@@ -1581,7 +1618,8 @@
     2,
     { PARROT_ARG_PC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 35 */
     /* type PARROT_FUNCTION_OP, */
@@ -1593,7 +1631,8 @@
     2,
     { PARROT_ARG_PC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 36 */
     /* type PARROT_INLINE_OP, */
@@ -1605,7 +1644,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 37 */
     /* type PARROT_INLINE_OP, */
@@ -1617,7 +1657,8 @@
     2,
     { PARROT_ARG_PC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 38 */
     /* type PARROT_INLINE_OP, */
@@ -1629,7 +1670,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 39 */
     /* type PARROT_INLINE_OP, */
@@ -1641,7 +1683,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 40 */
     /* type PARROT_INLINE_OP, */
@@ -1653,7 +1696,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 41 */
     /* type PARROT_INLINE_OP, */
@@ -1665,7 +1709,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 42 */
     /* type PARROT_INLINE_OP, */
@@ -1677,7 +1722,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 43 */
     /* type PARROT_INLINE_OP, */
@@ -1689,7 +1735,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 44 */
     /* type PARROT_INLINE_OP, */
@@ -1701,7 +1748,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 45 */
     /* type PARROT_INLINE_OP, */
@@ -1713,7 +1761,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 1 }
+    { 1 },
+    &core_op_lib
   },
   { /* 46 */
     /* type PARROT_INLINE_OP, */
@@ -1725,7 +1774,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 47 */
     /* type PARROT_INLINE_OP, */
@@ -1737,7 +1787,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 48 */
     /* type PARROT_INLINE_OP, */
@@ -1749,7 +1800,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 49 */
     /* type PARROT_INLINE_OP, */
@@ -1761,7 +1813,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 50 */
     /* type PARROT_INLINE_OP, */
@@ -1773,7 +1826,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 51 */
     /* type PARROT_INLINE_OP, */
@@ -1785,7 +1839,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 52 */
     /* type PARROT_INLINE_OP, */
@@ -1797,7 +1852,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 53 */
     /* type PARROT_INLINE_OP, */
@@ -1809,7 +1865,8 @@
     2,
     { PARROT_ARG_SC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 54 */
     /* type PARROT_INLINE_OP, */
@@ -1821,7 +1878,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 55 */
     /* type PARROT_INLINE_OP, */
@@ -1833,7 +1891,8 @@
     2,
     { PARROT_ARG_PC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 56 */
     /* type PARROT_INLINE_OP, */
@@ -1845,7 +1904,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 57 */
     /* type PARROT_INLINE_OP, */
@@ -1857,7 +1917,8 @@
     3,
     { PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 58 */
     /* type PARROT_INLINE_OP, */
@@ -1869,7 +1930,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 59 */
     /* type PARROT_INLINE_OP, */
@@ -1881,7 +1943,8 @@
     3,
     { PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 60 */
     /* type PARROT_INLINE_OP, */
@@ -1893,7 +1956,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 61 */
     /* type PARROT_INLINE_OP, */
@@ -1905,7 +1969,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 62 */
     /* type PARROT_INLINE_OP, */
@@ -1917,7 +1982,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 63 */
     /* type PARROT_INLINE_OP, */
@@ -1929,7 +1995,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 64 */
     /* type PARROT_INLINE_OP, */
@@ -1941,7 +2008,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 65 */
     /* type PARROT_INLINE_OP, */
@@ -1953,7 +2021,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 66 */
     /* type PARROT_INLINE_OP, */
@@ -1965,7 +2034,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 67 */
     /* type PARROT_INLINE_OP, */
@@ -1977,7 +2047,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 68 */
     /* type PARROT_INLINE_OP, */
@@ -1989,7 +2060,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 69 */
     /* type PARROT_INLINE_OP, */
@@ -2001,7 +2073,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 70 */
     /* type PARROT_INLINE_OP, */
@@ -2013,7 +2086,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 71 */
     /* type PARROT_INLINE_OP, */
@@ -2025,7 +2099,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 72 */
     /* type PARROT_FUNCTION_OP, */
@@ -2037,7 +2112,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 73 */
     /* type PARROT_FUNCTION_OP, */
@@ -2049,7 +2125,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 74 */
     /* type PARROT_FUNCTION_OP, */
@@ -2061,7 +2138,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 75 */
     /* type PARROT_FUNCTION_OP, */
@@ -2073,7 +2151,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 76 */
     /* type PARROT_FUNCTION_OP, */
@@ -2085,7 +2164,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 77 */
     /* type PARROT_FUNCTION_OP, */
@@ -2097,7 +2177,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 78 */
     /* type PARROT_INLINE_OP, */
@@ -2109,7 +2190,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 79 */
     /* type PARROT_INLINE_OP, */
@@ -2121,7 +2203,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 80 */
     /* type PARROT_INLINE_OP, */
@@ -2133,7 +2216,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 81 */
     /* type PARROT_INLINE_OP, */
@@ -2145,7 +2229,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 82 */
     /* type PARROT_INLINE_OP, */
@@ -2157,7 +2242,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 83 */
     /* type PARROT_INLINE_OP, */
@@ -2169,7 +2255,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 84 */
     /* type PARROT_INLINE_OP, */
@@ -2181,7 +2268,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 85 */
     /* type PARROT_INLINE_OP, */
@@ -2193,7 +2281,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 86 */
     /* type PARROT_FUNCTION_OP, */
@@ -2205,7 +2294,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 87 */
     /* type PARROT_FUNCTION_OP, */
@@ -2217,7 +2307,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 88 */
     /* type PARROT_FUNCTION_OP, */
@@ -2229,7 +2320,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 89 */
     /* type PARROT_FUNCTION_OP, */
@@ -2241,7 +2333,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 90 */
     /* type PARROT_FUNCTION_OP, */
@@ -2253,7 +2346,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 91 */
     /* type PARROT_FUNCTION_OP, */
@@ -2265,7 +2359,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 92 */
     /* type PARROT_FUNCTION_OP, */
@@ -2277,7 +2372,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 93 */
     /* type PARROT_FUNCTION_OP, */
@@ -2289,7 +2385,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 94 */
     /* type PARROT_FUNCTION_OP, */
@@ -2301,7 +2398,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 95 */
     /* type PARROT_FUNCTION_OP, */
@@ -2313,7 +2411,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 96 */
     /* type PARROT_INLINE_OP, */
@@ -2325,7 +2424,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 97 */
     /* type PARROT_INLINE_OP, */
@@ -2337,7 +2437,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 98 */
     /* type PARROT_INLINE_OP, */
@@ -2349,7 +2450,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 99 */
     /* type PARROT_INLINE_OP, */
@@ -2361,7 +2463,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 100 */
     /* type PARROT_INLINE_OP, */
@@ -2373,7 +2476,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 101 */
     /* type PARROT_INLINE_OP, */
@@ -2385,7 +2489,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 102 */
     /* type PARROT_FUNCTION_OP, */
@@ -2397,7 +2502,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 103 */
     /* type PARROT_FUNCTION_OP, */
@@ -2409,7 +2515,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 104 */
     /* type PARROT_FUNCTION_OP, */
@@ -2421,7 +2528,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 105 */
     /* type PARROT_FUNCTION_OP, */
@@ -2433,7 +2541,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 106 */
     /* type PARROT_FUNCTION_OP, */
@@ -2445,7 +2554,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 107 */
     /* type PARROT_FUNCTION_OP, */
@@ -2457,7 +2567,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 108 */
     /* type PARROT_INLINE_OP, */
@@ -2469,7 +2580,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 109 */
     /* type PARROT_INLINE_OP, */
@@ -2481,7 +2593,8 @@
     3,
     { PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 110 */
     /* type PARROT_INLINE_OP, */
@@ -2493,7 +2606,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 111 */
     /* type PARROT_INLINE_OP, */
@@ -2505,7 +2619,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 112 */
     /* type PARROT_FUNCTION_OP, */
@@ -2517,7 +2632,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 113 */
     /* type PARROT_FUNCTION_OP, */
@@ -2529,7 +2645,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 114 */
     /* type PARROT_INLINE_OP, */
@@ -2541,7 +2658,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 115 */
     /* type PARROT_INLINE_OP, */
@@ -2553,7 +2671,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 116 */
     /* type PARROT_INLINE_OP, */
@@ -2565,7 +2684,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 117 */
     /* type PARROT_INLINE_OP, */
@@ -2577,7 +2697,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 118 */
     /* type PARROT_INLINE_OP, */
@@ -2589,7 +2710,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 119 */
     /* type PARROT_INLINE_OP, */
@@ -2601,7 +2723,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 120 */
     /* type PARROT_INLINE_OP, */
@@ -2613,7 +2736,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 121 */
     /* type PARROT_INLINE_OP, */
@@ -2625,7 +2749,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 122 */
     /* type PARROT_INLINE_OP, */
@@ -2637,7 +2762,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 123 */
     /* type PARROT_INLINE_OP, */
@@ -2649,7 +2775,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 124 */
     /* type PARROT_INLINE_OP, */
@@ -2661,7 +2788,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 125 */
     /* type PARROT_INLINE_OP, */
@@ -2673,7 +2801,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 126 */
     /* type PARROT_INLINE_OP, */
@@ -2685,7 +2814,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 127 */
     /* type PARROT_INLINE_OP, */
@@ -2697,7 +2827,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 128 */
     /* type PARROT_INLINE_OP, */
@@ -2709,7 +2840,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 129 */
     /* type PARROT_INLINE_OP, */
@@ -2721,7 +2853,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 130 */
     /* type PARROT_INLINE_OP, */
@@ -2733,7 +2866,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 131 */
     /* type PARROT_INLINE_OP, */
@@ -2745,7 +2879,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 132 */
     /* type PARROT_INLINE_OP, */
@@ -2757,7 +2892,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 133 */
     /* type PARROT_INLINE_OP, */
@@ -2769,7 +2905,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 134 */
     /* type PARROT_INLINE_OP, */
@@ -2781,7 +2918,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 135 */
     /* type PARROT_INLINE_OP, */
@@ -2793,7 +2931,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 136 */
     /* type PARROT_INLINE_OP, */
@@ -2805,7 +2944,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 137 */
     /* type PARROT_INLINE_OP, */
@@ -2817,7 +2957,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 138 */
     /* type PARROT_INLINE_OP, */
@@ -2829,7 +2970,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 139 */
     /* type PARROT_INLINE_OP, */
@@ -2841,7 +2983,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 140 */
     /* type PARROT_INLINE_OP, */
@@ -2853,7 +2996,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 141 */
     /* type PARROT_INLINE_OP, */
@@ -2865,7 +3009,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 142 */
     /* type PARROT_INLINE_OP, */
@@ -2877,7 +3022,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 143 */
     /* type PARROT_INLINE_OP, */
@@ -2889,7 +3035,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 144 */
     /* type PARROT_INLINE_OP, */
@@ -2901,7 +3048,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 145 */
     /* type PARROT_INLINE_OP, */
@@ -2913,7 +3061,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 146 */
     /* type PARROT_INLINE_OP, */
@@ -2925,7 +3074,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 147 */
     /* type PARROT_INLINE_OP, */
@@ -2937,7 +3087,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 148 */
     /* type PARROT_INLINE_OP, */
@@ -2949,7 +3100,8 @@
     4,
     { PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 149 */
     /* type PARROT_INLINE_OP, */
@@ -2961,7 +3113,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 150 */
     /* type PARROT_INLINE_OP, */
@@ -2973,7 +3126,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 151 */
     /* type PARROT_INLINE_OP, */
@@ -2985,7 +3139,8 @@
     4,
     { PARROT_ARG_NC, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 152 */
     /* type PARROT_INLINE_OP, */
@@ -2997,7 +3152,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 153 */
     /* type PARROT_FUNCTION_OP, */
@@ -3009,7 +3165,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 154 */
     /* type PARROT_FUNCTION_OP, */
@@ -3021,7 +3178,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 155 */
     /* type PARROT_FUNCTION_OP, */
@@ -3033,7 +3191,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 156 */
     /* type PARROT_FUNCTION_OP, */
@@ -3045,7 +3204,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 157 */
     /* type PARROT_FUNCTION_OP, */
@@ -3057,7 +3217,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 158 */
     /* type PARROT_FUNCTION_OP, */
@@ -3069,7 +3230,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 159 */
     /* type PARROT_FUNCTION_OP, */
@@ -3081,7 +3243,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 160 */
     /* type PARROT_FUNCTION_OP, */
@@ -3093,7 +3256,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 161 */
     /* type PARROT_FUNCTION_OP, */
@@ -3105,7 +3269,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 162 */
     /* type PARROT_FUNCTION_OP, */
@@ -3117,7 +3282,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 163 */
     /* type PARROT_FUNCTION_OP, */
@@ -3129,7 +3295,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 164 */
     /* type PARROT_FUNCTION_OP, */
@@ -3141,7 +3308,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 165 */
     /* type PARROT_FUNCTION_OP, */
@@ -3153,7 +3321,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 166 */
     /* type PARROT_FUNCTION_OP, */
@@ -3165,7 +3334,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 167 */
     /* type PARROT_FUNCTION_OP, */
@@ -3177,7 +3347,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 168 */
     /* type PARROT_FUNCTION_OP, */
@@ -3189,7 +3360,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 169 */
     /* type PARROT_FUNCTION_OP, */
@@ -3201,7 +3373,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 170 */
     /* type PARROT_INLINE_OP, */
@@ -3213,7 +3386,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 171 */
     /* type PARROT_INLINE_OP, */
@@ -3225,7 +3399,8 @@
     4,
     { PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 172 */
     /* type PARROT_INLINE_OP, */
@@ -3237,7 +3412,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 173 */
     /* type PARROT_INLINE_OP, */
@@ -3249,7 +3425,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 174 */
     /* type PARROT_INLINE_OP, */
@@ -3261,7 +3438,8 @@
     4,
     { PARROT_ARG_NC, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 175 */
     /* type PARROT_INLINE_OP, */
@@ -3273,7 +3451,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 176 */
     /* type PARROT_FUNCTION_OP, */
@@ -3285,7 +3464,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 177 */
     /* type PARROT_FUNCTION_OP, */
@@ -3297,7 +3477,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 178 */
     /* type PARROT_FUNCTION_OP, */
@@ -3309,7 +3490,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 179 */
     /* type PARROT_FUNCTION_OP, */
@@ -3321,7 +3503,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 180 */
     /* type PARROT_FUNCTION_OP, */
@@ -3333,7 +3516,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 181 */
     /* type PARROT_FUNCTION_OP, */
@@ -3345,7 +3529,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 182 */
     /* type PARROT_FUNCTION_OP, */
@@ -3357,7 +3542,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 183 */
     /* type PARROT_FUNCTION_OP, */
@@ -3369,7 +3555,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 184 */
     /* type PARROT_FUNCTION_OP, */
@@ -3381,7 +3568,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 185 */
     /* type PARROT_FUNCTION_OP, */
@@ -3393,7 +3581,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 186 */
     /* type PARROT_FUNCTION_OP, */
@@ -3405,7 +3594,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 187 */
     /* type PARROT_FUNCTION_OP, */
@@ -3417,7 +3607,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 188 */
     /* type PARROT_FUNCTION_OP, */
@@ -3429,7 +3620,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 189 */
     /* type PARROT_FUNCTION_OP, */
@@ -3441,7 +3633,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 190 */
     /* type PARROT_FUNCTION_OP, */
@@ -3453,7 +3646,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 191 */
     /* type PARROT_FUNCTION_OP, */
@@ -3465,7 +3659,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 192 */
     /* type PARROT_FUNCTION_OP, */
@@ -3477,7 +3672,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 193 */
     /* type PARROT_INLINE_OP, */
@@ -3489,7 +3685,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 194 */
     /* type PARROT_INLINE_OP, */
@@ -3501,7 +3698,8 @@
     4,
     { PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 195 */
     /* type PARROT_INLINE_OP, */
@@ -3513,7 +3711,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 196 */
     /* type PARROT_INLINE_OP, */
@@ -3525,7 +3724,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 197 */
     /* type PARROT_INLINE_OP, */
@@ -3537,7 +3737,8 @@
     4,
     { PARROT_ARG_NC, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 198 */
     /* type PARROT_INLINE_OP, */
@@ -3549,7 +3750,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 199 */
     /* type PARROT_FUNCTION_OP, */
@@ -3561,7 +3763,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 200 */
     /* type PARROT_FUNCTION_OP, */
@@ -3573,7 +3776,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 201 */
     /* type PARROT_FUNCTION_OP, */
@@ -3585,7 +3789,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 202 */
     /* type PARROT_FUNCTION_OP, */
@@ -3597,7 +3802,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 203 */
     /* type PARROT_FUNCTION_OP, */
@@ -3609,7 +3815,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 204 */
     /* type PARROT_FUNCTION_OP, */
@@ -3621,7 +3828,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 205 */
     /* type PARROT_FUNCTION_OP, */
@@ -3633,7 +3841,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 206 */
     /* type PARROT_FUNCTION_OP, */
@@ -3645,7 +3854,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 207 */
     /* type PARROT_FUNCTION_OP, */
@@ -3657,7 +3867,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 208 */
     /* type PARROT_FUNCTION_OP, */
@@ -3669,7 +3880,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 209 */
     /* type PARROT_FUNCTION_OP, */
@@ -3681,7 +3893,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 210 */
     /* type PARROT_FUNCTION_OP, */
@@ -3693,7 +3906,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 211 */
     /* type PARROT_INLINE_OP, */
@@ -3705,7 +3919,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 212 */
     /* type PARROT_INLINE_OP, */
@@ -3717,7 +3932,8 @@
     4,
     { PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 213 */
     /* type PARROT_INLINE_OP, */
@@ -3729,7 +3945,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 214 */
     /* type PARROT_INLINE_OP, */
@@ -3741,7 +3958,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 215 */
     /* type PARROT_INLINE_OP, */
@@ -3753,7 +3971,8 @@
     4,
     { PARROT_ARG_NC, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 216 */
     /* type PARROT_INLINE_OP, */
@@ -3765,7 +3984,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 217 */
     /* type PARROT_FUNCTION_OP, */
@@ -3777,7 +3997,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 218 */
     /* type PARROT_FUNCTION_OP, */
@@ -3789,7 +4010,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 219 */
     /* type PARROT_FUNCTION_OP, */
@@ -3801,7 +4023,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 220 */
     /* type PARROT_FUNCTION_OP, */
@@ -3813,7 +4036,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 221 */
     /* type PARROT_FUNCTION_OP, */
@@ -3825,7 +4049,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 222 */
     /* type PARROT_FUNCTION_OP, */
@@ -3837,7 +4062,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 223 */
     /* type PARROT_FUNCTION_OP, */
@@ -3849,7 +4075,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 224 */
     /* type PARROT_FUNCTION_OP, */
@@ -3861,7 +4088,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 225 */
     /* type PARROT_FUNCTION_OP, */
@@ -3873,7 +4101,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 226 */
     /* type PARROT_FUNCTION_OP, */
@@ -3885,7 +4114,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 227 */
     /* type PARROT_FUNCTION_OP, */
@@ -3897,7 +4127,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 228 */
     /* type PARROT_FUNCTION_OP, */
@@ -3909,7 +4140,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 229 */
     /* type PARROT_FUNCTION_OP, */
@@ -3921,7 +4153,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 230 */
     /* type PARROT_FUNCTION_OP, */
@@ -3933,7 +4166,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 231 */
     /* type PARROT_FUNCTION_OP, */
@@ -3945,7 +4179,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 232 */
     /* type PARROT_FUNCTION_OP, */
@@ -3957,7 +4192,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 233 */
     /* type PARROT_FUNCTION_OP, */
@@ -3969,7 +4205,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 234 */
     /* type PARROT_FUNCTION_OP, */
@@ -3981,7 +4218,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 235 */
     /* type PARROT_FUNCTION_OP, */
@@ -3993,7 +4231,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 236 */
     /* type PARROT_FUNCTION_OP, */
@@ -4005,7 +4244,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 237 */
     /* type PARROT_FUNCTION_OP, */
@@ -4017,7 +4257,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 238 */
     /* type PARROT_FUNCTION_OP, */
@@ -4029,7 +4270,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 239 */
     /* type PARROT_FUNCTION_OP, */
@@ -4041,7 +4283,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 240 */
     /* type PARROT_FUNCTION_OP, */
@@ -4053,7 +4296,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 241 */
     /* type PARROT_FUNCTION_OP, */
@@ -4065,7 +4309,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 242 */
     /* type PARROT_FUNCTION_OP, */
@@ -4077,7 +4322,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_NC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 243 */
     /* type PARROT_FUNCTION_OP, */
@@ -4089,7 +4335,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 244 */
     /* type PARROT_FUNCTION_OP, */
@@ -4101,7 +4348,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 245 */
     /* type PARROT_FUNCTION_OP, */
@@ -4113,7 +4361,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 246 */
     /* type PARROT_FUNCTION_OP, */
@@ -4125,7 +4374,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 1 }
+    { 0, 0, 1 },
+    &core_op_lib
   },
   { /* 247 */
     /* type PARROT_FUNCTION_OP, */
@@ -4137,7 +4387,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 248 */
     /* type PARROT_FUNCTION_OP, */
@@ -4149,7 +4400,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 249 */
     /* type PARROT_FUNCTION_OP, */
@@ -4161,7 +4413,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 250 */
     /* type PARROT_FUNCTION_OP, */
@@ -4173,7 +4426,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 251 */
     /* type PARROT_INLINE_OP, */
@@ -4185,7 +4439,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 252 */
     /* type PARROT_INLINE_OP, */
@@ -4197,7 +4452,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 253 */
     /* type PARROT_INLINE_OP, */
@@ -4209,7 +4465,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 254 */
     /* type PARROT_INLINE_OP, */
@@ -4221,7 +4478,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 255 */
     /* type PARROT_INLINE_OP, */
@@ -4233,7 +4491,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 256 */
     /* type PARROT_INLINE_OP, */
@@ -4245,7 +4504,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 257 */
     /* type PARROT_INLINE_OP, */
@@ -4257,7 +4517,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 258 */
     /* type PARROT_INLINE_OP, */
@@ -4269,7 +4530,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 259 */
     /* type PARROT_INLINE_OP, */
@@ -4281,7 +4543,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 260 */
     /* type PARROT_INLINE_OP, */
@@ -4293,7 +4556,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 261 */
     /* type PARROT_INLINE_OP, */
@@ -4305,7 +4569,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 262 */
     /* type PARROT_INLINE_OP, */
@@ -4317,7 +4582,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 263 */
     /* type PARROT_INLINE_OP, */
@@ -4329,7 +4595,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 264 */
     /* type PARROT_INLINE_OP, */
@@ -4341,7 +4608,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 265 */
     /* type PARROT_INLINE_OP, */
@@ -4353,7 +4621,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 266 */
     /* type PARROT_INLINE_OP, */
@@ -4365,7 +4634,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 267 */
     /* type PARROT_INLINE_OP, */
@@ -4377,7 +4647,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 268 */
     /* type PARROT_INLINE_OP, */
@@ -4389,7 +4660,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 269 */
     /* type PARROT_INLINE_OP, */
@@ -4401,7 +4673,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 270 */
     /* type PARROT_INLINE_OP, */
@@ -4413,7 +4686,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 271 */
     /* type PARROT_INLINE_OP, */
@@ -4425,7 +4699,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 272 */
     /* type PARROT_INLINE_OP, */
@@ -4437,7 +4712,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 273 */
     /* type PARROT_INLINE_OP, */
@@ -4449,7 +4725,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 274 */
     /* type PARROT_INLINE_OP, */
@@ -4461,7 +4738,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 275 */
     /* type PARROT_INLINE_OP, */
@@ -4473,7 +4751,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 276 */
     /* type PARROT_INLINE_OP, */
@@ -4485,7 +4764,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 277 */
     /* type PARROT_INLINE_OP, */
@@ -4497,7 +4777,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 278 */
     /* type PARROT_INLINE_OP, */
@@ -4509,7 +4790,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 279 */
     /* type PARROT_INLINE_OP, */
@@ -4521,7 +4803,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 280 */
     /* type PARROT_INLINE_OP, */
@@ -4533,7 +4816,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 281 */
     /* type PARROT_INLINE_OP, */
@@ -4545,7 +4829,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 282 */
     /* type PARROT_INLINE_OP, */
@@ -4557,7 +4842,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 283 */
     /* type PARROT_INLINE_OP, */
@@ -4569,7 +4855,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 284 */
     /* type PARROT_INLINE_OP, */
@@ -4581,7 +4868,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 285 */
     /* type PARROT_INLINE_OP, */
@@ -4593,7 +4881,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 286 */
     /* type PARROT_INLINE_OP, */
@@ -4605,7 +4894,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 287 */
     /* type PARROT_INLINE_OP, */
@@ -4617,7 +4907,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 288 */
     /* type PARROT_INLINE_OP, */
@@ -4629,7 +4920,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 289 */
     /* type PARROT_INLINE_OP, */
@@ -4641,7 +4933,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 290 */
     /* type PARROT_INLINE_OP, */
@@ -4653,7 +4946,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 291 */
     /* type PARROT_INLINE_OP, */
@@ -4665,7 +4959,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 292 */
     /* type PARROT_INLINE_OP, */
@@ -4677,7 +4972,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 293 */
     /* type PARROT_INLINE_OP, */
@@ -4689,7 +4985,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 294 */
     /* type PARROT_INLINE_OP, */
@@ -4701,7 +4998,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 295 */
     /* type PARROT_INLINE_OP, */
@@ -4713,7 +5011,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 296 */
     /* type PARROT_INLINE_OP, */
@@ -4725,7 +5024,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 297 */
     /* type PARROT_INLINE_OP, */
@@ -4737,7 +5037,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 298 */
     /* type PARROT_INLINE_OP, */
@@ -4749,7 +5050,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 299 */
     /* type PARROT_INLINE_OP, */
@@ -4761,7 +5063,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 300 */
     /* type PARROT_INLINE_OP, */
@@ -4773,7 +5076,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 301 */
     /* type PARROT_INLINE_OP, */
@@ -4785,7 +5089,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 302 */
     /* type PARROT_INLINE_OP, */
@@ -4797,7 +5102,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 303 */
     /* type PARROT_INLINE_OP, */
@@ -4809,7 +5115,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 304 */
     /* type PARROT_INLINE_OP, */
@@ -4821,7 +5128,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 305 */
     /* type PARROT_INLINE_OP, */
@@ -4833,7 +5141,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 306 */
     /* type PARROT_INLINE_OP, */
@@ -4845,7 +5154,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 307 */
     /* type PARROT_INLINE_OP, */
@@ -4857,7 +5167,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 308 */
     /* type PARROT_INLINE_OP, */
@@ -4869,7 +5180,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 309 */
     /* type PARROT_INLINE_OP, */
@@ -4881,7 +5193,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 310 */
     /* type PARROT_INLINE_OP, */
@@ -4893,7 +5206,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 311 */
     /* type PARROT_INLINE_OP, */
@@ -4905,7 +5219,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 312 */
     /* type PARROT_INLINE_OP, */
@@ -4917,7 +5232,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 313 */
     /* type PARROT_INLINE_OP, */
@@ -4929,7 +5245,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 314 */
     /* type PARROT_INLINE_OP, */
@@ -4941,7 +5258,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 315 */
     /* type PARROT_INLINE_OP, */
@@ -4953,7 +5271,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 316 */
     /* type PARROT_INLINE_OP, */
@@ -4965,7 +5284,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 317 */
     /* type PARROT_INLINE_OP, */
@@ -4977,7 +5297,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 318 */
     /* type PARROT_INLINE_OP, */
@@ -4989,7 +5310,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 319 */
     /* type PARROT_INLINE_OP, */
@@ -5001,7 +5323,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 320 */
     /* type PARROT_INLINE_OP, */
@@ -5013,7 +5336,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 321 */
     /* type PARROT_INLINE_OP, */
@@ -5025,7 +5349,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 322 */
     /* type PARROT_INLINE_OP, */
@@ -5037,7 +5362,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 323 */
     /* type PARROT_INLINE_OP, */
@@ -5049,7 +5375,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 324 */
     /* type PARROT_INLINE_OP, */
@@ -5061,7 +5388,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 325 */
     /* type PARROT_INLINE_OP, */
@@ -5073,7 +5401,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 326 */
     /* type PARROT_INLINE_OP, */
@@ -5085,7 +5414,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 327 */
     /* type PARROT_INLINE_OP, */
@@ -5097,7 +5427,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 328 */
     /* type PARROT_INLINE_OP, */
@@ -5109,7 +5440,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 329 */
     /* type PARROT_INLINE_OP, */
@@ -5121,7 +5453,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 330 */
     /* type PARROT_INLINE_OP, */
@@ -5133,7 +5466,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 331 */
     /* type PARROT_INLINE_OP, */
@@ -5145,7 +5479,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 332 */
     /* type PARROT_INLINE_OP, */
@@ -5157,7 +5492,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 333 */
     /* type PARROT_INLINE_OP, */
@@ -5169,7 +5505,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 334 */
     /* type PARROT_INLINE_OP, */
@@ -5181,7 +5518,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 335 */
     /* type PARROT_INLINE_OP, */
@@ -5193,7 +5531,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 336 */
     /* type PARROT_INLINE_OP, */
@@ -5205,7 +5544,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 337 */
     /* type PARROT_INLINE_OP, */
@@ -5217,7 +5557,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 338 */
     /* type PARROT_INLINE_OP, */
@@ -5229,7 +5570,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 339 */
     /* type PARROT_INLINE_OP, */
@@ -5241,7 +5583,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 340 */
     /* type PARROT_INLINE_OP, */
@@ -5253,7 +5596,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 341 */
     /* type PARROT_INLINE_OP, */
@@ -5265,7 +5609,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 342 */
     /* type PARROT_INLINE_OP, */
@@ -5277,7 +5622,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 343 */
     /* type PARROT_INLINE_OP, */
@@ -5289,7 +5635,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 344 */
     /* type PARROT_INLINE_OP, */
@@ -5301,7 +5648,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 345 */
     /* type PARROT_INLINE_OP, */
@@ -5313,7 +5661,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 346 */
     /* type PARROT_INLINE_OP, */
@@ -5325,7 +5674,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 347 */
     /* type PARROT_INLINE_OP, */
@@ -5337,7 +5687,8 @@
     2,
     { PARROT_ARG_NC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 348 */
     /* type PARROT_FUNCTION_OP, */
@@ -5349,7 +5700,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 349 */
     /* type PARROT_FUNCTION_OP, */
@@ -5361,7 +5713,8 @@
     2,
     { PARROT_ARG_SC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 350 */
     /* type PARROT_FUNCTION_OP, */
@@ -5373,7 +5726,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 351 */
     /* type PARROT_INLINE_OP, */
@@ -5385,7 +5739,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 352 */
     /* type PARROT_INLINE_OP, */
@@ -5397,7 +5752,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 353 */
     /* type PARROT_INLINE_OP, */
@@ -5409,7 +5765,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 354 */
     /* type PARROT_INLINE_OP, */
@@ -5421,7 +5778,8 @@
     2,
     { PARROT_ARG_NC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 355 */
     /* type PARROT_FUNCTION_OP, */
@@ -5433,7 +5791,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 356 */
     /* type PARROT_FUNCTION_OP, */
@@ -5445,7 +5804,8 @@
     2,
     { PARROT_ARG_SC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 357 */
     /* type PARROT_FUNCTION_OP, */
@@ -5457,7 +5817,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 358 */
     /* type PARROT_FUNCTION_OP, */
@@ -5469,7 +5830,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 359 */
     /* type PARROT_FUNCTION_OP, */
@@ -5481,7 +5843,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 360 */
     /* type PARROT_FUNCTION_OP, */
@@ -5493,7 +5856,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 361 */
     /* type PARROT_FUNCTION_OP, */
@@ -5505,7 +5869,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 362 */
     /* type PARROT_FUNCTION_OP, */
@@ -5517,7 +5882,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 363 */
     /* type PARROT_FUNCTION_OP, */
@@ -5529,7 +5895,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 364 */
     /* type PARROT_FUNCTION_OP, */
@@ -5541,7 +5908,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 365 */
     /* type PARROT_INLINE_OP, */
@@ -5553,7 +5921,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 366 */
     /* type PARROT_INLINE_OP, */
@@ -5565,7 +5934,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 367 */
     /* type PARROT_INLINE_OP, */
@@ -5577,7 +5947,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 368 */
     /* type PARROT_INLINE_OP, */
@@ -5589,7 +5960,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 369 */
     /* type PARROT_INLINE_OP, */
@@ -5601,7 +5973,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 370 */
     /* type PARROT_INLINE_OP, */
@@ -5613,7 +5986,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 371 */
     /* type PARROT_INLINE_OP, */
@@ -5625,7 +5999,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 372 */
     /* type PARROT_INLINE_OP, */
@@ -5637,7 +6012,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 373 */
     /* type PARROT_INLINE_OP, */
@@ -5649,7 +6025,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 374 */
     /* type PARROT_INLINE_OP, */
@@ -5661,7 +6038,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 375 */
     /* type PARROT_INLINE_OP, */
@@ -5673,7 +6051,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 376 */
     /* type PARROT_INLINE_OP, */
@@ -5685,7 +6064,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 377 */
     /* type PARROT_INLINE_OP, */
@@ -5697,7 +6077,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 378 */
     /* type PARROT_INLINE_OP, */
@@ -5709,7 +6090,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 379 */
     /* type PARROT_INLINE_OP, */
@@ -5721,7 +6103,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 380 */
     /* type PARROT_INLINE_OP, */
@@ -5733,7 +6116,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 381 */
     /* type PARROT_INLINE_OP, */
@@ -5745,7 +6129,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 382 */
     /* type PARROT_INLINE_OP, */
@@ -5757,7 +6142,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 383 */
     /* type PARROT_INLINE_OP, */
@@ -5769,7 +6155,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 384 */
     /* type PARROT_INLINE_OP, */
@@ -5781,7 +6168,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 385 */
     /* type PARROT_INLINE_OP, */
@@ -5793,7 +6181,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 386 */
     /* type PARROT_INLINE_OP, */
@@ -5805,7 +6194,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 387 */
     /* type PARROT_INLINE_OP, */
@@ -5817,7 +6207,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 388 */
     /* type PARROT_INLINE_OP, */
@@ -5829,7 +6220,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 389 */
     /* type PARROT_INLINE_OP, */
@@ -5841,7 +6233,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 390 */
     /* type PARROT_INLINE_OP, */
@@ -5853,7 +6246,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 391 */
     /* type PARROT_INLINE_OP, */
@@ -5865,7 +6259,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 392 */
     /* type PARROT_INLINE_OP, */
@@ -5877,7 +6272,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 393 */
     /* type PARROT_INLINE_OP, */
@@ -5889,7 +6285,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 394 */
     /* type PARROT_INLINE_OP, */
@@ -5901,7 +6298,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 395 */
     /* type PARROT_INLINE_OP, */
@@ -5913,7 +6311,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 396 */
     /* type PARROT_INLINE_OP, */
@@ -5925,7 +6324,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 397 */
     /* type PARROT_INLINE_OP, */
@@ -5937,7 +6337,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 398 */
     /* type PARROT_INLINE_OP, */
@@ -5949,7 +6350,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 399 */
     /* type PARROT_INLINE_OP, */
@@ -5961,7 +6363,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 400 */
     /* type PARROT_INLINE_OP, */
@@ -5973,7 +6376,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 401 */
     /* type PARROT_INLINE_OP, */
@@ -5985,7 +6389,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 402 */
     /* type PARROT_INLINE_OP, */
@@ -5997,7 +6402,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 403 */
     /* type PARROT_INLINE_OP, */
@@ -6009,7 +6415,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 404 */
     /* type PARROT_INLINE_OP, */
@@ -6021,7 +6428,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 405 */
     /* type PARROT_INLINE_OP, */
@@ -6033,7 +6441,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 406 */
     /* type PARROT_INLINE_OP, */
@@ -6045,7 +6454,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 407 */
     /* type PARROT_INLINE_OP, */
@@ -6057,7 +6467,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 408 */
     /* type PARROT_INLINE_OP, */
@@ -6069,7 +6480,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 409 */
     /* type PARROT_INLINE_OP, */
@@ -6081,7 +6493,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 410 */
     /* type PARROT_INLINE_OP, */
@@ -6093,7 +6506,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 411 */
     /* type PARROT_INLINE_OP, */
@@ -6105,7 +6519,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 412 */
     /* type PARROT_INLINE_OP, */
@@ -6117,7 +6532,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 413 */
     /* type PARROT_INLINE_OP, */
@@ -6129,7 +6545,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 414 */
     /* type PARROT_INLINE_OP, */
@@ -6141,7 +6558,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 415 */
     /* type PARROT_INLINE_OP, */
@@ -6153,7 +6571,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 416 */
     /* type PARROT_INLINE_OP, */
@@ -6165,7 +6584,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 417 */
     /* type PARROT_INLINE_OP, */
@@ -6177,7 +6597,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 418 */
     /* type PARROT_INLINE_OP, */
@@ -6189,7 +6610,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 419 */
     /* type PARROT_INLINE_OP, */
@@ -6201,7 +6623,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 420 */
     /* type PARROT_INLINE_OP, */
@@ -6213,7 +6636,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 421 */
     /* type PARROT_INLINE_OP, */
@@ -6225,7 +6649,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 422 */
     /* type PARROT_INLINE_OP, */
@@ -6237,7 +6662,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 423 */
     /* type PARROT_INLINE_OP, */
@@ -6249,7 +6675,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 424 */
     /* type PARROT_INLINE_OP, */
@@ -6261,7 +6688,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 425 */
     /* type PARROT_INLINE_OP, */
@@ -6273,7 +6701,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 426 */
     /* type PARROT_INLINE_OP, */
@@ -6285,7 +6714,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 427 */
     /* type PARROT_INLINE_OP, */
@@ -6297,7 +6727,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 428 */
     /* type PARROT_INLINE_OP, */
@@ -6309,7 +6740,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 429 */
     /* type PARROT_INLINE_OP, */
@@ -6321,7 +6753,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 430 */
     /* type PARROT_INLINE_OP, */
@@ -6333,7 +6766,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 431 */
     /* type PARROT_INLINE_OP, */
@@ -6345,7 +6779,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 432 */
     /* type PARROT_INLINE_OP, */
@@ -6357,7 +6792,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 433 */
     /* type PARROT_INLINE_OP, */
@@ -6369,7 +6805,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 434 */
     /* type PARROT_INLINE_OP, */
@@ -6381,7 +6818,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 435 */
     /* type PARROT_INLINE_OP, */
@@ -6393,7 +6831,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 436 */
     /* type PARROT_INLINE_OP, */
@@ -6405,7 +6844,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 437 */
     /* type PARROT_INLINE_OP, */
@@ -6417,7 +6857,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 438 */
     /* type PARROT_INLINE_OP, */
@@ -6429,7 +6870,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 439 */
     /* type PARROT_INLINE_OP, */
@@ -6441,7 +6883,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 440 */
     /* type PARROT_INLINE_OP, */
@@ -6453,7 +6896,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 441 */
     /* type PARROT_INLINE_OP, */
@@ -6465,7 +6909,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 442 */
     /* type PARROT_INLINE_OP, */
@@ -6477,7 +6922,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 443 */
     /* type PARROT_INLINE_OP, */
@@ -6489,7 +6935,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 444 */
     /* type PARROT_INLINE_OP, */
@@ -6501,7 +6948,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 445 */
     /* type PARROT_INLINE_OP, */
@@ -6513,7 +6961,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 446 */
     /* type PARROT_INLINE_OP, */
@@ -6525,7 +6974,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 447 */
     /* type PARROT_INLINE_OP, */
@@ -6537,7 +6987,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 448 */
     /* type PARROT_FUNCTION_OP, */
@@ -6549,7 +7000,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 449 */
     /* type PARROT_FUNCTION_OP, */
@@ -6561,7 +7013,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 450 */
     /* type PARROT_FUNCTION_OP, */
@@ -6573,7 +7026,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 451 */
     /* type PARROT_FUNCTION_OP, */
@@ -6585,7 +7039,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 452 */
     /* type PARROT_INLINE_OP, */
@@ -6597,7 +7052,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 453 */
     /* type PARROT_INLINE_OP, */
@@ -6609,7 +7065,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 454 */
     /* type PARROT_INLINE_OP, */
@@ -6621,7 +7078,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 455 */
     /* type PARROT_INLINE_OP, */
@@ -6633,7 +7091,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 456 */
     /* type PARROT_INLINE_OP, */
@@ -6645,7 +7104,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 457 */
     /* type PARROT_FUNCTION_OP, */
@@ -6657,7 +7117,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 458 */
     /* type PARROT_FUNCTION_OP, */
@@ -6669,7 +7130,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 459 */
     /* type PARROT_FUNCTION_OP, */
@@ -6681,7 +7143,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 460 */
     /* type PARROT_FUNCTION_OP, */
@@ -6693,7 +7156,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 461 */
     /* type PARROT_FUNCTION_OP, */
@@ -6705,7 +7169,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 462 */
     /* type PARROT_FUNCTION_OP, */
@@ -6717,7 +7182,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 463 */
     /* type PARROT_INLINE_OP, */
@@ -6729,7 +7195,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 464 */
     /* type PARROT_INLINE_OP, */
@@ -6741,7 +7208,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 465 */
     /* type PARROT_INLINE_OP, */
@@ -6753,7 +7221,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 466 */
     /* type PARROT_INLINE_OP, */
@@ -6765,7 +7234,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 467 */
     /* type PARROT_INLINE_OP, */
@@ -6777,7 +7247,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 468 */
     /* type PARROT_INLINE_OP, */
@@ -6789,7 +7260,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 469 */
     /* type PARROT_INLINE_OP, */
@@ -6801,7 +7273,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 470 */
     /* type PARROT_INLINE_OP, */
@@ -6813,7 +7286,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 471 */
     /* type PARROT_INLINE_OP, */
@@ -6825,7 +7299,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 472 */
     /* type PARROT_INLINE_OP, */
@@ -6837,7 +7312,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 473 */
     /* type PARROT_INLINE_OP, */
@@ -6849,7 +7325,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 474 */
     /* type PARROT_INLINE_OP, */
@@ -6861,7 +7338,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 475 */
     /* type PARROT_INLINE_OP, */
@@ -6873,7 +7351,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 476 */
     /* type PARROT_INLINE_OP, */
@@ -6885,7 +7364,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 477 */
     /* type PARROT_INLINE_OP, */
@@ -6897,7 +7377,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 478 */
     /* type PARROT_INLINE_OP, */
@@ -6909,7 +7390,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 479 */
     /* type PARROT_INLINE_OP, */
@@ -6921,7 +7403,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 480 */
     /* type PARROT_INLINE_OP, */
@@ -6933,7 +7416,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 481 */
     /* type PARROT_INLINE_OP, */
@@ -6945,7 +7429,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 482 */
     /* type PARROT_INLINE_OP, */
@@ -6957,7 +7442,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 483 */
     /* type PARROT_INLINE_OP, */
@@ -6969,7 +7455,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 484 */
     /* type PARROT_INLINE_OP, */
@@ -6981,7 +7468,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 485 */
     /* type PARROT_INLINE_OP, */
@@ -6993,7 +7481,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 486 */
     /* type PARROT_INLINE_OP, */
@@ -7005,7 +7494,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 487 */
     /* type PARROT_INLINE_OP, */
@@ -7017,7 +7507,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 488 */
     /* type PARROT_INLINE_OP, */
@@ -7029,7 +7520,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 489 */
     /* type PARROT_INLINE_OP, */
@@ -7041,7 +7533,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 490 */
     /* type PARROT_INLINE_OP, */
@@ -7053,7 +7546,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 491 */
     /* type PARROT_INLINE_OP, */
@@ -7065,7 +7559,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 492 */
     /* type PARROT_INLINE_OP, */
@@ -7077,7 +7572,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 493 */
     /* type PARROT_INLINE_OP, */
@@ -7089,7 +7585,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 494 */
     /* type PARROT_INLINE_OP, */
@@ -7101,7 +7598,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 495 */
     /* type PARROT_INLINE_OP, */
@@ -7113,7 +7611,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 496 */
     /* type PARROT_INLINE_OP, */
@@ -7125,7 +7624,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 497 */
     /* type PARROT_INLINE_OP, */
@@ -7137,7 +7637,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 498 */
     /* type PARROT_INLINE_OP, */
@@ -7149,7 +7650,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 499 */
     /* type PARROT_INLINE_OP, */
@@ -7161,7 +7663,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 500 */
     /* type PARROT_INLINE_OP, */
@@ -7173,7 +7676,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 501 */
     /* type PARROT_INLINE_OP, */
@@ -7185,7 +7689,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 502 */
     /* type PARROT_INLINE_OP, */
@@ -7197,7 +7702,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 503 */
     /* type PARROT_INLINE_OP, */
@@ -7209,7 +7715,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 504 */
     /* type PARROT_INLINE_OP, */
@@ -7221,7 +7728,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 505 */
     /* type PARROT_INLINE_OP, */
@@ -7233,7 +7741,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 506 */
     /* type PARROT_INLINE_OP, */
@@ -7245,7 +7754,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 507 */
     /* type PARROT_INLINE_OP, */
@@ -7257,7 +7767,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_NC, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 508 */
     /* type PARROT_INLINE_OP, */
@@ -7269,7 +7780,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 509 */
     /* type PARROT_INLINE_OP, */
@@ -7281,7 +7793,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 510 */
     /* type PARROT_INLINE_OP, */
@@ -7293,7 +7806,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 511 */
     /* type PARROT_INLINE_OP, */
@@ -7305,7 +7819,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 512 */
     /* type PARROT_INLINE_OP, */
@@ -7317,7 +7832,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 513 */
     /* type PARROT_INLINE_OP, */
@@ -7329,7 +7845,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 514 */
     /* type PARROT_INLINE_OP, */
@@ -7341,7 +7858,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 515 */
     /* type PARROT_FUNCTION_OP, */
@@ -7353,7 +7871,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 516 */
     /* type PARROT_FUNCTION_OP, */
@@ -7365,7 +7884,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 517 */
     /* type PARROT_FUNCTION_OP, */
@@ -7377,7 +7897,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 518 */
     /* type PARROT_FUNCTION_OP, */
@@ -7389,7 +7910,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 519 */
     /* type PARROT_FUNCTION_OP, */
@@ -7401,7 +7923,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 520 */
     /* type PARROT_FUNCTION_OP, */
@@ -7413,7 +7936,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 521 */
     /* type PARROT_FUNCTION_OP, */
@@ -7425,7 +7949,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 522 */
     /* type PARROT_FUNCTION_OP, */
@@ -7437,7 +7962,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 523 */
     /* type PARROT_FUNCTION_OP, */
@@ -7449,7 +7975,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 524 */
     /* type PARROT_INLINE_OP, */
@@ -7461,7 +7988,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 525 */
     /* type PARROT_INLINE_OP, */
@@ -7473,7 +8001,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 526 */
     /* type PARROT_INLINE_OP, */
@@ -7485,7 +8014,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 527 */
     /* type PARROT_INLINE_OP, */
@@ -7497,7 +8027,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 528 */
     /* type PARROT_INLINE_OP, */
@@ -7509,7 +8040,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 529 */
     /* type PARROT_INLINE_OP, */
@@ -7521,7 +8053,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 530 */
     /* type PARROT_INLINE_OP, */
@@ -7533,7 +8066,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 531 */
     /* type PARROT_INLINE_OP, */
@@ -7545,7 +8079,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 532 */
     /* type PARROT_INLINE_OP, */
@@ -7557,7 +8092,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 533 */
     /* type PARROT_INLINE_OP, */
@@ -7569,7 +8105,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 534 */
     /* type PARROT_INLINE_OP, */
@@ -7581,7 +8118,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 535 */
     /* type PARROT_INLINE_OP, */
@@ -7593,7 +8131,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 536 */
     /* type PARROT_INLINE_OP, */
@@ -7605,7 +8144,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 537 */
     /* type PARROT_INLINE_OP, */
@@ -7617,7 +8157,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 538 */
     /* type PARROT_INLINE_OP, */
@@ -7629,7 +8170,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 539 */
     /* type PARROT_INLINE_OP, */
@@ -7641,7 +8183,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 540 */
     /* type PARROT_INLINE_OP, */
@@ -7653,7 +8196,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 541 */
     /* type PARROT_INLINE_OP, */
@@ -7665,7 +8209,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 542 */
     /* type PARROT_INLINE_OP, */
@@ -7677,7 +8222,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 543 */
     /* type PARROT_INLINE_OP, */
@@ -7689,7 +8235,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 544 */
     /* type PARROT_INLINE_OP, */
@@ -7701,7 +8248,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 545 */
     /* type PARROT_INLINE_OP, */
@@ -7713,7 +8261,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 546 */
     /* type PARROT_INLINE_OP, */
@@ -7725,7 +8274,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 547 */
     /* type PARROT_INLINE_OP, */
@@ -7737,7 +8287,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 548 */
     /* type PARROT_INLINE_OP, */
@@ -7749,7 +8300,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 549 */
     /* type PARROT_INLINE_OP, */
@@ -7761,7 +8313,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 550 */
     /* type PARROT_FUNCTION_OP, */
@@ -7773,7 +8326,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 551 */
     /* type PARROT_FUNCTION_OP, */
@@ -7785,7 +8339,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 552 */
     /* type PARROT_FUNCTION_OP, */
@@ -7797,7 +8352,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 553 */
     /* type PARROT_FUNCTION_OP, */
@@ -7809,7 +8365,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 554 */
     /* type PARROT_FUNCTION_OP, */
@@ -7821,7 +8378,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 555 */
     /* type PARROT_FUNCTION_OP, */
@@ -7833,7 +8391,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 556 */
     /* type PARROT_FUNCTION_OP, */
@@ -7845,7 +8404,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 557 */
     /* type PARROT_FUNCTION_OP, */
@@ -7857,7 +8417,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 558 */
     /* type PARROT_FUNCTION_OP, */
@@ -7869,7 +8430,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 559 */
     /* type PARROT_FUNCTION_OP, */
@@ -7881,7 +8443,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 560 */
     /* type PARROT_INLINE_OP, */
@@ -7893,7 +8456,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 561 */
     /* type PARROT_INLINE_OP, */
@@ -7905,7 +8469,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 562 */
     /* type PARROT_INLINE_OP, */
@@ -7917,7 +8482,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 563 */
     /* type PARROT_INLINE_OP, */
@@ -7929,7 +8495,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 564 */
     /* type PARROT_INLINE_OP, */
@@ -7941,7 +8508,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 565 */
     /* type PARROT_INLINE_OP, */
@@ -7953,7 +8521,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 566 */
     /* type PARROT_INLINE_OP, */
@@ -7965,7 +8534,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 567 */
     /* type PARROT_INLINE_OP, */
@@ -7977,7 +8547,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 568 */
     /* type PARROT_INLINE_OP, */
@@ -7989,7 +8560,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 569 */
     /* type PARROT_INLINE_OP, */
@@ -8001,7 +8573,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 570 */
     /* type PARROT_FUNCTION_OP, */
@@ -8013,7 +8586,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 571 */
     /* type PARROT_FUNCTION_OP, */
@@ -8025,7 +8599,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 572 */
     /* type PARROT_INLINE_OP, */
@@ -8037,7 +8612,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 573 */
     /* type PARROT_INLINE_OP, */
@@ -8049,7 +8625,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 574 */
     /* type PARROT_INLINE_OP, */
@@ -8061,7 +8638,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 575 */
     /* type PARROT_INLINE_OP, */
@@ -8073,7 +8651,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 576 */
     /* type PARROT_INLINE_OP, */
@@ -8085,7 +8664,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 577 */
     /* type PARROT_INLINE_OP, */
@@ -8097,7 +8677,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 578 */
     /* type PARROT_INLINE_OP, */
@@ -8109,7 +8690,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 579 */
     /* type PARROT_INLINE_OP, */
@@ -8121,7 +8703,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 580 */
     /* type PARROT_INLINE_OP, */
@@ -8133,7 +8716,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 581 */
     /* type PARROT_INLINE_OP, */
@@ -8145,7 +8729,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 582 */
     /* type PARROT_INLINE_OP, */
@@ -8157,7 +8742,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 583 */
     /* type PARROT_INLINE_OP, */
@@ -8169,7 +8755,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 584 */
     /* type PARROT_INLINE_OP, */
@@ -8181,7 +8768,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 585 */
     /* type PARROT_INLINE_OP, */
@@ -8193,7 +8781,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 586 */
     /* type PARROT_INLINE_OP, */
@@ -8205,7 +8794,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 587 */
     /* type PARROT_INLINE_OP, */
@@ -8217,7 +8807,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 588 */
     /* type PARROT_INLINE_OP, */
@@ -8229,7 +8820,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 589 */
     /* type PARROT_INLINE_OP, */
@@ -8241,7 +8833,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 590 */
     /* type PARROT_FUNCTION_OP, */
@@ -8253,7 +8846,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 591 */
     /* type PARROT_FUNCTION_OP, */
@@ -8265,7 +8859,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 592 */
     /* type PARROT_FUNCTION_OP, */
@@ -8277,7 +8872,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 593 */
     /* type PARROT_FUNCTION_OP, */
@@ -8289,7 +8885,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 594 */
     /* type PARROT_FUNCTION_OP, */
@@ -8301,7 +8898,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 595 */
     /* type PARROT_FUNCTION_OP, */
@@ -8313,7 +8911,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 596 */
     /* type PARROT_INLINE_OP, */
@@ -8325,7 +8924,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 597 */
     /* type PARROT_INLINE_OP, */
@@ -8337,7 +8937,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 598 */
     /* type PARROT_FUNCTION_OP, */
@@ -8349,7 +8950,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 599 */
     /* type PARROT_FUNCTION_OP, */
@@ -8361,7 +8963,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 600 */
     /* type PARROT_FUNCTION_OP, */
@@ -8373,7 +8976,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 601 */
     /* type PARROT_FUNCTION_OP, */
@@ -8385,7 +8989,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 602 */
     /* type PARROT_FUNCTION_OP, */
@@ -8397,7 +9002,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 603 */
     /* type PARROT_FUNCTION_OP, */
@@ -8409,7 +9015,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 604 */
     /* type PARROT_FUNCTION_OP, */
@@ -8421,7 +9028,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 605 */
     /* type PARROT_FUNCTION_OP, */
@@ -8433,7 +9041,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 606 */
     /* type PARROT_FUNCTION_OP, */
@@ -8445,7 +9054,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 607 */
     /* type PARROT_FUNCTION_OP, */
@@ -8457,7 +9067,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 608 */
     /* type PARROT_INLINE_OP, */
@@ -8469,7 +9080,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 609 */
     /* type PARROT_INLINE_OP, */
@@ -8481,7 +9093,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 610 */
     /* type PARROT_FUNCTION_OP, */
@@ -8493,7 +9106,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 611 */
     /* type PARROT_FUNCTION_OP, */
@@ -8505,7 +9119,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 612 */
     /* type PARROT_FUNCTION_OP, */
@@ -8517,7 +9132,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 613 */
     /* type PARROT_INLINE_OP, */
@@ -8529,7 +9145,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 614 */
     /* type PARROT_INLINE_OP, */
@@ -8541,7 +9158,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KI },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 615 */
     /* type PARROT_INLINE_OP, */
@@ -8553,7 +9171,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KIC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 616 */
     /* type PARROT_INLINE_OP, */
@@ -8565,7 +9184,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_K },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 617 */
     /* type PARROT_INLINE_OP, */
@@ -8577,7 +9197,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 618 */
     /* type PARROT_INLINE_OP, */
@@ -8589,7 +9210,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KI },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 619 */
     /* type PARROT_INLINE_OP, */
@@ -8601,7 +9223,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KIC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 620 */
     /* type PARROT_INLINE_OP, */
@@ -8613,7 +9236,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_K },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 621 */
     /* type PARROT_INLINE_OP, */
@@ -8625,7 +9249,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 622 */
     /* type PARROT_INLINE_OP, */
@@ -8637,7 +9262,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_K },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 623 */
     /* type PARROT_INLINE_OP, */
@@ -8649,7 +9275,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_KC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 624 */
     /* type PARROT_INLINE_OP, */
@@ -8661,7 +9288,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_KI },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 625 */
     /* type PARROT_INLINE_OP, */
@@ -8673,7 +9301,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_KIC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 626 */
     /* type PARROT_INLINE_OP, */
@@ -8685,7 +9314,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 627 */
     /* type PARROT_INLINE_OP, */
@@ -8697,7 +9327,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 628 */
     /* type PARROT_INLINE_OP, */
@@ -8709,7 +9340,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 629 */
     /* type PARROT_INLINE_OP, */
@@ -8721,7 +9353,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 630 */
     /* type PARROT_INLINE_OP, */
@@ -8733,7 +9366,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 631 */
     /* type PARROT_INLINE_OP, */
@@ -8745,7 +9379,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 632 */
     /* type PARROT_INLINE_OP, */
@@ -8757,7 +9392,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 633 */
     /* type PARROT_INLINE_OP, */
@@ -8769,7 +9405,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 634 */
     /* type PARROT_INLINE_OP, */
@@ -8781,7 +9418,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 635 */
     /* type PARROT_INLINE_OP, */
@@ -8793,7 +9431,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 636 */
     /* type PARROT_INLINE_OP, */
@@ -8805,7 +9444,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 637 */
     /* type PARROT_INLINE_OP, */
@@ -8817,7 +9457,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 638 */
     /* type PARROT_INLINE_OP, */
@@ -8829,7 +9470,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 639 */
     /* type PARROT_INLINE_OP, */
@@ -8841,7 +9483,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 640 */
     /* type PARROT_INLINE_OP, */
@@ -8853,7 +9496,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 641 */
     /* type PARROT_INLINE_OP, */
@@ -8865,7 +9509,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 642 */
     /* type PARROT_INLINE_OP, */
@@ -8877,7 +9522,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 643 */
     /* type PARROT_INLINE_OP, */
@@ -8889,7 +9535,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 644 */
     /* type PARROT_INLINE_OP, */
@@ -8901,7 +9548,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 645 */
     /* type PARROT_INLINE_OP, */
@@ -8913,7 +9561,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 646 */
     /* type PARROT_INLINE_OP, */
@@ -8925,7 +9574,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 647 */
     /* type PARROT_INLINE_OP, */
@@ -8937,7 +9587,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 648 */
     /* type PARROT_INLINE_OP, */
@@ -8949,7 +9600,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 649 */
     /* type PARROT_INLINE_OP, */
@@ -8961,7 +9613,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 650 */
     /* type PARROT_INLINE_OP, */
@@ -8973,7 +9626,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 651 */
     /* type PARROT_INLINE_OP, */
@@ -8985,7 +9639,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 652 */
     /* type PARROT_INLINE_OP, */
@@ -8997,7 +9652,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 653 */
     /* type PARROT_FUNCTION_OP, */
@@ -9009,7 +9665,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 654 */
     /* type PARROT_FUNCTION_OP, */
@@ -9021,7 +9678,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 655 */
     /* type PARROT_FUNCTION_OP, */
@@ -9033,7 +9691,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 656 */
     /* type PARROT_FUNCTION_OP, */
@@ -9045,7 +9704,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 657 */
     /* type PARROT_FUNCTION_OP, */
@@ -9057,7 +9717,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 658 */
     /* type PARROT_FUNCTION_OP, */
@@ -9069,7 +9730,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 659 */
     /* type PARROT_FUNCTION_OP, */
@@ -9081,7 +9743,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 660 */
     /* type PARROT_FUNCTION_OP, */
@@ -9093,7 +9756,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 661 */
     /* type PARROT_FUNCTION_OP, */
@@ -9105,7 +9769,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 662 */
     /* type PARROT_FUNCTION_OP, */
@@ -9117,7 +9782,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 663 */
     /* type PARROT_INLINE_OP, */
@@ -9129,7 +9795,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 664 */
     /* type PARROT_INLINE_OP, */
@@ -9141,7 +9808,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 665 */
     /* type PARROT_INLINE_OP, */
@@ -9153,7 +9821,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 666 */
     /* type PARROT_INLINE_OP, */
@@ -9165,7 +9834,8 @@
     4,
     { PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 667 */
     /* type PARROT_INLINE_OP, */
@@ -9177,7 +9847,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 668 */
     /* type PARROT_INLINE_OP, */
@@ -9189,7 +9860,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 669 */
     /* type PARROT_INLINE_OP, */
@@ -9201,7 +9873,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 670 */
     /* type PARROT_INLINE_OP, */
@@ -9213,7 +9886,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 671 */
     /* type PARROT_FUNCTION_OP, */
@@ -9225,7 +9899,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 672 */
     /* type PARROT_FUNCTION_OP, */
@@ -9237,7 +9912,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 673 */
     /* type PARROT_FUNCTION_OP, */
@@ -9249,7 +9925,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 674 */
     /* type PARROT_FUNCTION_OP, */
@@ -9261,7 +9938,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 675 */
     /* type PARROT_FUNCTION_OP, */
@@ -9273,7 +9951,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 676 */
     /* type PARROT_FUNCTION_OP, */
@@ -9285,7 +9964,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 677 */
     /* type PARROT_FUNCTION_OP, */
@@ -9297,7 +9977,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 678 */
     /* type PARROT_FUNCTION_OP, */
@@ -9309,7 +9990,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 679 */
     /* type PARROT_INLINE_OP, */
@@ -9321,7 +10003,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 680 */
     /* type PARROT_INLINE_OP, */
@@ -9333,7 +10016,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 681 */
     /* type PARROT_INLINE_OP, */
@@ -9345,7 +10029,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 682 */
     /* type PARROT_INLINE_OP, */
@@ -9357,7 +10042,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 683 */
     /* type PARROT_INLINE_OP, */
@@ -9369,7 +10055,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 684 */
     /* type PARROT_INLINE_OP, */
@@ -9381,7 +10068,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 685 */
     /* type PARROT_INLINE_OP, */
@@ -9393,7 +10081,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 686 */
     /* type PARROT_INLINE_OP, */
@@ -9405,7 +10094,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 687 */
     /* type PARROT_INLINE_OP, */
@@ -9417,7 +10107,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 688 */
     /* type PARROT_INLINE_OP, */
@@ -9429,7 +10120,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 689 */
     /* type PARROT_INLINE_OP, */
@@ -9441,7 +10133,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 690 */
     /* type PARROT_INLINE_OP, */
@@ -9453,7 +10146,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 691 */
     /* type PARROT_INLINE_OP, */
@@ -9465,7 +10159,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 692 */
     /* type PARROT_INLINE_OP, */
@@ -9477,7 +10172,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 693 */
     /* type PARROT_INLINE_OP, */
@@ -9489,7 +10185,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 694 */
     /* type PARROT_INLINE_OP, */
@@ -9501,7 +10198,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 695 */
     /* type PARROT_INLINE_OP, */
@@ -9513,7 +10211,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 696 */
     /* type PARROT_INLINE_OP, */
@@ -9525,7 +10224,8 @@
     3,
     { PARROT_ARG_N, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 697 */
     /* type PARROT_INLINE_OP, */
@@ -9537,7 +10237,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 698 */
     /* type PARROT_INLINE_OP, */
@@ -9549,7 +10250,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 699 */
     /* type PARROT_INLINE_OP, */
@@ -9561,7 +10263,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 700 */
     /* type PARROT_INLINE_OP, */
@@ -9573,7 +10276,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 701 */
     /* type PARROT_INLINE_OP, */
@@ -9585,7 +10289,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 702 */
     /* type PARROT_INLINE_OP, */
@@ -9597,7 +10302,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_N },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 703 */
     /* type PARROT_INLINE_OP, */
@@ -9609,7 +10315,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_NC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 704 */
     /* type PARROT_INLINE_OP, */
@@ -9621,7 +10328,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 705 */
     /* type PARROT_INLINE_OP, */
@@ -9633,7 +10341,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 706 */
     /* type PARROT_INLINE_OP, */
@@ -9645,7 +10354,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 707 */
     /* type PARROT_INLINE_OP, */
@@ -9657,7 +10367,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 708 */
     /* type PARROT_INLINE_OP, */
@@ -9669,7 +10380,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 709 */
     /* type PARROT_INLINE_OP, */
@@ -9681,7 +10393,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 710 */
     /* type PARROT_INLINE_OP, */
@@ -9693,7 +10406,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 711 */
     /* type PARROT_INLINE_OP, */
@@ -9705,7 +10419,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 712 */
     /* type PARROT_INLINE_OP, */
@@ -9717,7 +10432,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 713 */
     /* type PARROT_INLINE_OP, */
@@ -9729,7 +10445,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 714 */
     /* type PARROT_INLINE_OP, */
@@ -9741,7 +10458,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 715 */
     /* type PARROT_INLINE_OP, */
@@ -9753,7 +10471,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 716 */
     /* type PARROT_INLINE_OP, */
@@ -9765,7 +10484,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 717 */
     /* type PARROT_INLINE_OP, */
@@ -9777,7 +10497,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 718 */
     /* type PARROT_INLINE_OP, */
@@ -9789,7 +10510,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 719 */
     /* type PARROT_INLINE_OP, */
@@ -9801,7 +10523,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 720 */
     /* type PARROT_INLINE_OP, */
@@ -9813,7 +10536,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 721 */
     /* type PARROT_INLINE_OP, */
@@ -9825,7 +10549,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 722 */
     /* type PARROT_INLINE_OP, */
@@ -9837,7 +10562,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 723 */
     /* type PARROT_INLINE_OP, */
@@ -9849,7 +10575,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 724 */
     /* type PARROT_INLINE_OP, */
@@ -9861,7 +10588,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 725 */
     /* type PARROT_INLINE_OP, */
@@ -9873,7 +10601,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 726 */
     /* type PARROT_INLINE_OP, */
@@ -9885,7 +10614,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 727 */
     /* type PARROT_INLINE_OP, */
@@ -9897,7 +10627,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 728 */
     /* type PARROT_INLINE_OP, */
@@ -9909,7 +10640,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 729 */
     /* type PARROT_INLINE_OP, */
@@ -9921,7 +10653,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 730 */
     /* type PARROT_INLINE_OP, */
@@ -9933,7 +10666,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 731 */
     /* type PARROT_INLINE_OP, */
@@ -9945,7 +10679,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 732 */
     /* type PARROT_INLINE_OP, */
@@ -9957,7 +10692,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 733 */
     /* type PARROT_INLINE_OP, */
@@ -9969,7 +10705,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 734 */
     /* type PARROT_INLINE_OP, */
@@ -9981,7 +10718,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 735 */
     /* type PARROT_INLINE_OP, */
@@ -9993,7 +10731,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 736 */
     /* type PARROT_INLINE_OP, */
@@ -10005,7 +10744,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KI, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 737 */
     /* type PARROT_INLINE_OP, */
@@ -10017,7 +10757,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KIC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 738 */
     /* type PARROT_INLINE_OP, */
@@ -10029,7 +10770,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KI },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 739 */
     /* type PARROT_INLINE_OP, */
@@ -10041,7 +10783,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KIC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 740 */
     /* type PARROT_INLINE_OP, */
@@ -10053,7 +10796,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_P, PARROT_ARG_KI },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 741 */
     /* type PARROT_INLINE_OP, */
@@ -10065,7 +10809,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_P, PARROT_ARG_KIC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 742 */
     /* type PARROT_INLINE_OP, */
@@ -10077,7 +10822,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_KI },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 743 */
     /* type PARROT_INLINE_OP, */
@@ -10089,7 +10835,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_KIC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 744 */
     /* type PARROT_INLINE_OP, */
@@ -10101,7 +10848,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_KI },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 745 */
     /* type PARROT_INLINE_OP, */
@@ -10113,7 +10861,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_KIC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 746 */
     /* type PARROT_INLINE_OP, */
@@ -10125,7 +10874,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 747 */
     /* type PARROT_INLINE_OP, */
@@ -10137,7 +10887,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 748 */
     /* type PARROT_INLINE_OP, */
@@ -10149,7 +10900,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 749 */
     /* type PARROT_INLINE_OP, */
@@ -10161,7 +10913,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 750 */
     /* type PARROT_INLINE_OP, */
@@ -10173,7 +10926,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 751 */
     /* type PARROT_INLINE_OP, */
@@ -10185,7 +10939,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_N },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 752 */
     /* type PARROT_INLINE_OP, */
@@ -10197,7 +10952,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 753 */
     /* type PARROT_INLINE_OP, */
@@ -10209,7 +10965,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_NC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 754 */
     /* type PARROT_INLINE_OP, */
@@ -10221,7 +10978,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 755 */
     /* type PARROT_INLINE_OP, */
@@ -10233,7 +10991,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 756 */
     /* type PARROT_INLINE_OP, */
@@ -10245,7 +11004,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 757 */
     /* type PARROT_INLINE_OP, */
@@ -10257,7 +11017,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 758 */
     /* type PARROT_INLINE_OP, */
@@ -10269,7 +11030,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_K, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 759 */
     /* type PARROT_INLINE_OP, */
@@ -10281,7 +11043,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_KC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 760 */
     /* type PARROT_INLINE_OP, */
@@ -10293,7 +11056,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_K },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 761 */
     /* type PARROT_INLINE_OP, */
@@ -10305,7 +11069,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_P, PARROT_ARG_KC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 762 */
     /* type PARROT_INLINE_OP, */
@@ -10317,7 +11082,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_P, PARROT_ARG_K },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 763 */
     /* type PARROT_INLINE_OP, */
@@ -10329,7 +11095,8 @@
     4,
     { PARROT_ARG_N, PARROT_ARG_P, PARROT_ARG_KC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 764 */
     /* type PARROT_INLINE_OP, */
@@ -10341,7 +11108,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_K },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 765 */
     /* type PARROT_INLINE_OP, */
@@ -10353,7 +11121,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_KC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 766 */
     /* type PARROT_INLINE_OP, */
@@ -10365,7 +11134,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_K },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 767 */
     /* type PARROT_INLINE_OP, */
@@ -10377,7 +11147,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_KC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 768 */
     /* type PARROT_INLINE_OP, */
@@ -10389,7 +11160,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 769 */
     /* type PARROT_INLINE_OP, */
@@ -10401,7 +11173,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 770 */
     /* type PARROT_INLINE_OP, */
@@ -10413,7 +11186,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 771 */
     /* type PARROT_INLINE_OP, */
@@ -10425,7 +11199,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 772 */
     /* type PARROT_INLINE_OP, */
@@ -10437,7 +11212,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 773 */
     /* type PARROT_INLINE_OP, */
@@ -10449,7 +11225,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 774 */
     /* type PARROT_INLINE_OP, */
@@ -10461,7 +11238,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 775 */
     /* type PARROT_INLINE_OP, */
@@ -10473,7 +11251,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 776 */
     /* type PARROT_INLINE_OP, */
@@ -10485,7 +11264,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 777 */
     /* type PARROT_INLINE_OP, */
@@ -10497,7 +11277,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 778 */
     /* type PARROT_INLINE_OP, */
@@ -10509,7 +11290,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 779 */
     /* type PARROT_INLINE_OP, */
@@ -10521,7 +11303,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 780 */
     /* type PARROT_INLINE_OP, */
@@ -10533,7 +11316,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 781 */
     /* type PARROT_INLINE_OP, */
@@ -10545,7 +11329,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 782 */
     /* type PARROT_INLINE_OP, */
@@ -10557,7 +11342,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 783 */
     /* type PARROT_INLINE_OP, */
@@ -10569,7 +11355,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 784 */
     /* type PARROT_INLINE_OP, */
@@ -10581,7 +11368,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 785 */
     /* type PARROT_INLINE_OP, */
@@ -10593,7 +11381,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 786 */
     /* type PARROT_INLINE_OP, */
@@ -10605,7 +11394,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 787 */
     /* type PARROT_INLINE_OP, */
@@ -10617,7 +11407,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 788 */
     /* type PARROT_INLINE_OP, */
@@ -10629,7 +11420,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 789 */
     /* type PARROT_INLINE_OP, */
@@ -10641,7 +11433,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 790 */
     /* type PARROT_INLINE_OP, */
@@ -10653,7 +11446,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 791 */
     /* type PARROT_INLINE_OP, */
@@ -10665,7 +11459,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 792 */
     /* type PARROT_INLINE_OP, */
@@ -10677,7 +11472,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 793 */
     /* type PARROT_INLINE_OP, */
@@ -10689,7 +11485,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 794 */
     /* type PARROT_INLINE_OP, */
@@ -10701,7 +11498,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 795 */
     /* type PARROT_INLINE_OP, */
@@ -10713,7 +11511,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 796 */
     /* type PARROT_INLINE_OP, */
@@ -10725,7 +11524,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 797 */
     /* type PARROT_INLINE_OP, */
@@ -10737,7 +11537,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 798 */
     /* type PARROT_INLINE_OP, */
@@ -10749,7 +11550,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 799 */
     /* type PARROT_INLINE_OP, */
@@ -10761,7 +11563,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 800 */
     /* type PARROT_INLINE_OP, */
@@ -10773,7 +11576,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 801 */
     /* type PARROT_INLINE_OP, */
@@ -10785,7 +11589,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 802 */
     /* type PARROT_INLINE_OP, */
@@ -10797,7 +11602,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 803 */
     /* type PARROT_INLINE_OP, */
@@ -10809,7 +11615,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 804 */
     /* type PARROT_INLINE_OP, */
@@ -10821,7 +11628,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 805 */
     /* type PARROT_INLINE_OP, */
@@ -10833,7 +11641,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 806 */
     /* type PARROT_INLINE_OP, */
@@ -10845,7 +11654,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 807 */
     /* type PARROT_INLINE_OP, */
@@ -10857,7 +11667,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 808 */
     /* type PARROT_INLINE_OP, */
@@ -10869,7 +11680,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 809 */
     /* type PARROT_INLINE_OP, */
@@ -10881,7 +11693,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 810 */
     /* type PARROT_INLINE_OP, */
@@ -10893,7 +11706,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 811 */
     /* type PARROT_INLINE_OP, */
@@ -10905,7 +11719,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 812 */
     /* type PARROT_INLINE_OP, */
@@ -10917,7 +11732,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 813 */
     /* type PARROT_FUNCTION_OP, */
@@ -10929,7 +11745,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 814 */
     /* type PARROT_FUNCTION_OP, */
@@ -10941,7 +11758,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_INOUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 815 */
     /* type PARROT_INLINE_OP, */
@@ -10953,7 +11771,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 816 */
     /* type PARROT_INLINE_OP, */
@@ -10965,7 +11784,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 817 */
     /* type PARROT_INLINE_OP, */
@@ -10977,7 +11797,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 818 */
     /* type PARROT_INLINE_OP, */
@@ -10989,7 +11810,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 819 */
     /* type PARROT_INLINE_OP, */
@@ -11001,7 +11823,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 820 */
     /* type PARROT_INLINE_OP, */
@@ -11013,7 +11836,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 821 */
     /* type PARROT_INLINE_OP, */
@@ -11025,7 +11849,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 822 */
     /* type PARROT_INLINE_OP, */
@@ -11037,7 +11862,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 823 */
     /* type PARROT_INLINE_OP, */
@@ -11049,7 +11875,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 824 */
     /* type PARROT_INLINE_OP, */
@@ -11061,7 +11888,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 825 */
     /* type PARROT_INLINE_OP, */
@@ -11073,7 +11901,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 826 */
     /* type PARROT_INLINE_OP, */
@@ -11085,7 +11914,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 827 */
     /* type PARROT_INLINE_OP, */
@@ -11097,7 +11927,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 828 */
     /* type PARROT_INLINE_OP, */
@@ -11109,7 +11940,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 829 */
     /* type PARROT_INLINE_OP, */
@@ -11121,7 +11953,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 830 */
     /* type PARROT_INLINE_OP, */
@@ -11133,7 +11966,8 @@
     5,
     { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 831 */
     /* type PARROT_INLINE_OP, */
@@ -11145,7 +11979,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 832 */
     /* type PARROT_INLINE_OP, */
@@ -11157,7 +11992,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 833 */
     /* type PARROT_INLINE_OP, */
@@ -11169,7 +12005,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 834 */
     /* type PARROT_INLINE_OP, */
@@ -11181,7 +12018,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 835 */
     /* type PARROT_INLINE_OP, */
@@ -11193,7 +12031,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 836 */
     /* type PARROT_INLINE_OP, */
@@ -11205,7 +12044,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 837 */
     /* type PARROT_INLINE_OP, */
@@ -11217,7 +12057,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 838 */
     /* type PARROT_INLINE_OP, */
@@ -11229,7 +12070,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 839 */
     /* type PARROT_INLINE_OP, */
@@ -11241,7 +12083,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 840 */
     /* type PARROT_INLINE_OP, */
@@ -11253,7 +12096,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 841 */
     /* type PARROT_INLINE_OP, */
@@ -11265,7 +12109,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 842 */
     /* type PARROT_INLINE_OP, */
@@ -11277,7 +12122,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 843 */
     /* type PARROT_INLINE_OP, */
@@ -11289,7 +12135,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 844 */
     /* type PARROT_INLINE_OP, */
@@ -11301,7 +12148,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 845 */
     /* type PARROT_INLINE_OP, */
@@ -11313,7 +12161,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 846 */
     /* type PARROT_INLINE_OP, */
@@ -11325,7 +12174,8 @@
     6,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 847 */
     /* type PARROT_INLINE_OP, */
@@ -11337,7 +12187,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 848 */
     /* type PARROT_INLINE_OP, */
@@ -11349,7 +12200,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 849 */
     /* type PARROT_INLINE_OP, */
@@ -11361,7 +12213,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 850 */
     /* type PARROT_INLINE_OP, */
@@ -11373,7 +12226,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 851 */
     /* type PARROT_INLINE_OP, */
@@ -11385,7 +12239,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 852 */
     /* type PARROT_INLINE_OP, */
@@ -11397,7 +12252,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 853 */
     /* type PARROT_INLINE_OP, */
@@ -11409,7 +12265,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 854 */
     /* type PARROT_INLINE_OP, */
@@ -11421,7 +12278,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 855 */
     /* type PARROT_INLINE_OP, */
@@ -11433,7 +12291,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 856 */
     /* type PARROT_INLINE_OP, */
@@ -11445,7 +12304,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 857 */
     /* type PARROT_INLINE_OP, */
@@ -11457,7 +12317,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 858 */
     /* type PARROT_INLINE_OP, */
@@ -11469,7 +12330,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 859 */
     /* type PARROT_INLINE_OP, */
@@ -11481,7 +12343,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 860 */
     /* type PARROT_INLINE_OP, */
@@ -11493,7 +12356,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 861 */
     /* type PARROT_INLINE_OP, */
@@ -11505,7 +12369,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 862 */
     /* type PARROT_INLINE_OP, */
@@ -11517,7 +12382,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 863 */
     /* type PARROT_INLINE_OP, */
@@ -11529,7 +12395,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 864 */
     /* type PARROT_INLINE_OP, */
@@ -11541,7 +12408,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 865 */
     /* type PARROT_INLINE_OP, */
@@ -11553,7 +12421,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 866 */
     /* type PARROT_INLINE_OP, */
@@ -11565,7 +12434,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 867 */
     /* type PARROT_INLINE_OP, */
@@ -11577,7 +12447,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 868 */
     /* type PARROT_INLINE_OP, */
@@ -11589,7 +12460,8 @@
     4,
     { PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 869 */
     /* type PARROT_INLINE_OP, */
@@ -11601,7 +12473,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 870 */
     /* type PARROT_INLINE_OP, */
@@ -11613,7 +12486,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 871 */
     /* type PARROT_INLINE_OP, */
@@ -11625,7 +12499,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 872 */
     /* type PARROT_INLINE_OP, */
@@ -11637,7 +12512,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 873 */
     /* type PARROT_INLINE_OP, */
@@ -11649,7 +12525,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 874 */
     /* type PARROT_INLINE_OP, */
@@ -11661,7 +12538,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 875 */
     /* type PARROT_FUNCTION_OP, */
@@ -11673,7 +12551,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 876 */
     /* type PARROT_FUNCTION_OP, */
@@ -11685,7 +12564,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 877 */
     /* type PARROT_FUNCTION_OP, */
@@ -11697,7 +12577,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 878 */
     /* type PARROT_FUNCTION_OP, */
@@ -11709,7 +12590,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 879 */
     /* type PARROT_FUNCTION_OP, */
@@ -11721,7 +12603,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 880 */
     /* type PARROT_FUNCTION_OP, */
@@ -11733,7 +12616,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 881 */
     /* type PARROT_FUNCTION_OP, */
@@ -11745,7 +12629,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 882 */
     /* type PARROT_FUNCTION_OP, */
@@ -11757,7 +12642,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 883 */
     /* type PARROT_FUNCTION_OP, */
@@ -11769,7 +12655,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 884 */
     /* type PARROT_FUNCTION_OP, */
@@ -11781,7 +12668,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 885 */
     /* type PARROT_FUNCTION_OP, */
@@ -11793,7 +12681,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 886 */
     /* type PARROT_FUNCTION_OP, */
@@ -11805,7 +12694,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 887 */
     /* type PARROT_FUNCTION_OP, */
@@ -11817,7 +12707,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 888 */
     /* type PARROT_FUNCTION_OP, */
@@ -11829,7 +12720,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 889 */
     /* type PARROT_FUNCTION_OP, */
@@ -11841,7 +12733,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 890 */
     /* type PARROT_FUNCTION_OP, */
@@ -11853,7 +12746,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 891 */
     /* type PARROT_FUNCTION_OP, */
@@ -11865,7 +12759,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 892 */
     /* type PARROT_FUNCTION_OP, */
@@ -11877,7 +12772,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 893 */
     /* type PARROT_FUNCTION_OP, */
@@ -11889,7 +12785,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 894 */
     /* type PARROT_FUNCTION_OP, */
@@ -11901,7 +12798,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 895 */
     /* type PARROT_FUNCTION_OP, */
@@ -11913,7 +12811,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 896 */
     /* type PARROT_FUNCTION_OP, */
@@ -11925,7 +12824,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 897 */
     /* type PARROT_FUNCTION_OP, */
@@ -11937,7 +12837,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 898 */
     /* type PARROT_FUNCTION_OP, */
@@ -11949,7 +12850,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 899 */
     /* type PARROT_FUNCTION_OP, */
@@ -11961,7 +12863,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 900 */
     /* type PARROT_FUNCTION_OP, */
@@ -11973,7 +12876,8 @@
     4,
     { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 901 */
     /* type PARROT_INLINE_OP, */
@@ -11985,7 +12889,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 902 */
     /* type PARROT_INLINE_OP, */
@@ -11997,7 +12902,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 903 */
     /* type PARROT_INLINE_OP, */
@@ -12009,7 +12915,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 904 */
     /* type PARROT_INLINE_OP, */
@@ -12021,7 +12928,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 905 */
     /* type PARROT_INLINE_OP, */
@@ -12033,7 +12941,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 906 */
     /* type PARROT_INLINE_OP, */
@@ -12045,7 +12954,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 907 */
     /* type PARROT_INLINE_OP, */
@@ -12057,7 +12967,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 908 */
     /* type PARROT_INLINE_OP, */
@@ -12069,7 +12980,8 @@
     5,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 909 */
     /* type PARROT_INLINE_OP, */
@@ -12081,7 +12993,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 910 */
     /* type PARROT_INLINE_OP, */
@@ -12093,7 +13006,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 911 */
     /* type PARROT_INLINE_OP, */
@@ -12105,7 +13019,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 912 */
     /* type PARROT_INLINE_OP, */
@@ -12117,7 +13032,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 913 */
     /* type PARROT_INLINE_OP, */
@@ -12129,7 +13045,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 914 */
     /* type PARROT_INLINE_OP, */
@@ -12141,7 +13058,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 915 */
     /* type PARROT_INLINE_OP, */
@@ -12153,7 +13071,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 916 */
     /* type PARROT_INLINE_OP, */
@@ -12165,7 +13084,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 917 */
     /* type PARROT_INLINE_OP, */
@@ -12177,7 +13097,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 918 */
     /* type PARROT_INLINE_OP, */
@@ -12189,7 +13110,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 919 */
     /* type PARROT_INLINE_OP, */
@@ -12201,7 +13123,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 920 */
     /* type PARROT_INLINE_OP, */
@@ -12213,7 +13136,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 921 */
     /* type PARROT_INLINE_OP, */
@@ -12225,7 +13149,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 922 */
     /* type PARROT_INLINE_OP, */
@@ -12237,7 +13162,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 923 */
     /* type PARROT_INLINE_OP, */
@@ -12249,7 +13175,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 924 */
     /* type PARROT_INLINE_OP, */
@@ -12261,7 +13188,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 925 */
     /* type PARROT_INLINE_OP, */
@@ -12273,7 +13201,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 926 */
     /* type PARROT_INLINE_OP, */
@@ -12285,7 +13214,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 927 */
     /* type PARROT_INLINE_OP, */
@@ -12297,7 +13227,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 928 */
     /* type PARROT_INLINE_OP, */
@@ -12309,7 +13240,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 929 */
     /* type PARROT_INLINE_OP, */
@@ -12321,7 +13253,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 930 */
     /* type PARROT_INLINE_OP, */
@@ -12333,7 +13266,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 931 */
     /* type PARROT_INLINE_OP, */
@@ -12345,7 +13279,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 932 */
     /* type PARROT_INLINE_OP, */
@@ -12357,7 +13292,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 933 */
     /* type PARROT_INLINE_OP, */
@@ -12369,7 +13305,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 934 */
     /* type PARROT_INLINE_OP, */
@@ -12381,7 +13318,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 935 */
     /* type PARROT_INLINE_OP, */
@@ -12393,7 +13331,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 936 */
     /* type PARROT_INLINE_OP, */
@@ -12405,7 +13344,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 937 */
     /* type PARROT_INLINE_OP, */
@@ -12417,7 +13357,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 938 */
     /* type PARROT_INLINE_OP, */
@@ -12429,7 +13370,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 939 */
     /* type PARROT_INLINE_OP, */
@@ -12441,7 +13383,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 940 */
     /* type PARROT_INLINE_OP, */
@@ -12453,7 +13396,8 @@
     6,
     { PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    { 0, 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 941 */
     /* type PARROT_FUNCTION_OP, */
@@ -12465,7 +13409,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 942 */
     /* type PARROT_FUNCTION_OP, */
@@ -12477,7 +13422,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 943 */
     /* type PARROT_FUNCTION_OP, */
@@ -12489,7 +13435,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 944 */
     /* type PARROT_INLINE_OP, */
@@ -12501,7 +13448,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 945 */
     /* type PARROT_INLINE_OP, */
@@ -12513,7 +13461,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 946 */
     /* type PARROT_INLINE_OP, */
@@ -12525,7 +13474,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 947 */
     /* type PARROT_INLINE_OP, */
@@ -12537,7 +13487,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 948 */
     /* type PARROT_FUNCTION_OP, */
@@ -12549,7 +13500,8 @@
     2,
     { PARROT_ARG_S },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 949 */
     /* type PARROT_FUNCTION_OP, */
@@ -12561,7 +13513,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 950 */
     /* type PARROT_FUNCTION_OP, */
@@ -12573,7 +13526,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 951 */
     /* type PARROT_INLINE_OP, */
@@ -12585,7 +13539,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 952 */
     /* type PARROT_INLINE_OP, */
@@ -12597,7 +13552,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 953 */
     /* type PARROT_INLINE_OP, */
@@ -12609,7 +13565,8 @@
     2,
     { PARROT_ARG_I },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 954 */
     /* type PARROT_INLINE_OP, */
@@ -12621,7 +13578,8 @@
     2,
     { PARROT_ARG_IC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 955 */
     /* type PARROT_INLINE_OP, */
@@ -12633,7 +13591,8 @@
     2,
     { PARROT_ARG_N },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 956 */
     /* type PARROT_INLINE_OP, */
@@ -12645,7 +13604,8 @@
     2,
     { PARROT_ARG_NC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 957 */
     /* type PARROT_FUNCTION_OP, */
@@ -12657,7 +13617,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 958 */
     /* type PARROT_FUNCTION_OP, */
@@ -12669,7 +13630,8 @@
     3,
     { PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 959 */
     /* type PARROT_FUNCTION_OP, */
@@ -12681,7 +13643,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 960 */
     /* type PARROT_FUNCTION_OP, */
@@ -12693,7 +13656,8 @@
     3,
     { PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 961 */
     /* type PARROT_FUNCTION_OP, */
@@ -12705,7 +13669,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 962 */
     /* type PARROT_FUNCTION_OP, */
@@ -12717,7 +13682,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 963 */
     /* type PARROT_FUNCTION_OP, */
@@ -12729,7 +13695,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 964 */
     /* type PARROT_FUNCTION_OP, */
@@ -12741,7 +13708,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 965 */
     /* type PARROT_FUNCTION_OP, */
@@ -12753,7 +13721,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 966 */
     /* type PARROT_FUNCTION_OP, */
@@ -12765,7 +13734,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 967 */
     /* type PARROT_FUNCTION_OP, */
@@ -12777,7 +13747,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 968 */
     /* type PARROT_FUNCTION_OP, */
@@ -12789,7 +13760,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 969 */
     /* type PARROT_FUNCTION_OP, */
@@ -12801,7 +13773,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 970 */
     /* type PARROT_FUNCTION_OP, */
@@ -12813,7 +13786,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 971 */
     /* type PARROT_FUNCTION_OP, */
@@ -12825,7 +13799,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 972 */
     /* type PARROT_FUNCTION_OP, */
@@ -12837,7 +13812,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 973 */
     /* type PARROT_FUNCTION_OP, */
@@ -12849,7 +13825,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_OUT },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 974 */
     /* type PARROT_FUNCTION_OP, */
@@ -12861,7 +13838,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 975 */
     /* type PARROT_FUNCTION_OP, */
@@ -12873,7 +13851,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 976 */
     /* type PARROT_FUNCTION_OP, */
@@ -12885,7 +13864,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 977 */
     /* type PARROT_FUNCTION_OP, */
@@ -12897,7 +13877,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 978 */
     /* type PARROT_FUNCTION_OP, */
@@ -12909,7 +13890,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 979 */
     /* type PARROT_FUNCTION_OP, */
@@ -12921,7 +13903,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 980 */
     /* type PARROT_FUNCTION_OP, */
@@ -12933,7 +13916,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 981 */
     /* type PARROT_FUNCTION_OP, */
@@ -12945,7 +13929,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 982 */
     /* type PARROT_FUNCTION_OP, */
@@ -12957,7 +13942,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 983 */
     /* type PARROT_FUNCTION_OP, */
@@ -12969,7 +13955,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 984 */
     /* type PARROT_FUNCTION_OP, */
@@ -12981,7 +13968,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 985 */
     /* type PARROT_FUNCTION_OP, */
@@ -12993,7 +13981,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 986 */
     /* type PARROT_FUNCTION_OP, */
@@ -13005,7 +13994,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 987 */
     /* type PARROT_FUNCTION_OP, */
@@ -13017,7 +14007,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 988 */
     /* type PARROT_FUNCTION_OP, */
@@ -13029,7 +14020,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 989 */
     /* type PARROT_FUNCTION_OP, */
@@ -13041,7 +14033,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 990 */
     /* type PARROT_FUNCTION_OP, */
@@ -13053,7 +14046,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 991 */
     /* type PARROT_FUNCTION_OP, */
@@ -13065,7 +14059,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 992 */
     /* type PARROT_FUNCTION_OP, */
@@ -13077,7 +14072,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 993 */
     /* type PARROT_FUNCTION_OP, */
@@ -13089,7 +14085,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 994 */
     /* type PARROT_FUNCTION_OP, */
@@ -13101,7 +14098,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 995 */
     /* type PARROT_FUNCTION_OP, */
@@ -13113,7 +14111,8 @@
     3,
     { PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 996 */
     /* type PARROT_FUNCTION_OP, */
@@ -13125,7 +14124,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 997 */
     /* type PARROT_FUNCTION_OP, */
@@ -13137,7 +14137,8 @@
     4,
     { PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 998 */
     /* type PARROT_FUNCTION_OP, */
@@ -13149,7 +14150,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 999 */
     /* type PARROT_FUNCTION_OP, */
@@ -13161,7 +14163,8 @@
     4,
     { PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1000 */
     /* type PARROT_FUNCTION_OP, */
@@ -13173,7 +14176,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1001 */
     /* type PARROT_FUNCTION_OP, */
@@ -13185,7 +14189,8 @@
     3,
     { PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1002 */
     /* type PARROT_FUNCTION_OP, */
@@ -13197,7 +14202,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1003 */
     /* type PARROT_FUNCTION_OP, */
@@ -13209,7 +14215,8 @@
     4,
     { PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1004 */
     /* type PARROT_FUNCTION_OP, */
@@ -13221,7 +14228,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1005 */
     /* type PARROT_FUNCTION_OP, */
@@ -13233,7 +14241,8 @@
     4,
     { PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1006 */
     /* type PARROT_FUNCTION_OP, */
@@ -13245,7 +14254,8 @@
     3,
     { PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1007 */
     /* type PARROT_FUNCTION_OP, */
@@ -13257,7 +14267,8 @@
     3,
     { PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1008 */
     /* type PARROT_FUNCTION_OP, */
@@ -13269,7 +14280,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1009 */
     /* type PARROT_FUNCTION_OP, */
@@ -13281,7 +14293,8 @@
     4,
     { PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1010 */
     /* type PARROT_FUNCTION_OP, */
@@ -13293,7 +14306,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1011 */
     /* type PARROT_FUNCTION_OP, */
@@ -13305,7 +14319,8 @@
     4,
     { PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1012 */
     /* type PARROT_FUNCTION_OP, */
@@ -13317,7 +14332,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1013 */
     /* type PARROT_FUNCTION_OP, */
@@ -13329,7 +14345,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1014 */
     /* type PARROT_INLINE_OP, */
@@ -13341,7 +14358,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1015 */
     /* type PARROT_INLINE_OP, */
@@ -13353,7 +14371,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1016 */
     /* type PARROT_FUNCTION_OP, */
@@ -13365,7 +14384,8 @@
     1,
     { (arg_type_t) 0 },
     { (arg_dir_t) 0 },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 1017 */
     /* type PARROT_INLINE_OP, */
@@ -13377,7 +14397,8 @@
     3,
     { PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
+    { 0, 1 },
+    &core_op_lib
   },
   { /* 1018 */
     /* type PARROT_INLINE_OP, */
@@ -13389,7 +14410,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1019 */
     /* type PARROT_INLINE_OP, */
@@ -13401,7 +14423,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1020 */
     /* type PARROT_INLINE_OP, */
@@ -13413,7 +14436,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1021 */
     /* type PARROT_INLINE_OP, */
@@ -13425,7 +14449,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1022 */
     /* type PARROT_INLINE_OP, */
@@ -13437,7 +14462,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1023 */
     /* type PARROT_INLINE_OP, */
@@ -13449,7 +14475,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1024 */
     /* type PARROT_INLINE_OP, */
@@ -13461,7 +14488,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1025 */
     /* type PARROT_INLINE_OP, */
@@ -13473,7 +14501,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1026 */
     /* type PARROT_INLINE_OP, */
@@ -13485,7 +14514,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1027 */
     /* type PARROT_INLINE_OP, */
@@ -13497,7 +14527,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1028 */
     /* type PARROT_INLINE_OP, */
@@ -13509,7 +14540,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1029 */
     /* type PARROT_INLINE_OP, */
@@ -13521,7 +14553,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1030 */
     /* type PARROT_INLINE_OP, */
@@ -13533,7 +14566,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1031 */
     /* type PARROT_INLINE_OP, */
@@ -13545,7 +14579,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1032 */
     /* type PARROT_INLINE_OP, */
@@ -13557,7 +14592,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1033 */
     /* type PARROT_INLINE_OP, */
@@ -13569,7 +14605,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1034 */
     /* type PARROT_INLINE_OP, */
@@ -13581,7 +14618,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1035 */
     /* type PARROT_INLINE_OP, */
@@ -13593,7 +14631,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1036 */
     /* type PARROT_INLINE_OP, */
@@ -13605,7 +14644,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1037 */
     /* type PARROT_INLINE_OP, */
@@ -13617,7 +14657,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1038 */
     /* type PARROT_INLINE_OP, */
@@ -13629,7 +14670,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1039 */
     /* type PARROT_INLINE_OP, */
@@ -13641,7 +14683,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1040 */
     /* type PARROT_INLINE_OP, */
@@ -13653,7 +14696,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1041 */
     /* type PARROT_INLINE_OP, */
@@ -13665,7 +14709,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1042 */
     /* type PARROT_INLINE_OP, */
@@ -13677,7 +14722,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1043 */
     /* type PARROT_INLINE_OP, */
@@ -13689,7 +14735,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1044 */
     /* type PARROT_INLINE_OP, */
@@ -13701,7 +14748,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1045 */
     /* type PARROT_INLINE_OP, */
@@ -13713,7 +14761,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1046 */
     /* type PARROT_INLINE_OP, */
@@ -13725,7 +14774,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1047 */
     /* type PARROT_INLINE_OP, */
@@ -13737,7 +14787,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1048 */
     /* type PARROT_INLINE_OP, */
@@ -13749,7 +14800,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_P, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1049 */
     /* type PARROT_INLINE_OP, */
@@ -13761,7 +14813,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1050 */
     /* type PARROT_INLINE_OP, */
@@ -13773,7 +14826,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_PC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1051 */
     /* type PARROT_INLINE_OP, */
@@ -13785,7 +14839,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1052 */
     /* type PARROT_INLINE_OP, */
@@ -13797,7 +14852,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1053 */
     /* type PARROT_INLINE_OP, */
@@ -13809,7 +14865,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1054 */
     /* type PARROT_INLINE_OP, */
@@ -13821,7 +14878,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1055 */
     /* type PARROT_INLINE_OP, */
@@ -13833,7 +14891,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1056 */
     /* type PARROT_INLINE_OP, */
@@ -13845,7 +14904,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1057 */
     /* type PARROT_INLINE_OP, */
@@ -13857,7 +14917,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1058 */
     /* type PARROT_INLINE_OP, */
@@ -13869,7 +14930,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1059 */
     /* type PARROT_INLINE_OP, */
@@ -13881,7 +14943,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1060 */
     /* type PARROT_INLINE_OP, */
@@ -13893,7 +14956,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1061 */
     /* type PARROT_INLINE_OP, */
@@ -13905,7 +14969,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1062 */
     /* type PARROT_INLINE_OP, */
@@ -13917,7 +14982,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_P },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1063 */
     /* type PARROT_INLINE_OP, */
@@ -13929,7 +14995,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1064 */
     /* type PARROT_INLINE_OP, */
@@ -13941,7 +15008,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_S, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1065 */
     /* type PARROT_INLINE_OP, */
@@ -13953,7 +15021,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1066 */
     /* type PARROT_INLINE_OP, */
@@ -13965,7 +15034,8 @@
     5,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_SC, PARROT_ARG_PC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    { 0, 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1067 */
     /* type PARROT_FUNCTION_OP, */
@@ -13977,7 +15047,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1068 */
     /* type PARROT_FUNCTION_OP, */
@@ -13989,7 +15060,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1069 */
     /* type PARROT_FUNCTION_OP, */
@@ -14001,7 +15073,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1070 */
     /* type PARROT_FUNCTION_OP, */
@@ -14013,7 +15086,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1071 */
     /* type PARROT_FUNCTION_OP, */
@@ -14025,7 +15099,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1072 */
     /* type PARROT_FUNCTION_OP, */
@@ -14037,7 +15112,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1073 */
     /* type PARROT_FUNCTION_OP, */
@@ -14049,7 +15125,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1074 */
     /* type PARROT_FUNCTION_OP, */
@@ -14061,7 +15138,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1075 */
     /* type PARROT_FUNCTION_OP, */
@@ -14073,7 +15151,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1076 */
     /* type PARROT_FUNCTION_OP, */
@@ -14085,7 +15164,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_I },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1077 */
     /* type PARROT_FUNCTION_OP, */
@@ -14097,7 +15177,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_P, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1078 */
     /* type PARROT_FUNCTION_OP, */
@@ -14109,7 +15190,8 @@
     4,
     { PARROT_ARG_P, PARROT_ARG_PC, PARROT_ARG_IC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0 }
+    { 0, 0, 0 },
+    &core_op_lib
   },
   { /* 1079 */
     /* type PARROT_FUNCTION_OP, */
@@ -14121,7 +15203,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_S },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1080 */
     /* type PARROT_FUNCTION_OP, */
@@ -14133,7 +15216,8 @@
     3,
     { PARROT_ARG_I, PARROT_ARG_SC },
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
+    { 0, 0 },
+    &core_op_lib
   },
   { /* 1081 */
     /* type PARROT_FUNCTION_OP, */
@@ -14145,7 +15229,8 @@
     2,
     { PARROT_ARG_P },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
   { /* 1082 */
     /* type PARROT_FUNCTION_OP, */
@@ -14157,7 +15242,8 @@
     2,
     { PARROT_ARG_PC },
     { PARROT_ARGDIR_IN },
-    { 0 }
+    { 0 },
+    &core_op_lib
   },
 
 };
@@ -19367,32 +20453,14 @@
 opcode_t *
 Parrot_addattribute_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const class_name  = string_from_literal(interp, "Class");
-    STRING * const role_name   = string_from_literal(interp, "Role");
-
-    if (VTABLE_isa(interp, PREG(1), class_name) || VTABLE_isa(interp, PREG(1), role_name))
-        VTABLE_add_attribute(interp, PREG(1), SREG(2), PMCNULL);
-    else {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
-            EXCEPTION_INVALID_OPERATION,
-            "Cannot add attribute to non-class");return (opcode_t *)handler;
-    }
+    VTABLE_add_attribute(interp, PREG(1), SREG(2), PMCNULL);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_addattribute_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const class_name  = string_from_literal(interp, "Class");
-    STRING * const role_name   = string_from_literal(interp, "Role");
-
-    if (VTABLE_isa(interp, PREG(1), class_name) || VTABLE_isa(interp, PREG(1), role_name))
-        VTABLE_add_attribute(interp, PREG(1), CONST(2).u.string, PMCNULL);
-    else {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
-            EXCEPTION_INVALID_OPERATION,
-            "Cannot add attribute to non-class");return (opcode_t *)handler;
-    }
+    VTABLE_add_attribute(interp, PREG(1), CONST(2).u.string, PMCNULL);
 
 return (opcode_t *)cur_opcode + 3;}
 
@@ -22692,13 +23760,8 @@
 
     PMC * const result =
         PMC_IS_NULL(lex_pad)
-            ? NULL
+            ? PMCNULL
             : VTABLE_get_pmc_keyed_str(interp, lex_pad, lex_name);
-    if (!result) {
-        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, NULL,
-                EXCEPTION_LEX_NOT_FOUND,
-                "Lexical '%Ss' not found", lex_name);return (opcode_t *)handler;
-    }
     PREG(1) = result;
 
 return (opcode_t *)cur_opcode + 3;}
@@ -22712,13 +23775,8 @@
 
     PMC * const result =
         PMC_IS_NULL(lex_pad)
-            ? NULL
+            ? PMCNULL
             : VTABLE_get_pmc_keyed_str(interp, lex_pad, lex_name);
-    if (!result) {
-        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, NULL,
-                EXCEPTION_LEX_NOT_FOUND,
-                "Lexical '%Ss' not found", lex_name);return (opcode_t *)handler;
-    }
     PREG(1) = result;
 
 return (opcode_t *)cur_opcode + 3;}
@@ -25011,13 +26069,14 @@
 ** op lib descriptor:
 */
 
-static op_lib_t core_op_lib = {
-  "core",               /* name */
-  "",             /* suffix */
+/* XXX should be static, but C++ doesn't want to play ball */
+op_lib_t core_op_lib = {
+  "core_ops",                /* name */
+  "",                  /* suffix */
   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 */
@@ -25045,11 +26104,13 @@
     op_info_t * info;
     struct hop *next;
 } HOP;
+
+static HOP *hop_buckets;
 static HOP **hop;
 
 static void hop_init(PARROT_INTERP);
 static size_t hash_str(const char *str);
-static void store_op(PARROT_INTERP, op_info_t *info, int full);
+static void store_op(PARROT_INTERP, op_info_t *info, HOP *p, const char *name);
 
 /* XXX on changing interpreters, this should be called,
    through a hook */
@@ -25081,63 +26142,68 @@
     return key;
 }
 
-static void store_op(PARROT_INTERP, op_info_t *info, int full)
+
+static void store_op(PARROT_INTERP, op_info_t *info, HOP *p, const char *name)
 {
-    HOP * const p     = mem_gc_allocate_zeroed_typed(interp, HOP);
-    const size_t hidx =
-        hash_str(full ? info->full_name : info->name) % OP_HASH_SIZE;
+    const size_t hidx = hash_str(name) % OP_HASH_SIZE;
 
-    p->info   = info;
-    p->next   = hop[hidx];
-    hop[hidx] = p;
+    p->info           = info;
+    p->next           = hop[hidx];
+    hop[hidx]         = p;
 }
 
-static int get_op(PARROT_INTERP, const char * name, int full)
+static int get_op(PARROT_INTERP, const char *name, int full)
 {
-    const HOP * p;
+    const HOP   *p;
     const size_t hidx = hash_str(name) % OP_HASH_SIZE;
+
     if (!hop) {
         hop = mem_gc_allocate_n_zeroed_typed(interp, OP_HASH_SIZE,HOP *);
         hop_init(interp);
     }
+
     for (p = hop[hidx]; p; p = p->next) {
-        if(STREQ(name, full ? p->info->full_name : p->info->name))
+        if (STREQ(name, full ? p->info->full_name : p->info->name))
             return p->info - core_op_lib.op_info_table;
     }
+
     return -1;
 }
 
+
 static void hop_init(PARROT_INTERP)
 {
-    size_t i;
     op_info_t * const info = core_op_lib.op_info_table;
+
+    /* allocate the storage all in one chunk
+     * yes, this is profligate, but we can tighten it later */
+    HOP *hops = hop_buckets =
+        mem_gc_allocate_n_zeroed_typed(interp, core_op_lib.op_count * 2, HOP );
+
+    size_t i;
+
     /* store full names */
-    for (i = 0; i < core_op_lib.op_count; i++)
-        store_op(interp, info + i, 1);
-    /* plus one short name */
-    for (i = 0; i < core_op_lib.op_count; i++)
-        if (get_op(interp, info[i].name, 0) == -1)
-            store_op(interp, info + i, 0);
+    for (i = 0; i < core_op_lib.op_count; i++) {
+        store_op(interp, info + i, hops++, info[i].full_name);
+
+        /* plus one short name */
+        if (i && info[i - 1].name != info[i].name)
+            store_op(interp, info + i, hops++, info[i].name);
+    }
 }
 
 static void hop_deinit(PARROT_INTERP)
 {
-    if (hop) {
-        size_t i;
-        for (i = 0; i < OP_HASH_SIZE; i++) {
-            HOP *p = hop[i];
-            while (p) {
-                HOP * const next = p->next;
-                mem_gc_free(interp, p);
-                p = next;
-            }
-        }
+    if (hop)
         mem_sys_free(hop);
-        hop = NULL;
-    }
+    if (hop_buckets)
+        mem_gc_free(interp, hop_buckets);
+
+    hop         = NULL;
+    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) {
 
@@ -25166,7 +26232,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/gc_massacre/src/ops/object.ops
==============================================================================
--- branches/gc_massacre/src/ops/object.ops	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/ops/object.ops	Sun Sep  5 13:20:27 2010	(r48799)
@@ -463,17 +463,7 @@
 =cut
 
 inline op addattribute(invar PMC, in STR) :object_classes {
-    STRING * const class_name  = string_from_literal(interp, "Class");
-    STRING * const role_name   = string_from_literal(interp, "Role");
-
-    if (VTABLE_isa(interp, $1, class_name) || VTABLE_isa(interp, $1, role_name))
-        VTABLE_add_attribute(interp, $1, $2, PMCNULL);
-    else {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
-            EXCEPTION_INVALID_OPERATION,
-            "Cannot add attribute to non-class");
-        goto ADDRESS(handler);
-    }
+    VTABLE_add_attribute(interp, $1, $2, PMCNULL);
 }
 
 =item B<removeattribute>(invar PMC, in STR) B<(unimplemented)>

Modified: branches/gc_massacre/src/ops/pmc.ops
==============================================================================
--- branches/gc_massacre/src/ops/pmc.ops	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/ops/pmc.ops	Sun Sep  5 13:20:27 2010	(r48799)
@@ -681,7 +681,7 @@
 
 =item B<morph>(invar PMC, in PMC)
 
-Have $1 turn itself into a PMC of type $2.
+Have $1 turn itself into a PMC of type $2. $2 should be a Class PMC.
 
 =cut
 

Modified: branches/gc_massacre/src/ops/set.ops
==============================================================================
--- branches/gc_massacre/src/ops/set.ops	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/ops/set.ops	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/ops/var.ops
==============================================================================
--- branches/gc_massacre/src/ops/var.ops	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/ops/var.ops	Sun Sep  5 13:20:27 2010	(r48799)
@@ -86,10 +86,8 @@
 
 =item B<find_lex>(out PMC, in STR)
 
-Find the lexical variable named $2 and store it in $1. This
-opcode either throws an exception or returns a Null PMC for the failure case,
-depending on the implementation of the LexPad PMC. Parrot's
-standard LexPad throws an exception for non-existent names.
+Find the lexical variable named $2 and store it in $1. Return a
+Null PMC if the variable is not found.
 
 =cut
 
@@ -100,14 +98,8 @@
 
     PMC * const result =
         PMC_IS_NULL(lex_pad)
-            ? NULL
+            ? PMCNULL
             : VTABLE_get_pmc_keyed_str(interp, lex_pad, lex_name);
-    if (!result) {
-        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, NULL,
-                EXCEPTION_LEX_NOT_FOUND,
-                "Lexical '%Ss' not found", lex_name);
-        goto ADDRESS(handler);
-    }
     $1 = result;
 }
 
@@ -455,9 +447,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/gc_massacre/src/packdump.c
==============================================================================
--- branches/gc_massacre/src/packdump.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/packdump.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -318,15 +318,16 @@
                     namespace_description = null;
                 }
                 Parrot_io_printf(interp,
-                            "\t\tclass => %Ss,\n"
-                            "\t\tstart_offs => %d,\n"
-                            "\t\tend_offs => %d,\n"
-                            "\t\tname    => '%Ss',\n"
-                            "\t\tsubid   => '%Ss',\n"
-                            "\t\tmethod  => '%Ss',\n"
-                            "\t\tnsentry => '%Ss',\n"
-                            "\t\tnamespace => %Ss\n"
-                            "\t\tHLL_id => %d,\n",
+                            "\t\tclass       => %Ss,\n"
+                            "\t\tstart_offs  => %d,\n"
+                            "\t\tend_offs    => %d,\n"
+                            "\t\tname        => '%Ss',\n"
+                            "\t\tsubid       => '%Ss',\n"
+                            "\t\tmethod      => '%Ss',\n"
+                            "\t\tnsentry     => '%Ss',\n"
+                            "\t\tnamespace   => %Ss,\n"
+                            "\t\tHLL_id      => %d,\n"
+                            "\t\tn_regs_used => [ %d, %d, %d, %d ],\n",
                             pmc->vtable->whoami,
                             sub->start_offs,
                             sub->end_offs,
@@ -335,7 +336,11 @@
                             sub->method_name,
                             sub->ns_entry_name,
                             namespace_description,
-                            sub->HLL_id);
+                            sub->HLL_id,
+                            sub->n_regs_used[0],
+                            sub->n_regs_used[1],
+                            sub->n_regs_used[2],
+                            sub->n_regs_used[3]);
                 break;
               case enum_class_FixedIntegerArray:
                 Parrot_io_printf(interp,

Modified: branches/gc_massacre/src/packfile.c
==============================================================================
--- branches/gc_massacre/src/packfile.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/packfile.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -25,15 +25,18 @@
 */
 
 #include "parrot/parrot.h"
+#include "parrot/packfile.h"
 #include "parrot/embed.h"
 #include "parrot/extend.h"
-#include "parrot/packfile.h"
+#include "parrot/dynext.h"
 #include "parrot/runcore_api.h"
 #include "../compilers/imcc/imc.h"
 #include "packfile.str"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_key.h"
 #include "pmc/pmc_callcontext.h"
+#include "pmc/pmc_parrotlibrary.h"
+#include "parrot/oplib/core_ops.h"
 
 /* HEADERIZER HFILE: include/parrot/packfile.h */
 
@@ -53,6 +56,31 @@
     SHIM(int add))
         __attribute__nonnull__(1);
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static opcode_t * byte_code_pack(PARROT_INTERP,
+    ARGMOD(PackFile_Segment *self),
+    ARGOUT(opcode_t *cursor))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*self)
+        FUNC_MODIFIES(*cursor);
+
+static size_t byte_code_packed_size(SHIM_INTERP,
+    ARGIN(PackFile_Segment *self))
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static const opcode_t * byte_code_unpack(PARROT_INTERP,
+    ARGMOD(PackFile_Segment *self),
+    ARGIN(const opcode_t *cursor))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*self);
+
 static void clone_constant(PARROT_INTERP,
     ARGIN(PackFile_Constant *old_const),
     ARGMOD(PackFile_Constant *new_const))
@@ -353,6 +381,16 @@
     , PARROT_ASSERT_ARG(self))
 #define ASSERT_ARGS_byte_code_new __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_byte_code_pack __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(cursor))
+#define ASSERT_ARGS_byte_code_packed_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_byte_code_unpack __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_clone_constant __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(old_const) \
@@ -1626,7 +1664,8 @@
 pf_register_standard_funcs(PARROT_INTERP, ARGMOD(PackFile *pf))
 {
     ASSERT_ARGS(pf_register_standard_funcs)
-    PackFile_funcs dirf = {
+
+    static const PackFile_funcs dirf = {
         directory_new,
         directory_destroy,
         directory_packed_size,
@@ -1635,7 +1674,7 @@
         directory_dump
     };
 
-    PackFile_funcs defaultf = {
+    static const PackFile_funcs defaultf = {
         PackFile_Segment_new,
         (PackFile_Segment_destroy_func_t)     NULLfunc,
         (PackFile_Segment_packed_size_func_t) NULLfunc,
@@ -1644,7 +1683,7 @@
         default_dump
     };
 
-    PackFile_funcs fixupf = {
+    static const PackFile_funcs fixupf = {
         fixup_new,
         fixup_destroy,
         fixup_packed_size,
@@ -1653,7 +1692,7 @@
         default_dump
     };
 
-    PackFile_funcs constf = {
+    static const PackFile_funcs constf = {
         const_new,
         const_destroy,
         PackFile_ConstTable_pack_size,
@@ -1662,16 +1701,16 @@
         default_dump
     };
 
-    PackFile_funcs bytef = {
+    static const PackFile_funcs bytef = {
         byte_code_new,
         byte_code_destroy,
-        (PackFile_Segment_packed_size_func_t) NULLfunc,
-        (PackFile_Segment_pack_func_t)        NULLfunc,
-        (PackFile_Segment_unpack_func_t)      NULLfunc,
+        byte_code_packed_size,
+        byte_code_pack,
+        byte_code_unpack,
         default_dump
     };
 
-    const PackFile_funcs debugf = {
+    static const PackFile_funcs debugf = {
         pf_debug_new,
         pf_debug_destroy,
         pf_debug_packed_size,
@@ -1680,7 +1719,7 @@
         pf_debug_dump
     };
 
-    const PackFile_funcs annotationf = {
+    static const PackFile_funcs annotationf = {
         PackFile_Annotations_new,
         PackFile_Annotations_destroy,
         PackFile_Annotations_packed_size,
@@ -2589,9 +2628,32 @@
     ASSERT_ARGS(byte_code_destroy)
     PackFile_ByteCode * const byte_code = (PackFile_ByteCode *)self;
 
-    byte_code->fixups      = NULL;
-    byte_code->const_table = NULL;
-    byte_code->debugs      = NULL;
+    if (byte_code->op_func_table)
+        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) {
+        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);
+    }
+
+    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->fixups          = NULL;
+    byte_code->op_func_table   = NULL;
+    byte_code->op_info_table   = NULL;
+    byte_code->op_mapping.libs = NULL;
 }
 
 
@@ -2617,6 +2679,206 @@
     return (PackFile_Segment *) byte_code;
 }
 
+/*
+
+=item C<static size_t byte_code_packed_size(PARROT_INTERP, PackFile_Segment
+*self)>
+
+Computes the size in multiples of C<opcode_t> required to store the passed
+C<PackFile_ByteCode>.
+
+=cut
+
+*/
+
+static size_t
+byte_code_packed_size(SHIM_INTERP, ARGIN(PackFile_Segment *self))
+{
+    ASSERT_ARGS(byte_code_packed_size)
+    PackFile_ByteCode * const byte_code = (PackFile_ByteCode *)self;
+    size_t size;
+    int i;
+
+    size = 2; /* op_count + n_libs */
+
+    for (i = 0; i < byte_code->op_mapping.n_libs; i++) {
+        PackFile_ByteCode_OpMappingEntry * const entry = &byte_code->op_mapping.libs[i];
+
+        /* dynoplib data */
+        size += PF_size_cstring(entry->lib->name);
+        size += 3; /* major + minor + patch */
+
+        /* op entries */
+        size += 1;                /* n_ops */
+        size += entry->n_ops * 2; /* lib_ops and table_ops */
+    }
+
+    return size;
+}
+
+/*
+
+=item C<static opcode_t * byte_code_pack(PARROT_INTERP, PackFile_Segment *self,
+opcode_t *cursor)>
+
+Stores the passed C<PackFile_ByteCode> segment in bytecode.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static opcode_t *
+byte_code_pack(PARROT_INTERP, ARGMOD(PackFile_Segment *self), ARGOUT(opcode_t *cursor))
+{
+    ASSERT_ARGS(byte_code_pack)
+    PackFile_ByteCode * const byte_code = (PackFile_ByteCode *)self;
+    int i, j;
+
+    *cursor++ = byte_code->op_count;
+    *cursor++ = byte_code->op_mapping.n_libs;
+
+    for (i = 0; i < byte_code->op_mapping.n_libs; i++) {
+        PackFile_ByteCode_OpMappingEntry * const entry = &byte_code->op_mapping.libs[i];
+
+        /* dynoplib data */
+        cursor    = PF_store_cstring(cursor, entry->lib->name);
+        *cursor++ = entry->lib->major_version;
+        *cursor++ = entry->lib->minor_version;
+        *cursor++ = entry->lib->patch_version;
+
+        /* op entries */
+        *cursor++ = entry->n_ops;
+        for (j = 0; j < entry->n_ops; j++) {
+            *cursor++ = entry->table_ops[j];
+            *cursor++ = entry->lib_ops[j];
+        }
+    }
+
+    return cursor;
+}
+
+/*
+
+=item C<static const opcode_t * byte_code_unpack(PARROT_INTERP, PackFile_Segment
+*self, const opcode_t *cursor)>
+
+Unpacks a bytecode segment into the passed C<PackFile_ByteCode>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static const opcode_t *
+byte_code_unpack(PARROT_INTERP, ARGMOD(PackFile_Segment *self), ARGIN(const opcode_t *cursor))
+{
+    ASSERT_ARGS(byte_code_unpack)
+    PackFile_ByteCode * const byte_code = (PackFile_ByteCode *)self;
+    int i;
+    int total_ops = 0;
+
+    byte_code->op_count          = PF_fetch_opcode(self->pf, &cursor);
+    byte_code->op_func_table     = mem_gc_allocate_n_zeroed_typed(interp,
+                                        byte_code->op_count, op_func_t);
+    byte_code->op_info_table     = mem_gc_allocate_n_zeroed_typed(interp,
+                                        byte_code->op_count, op_info_t *);
+
+
+    byte_code->op_mapping.n_libs = PF_fetch_opcode(self->pf, &cursor);
+    byte_code->op_mapping.libs   = mem_gc_allocate_n_zeroed_typed(interp,
+                                    byte_code->op_mapping.n_libs,
+                                    PackFile_ByteCode_OpMappingEntry);
+
+    for (i = 0; i < byte_code->op_mapping.n_libs; i++) {
+        PackFile_ByteCode_OpMappingEntry * const entry = &byte_code->op_mapping.libs[i];
+
+        /* dynoplib data */
+        {
+            char * const    lib_name = PF_fetch_cstring(interp, self->pf, &cursor);
+            const opcode_t  major    = PF_fetch_opcode(self->pf, &cursor);
+            const opcode_t  minor    = PF_fetch_opcode(self->pf, &cursor);
+            const opcode_t  patch    = PF_fetch_opcode(self->pf, &cursor);
+
+            /* XXX
+             * broken encapsulation => should make this data easier to access somehow
+             */
+            if (STREQ(lib_name, PARROT_CORE_OPLIB_NAME)) {
+                entry->lib = PARROT_CORE_OPLIB_INIT(interp, 1);
+            }
+            else {
+                PMC *lib_pmc = Parrot_load_lib(interp,
+                                                Parrot_str_new(interp, lib_name, 0),
+                                                NULL);
+                typedef op_lib_t *(*oplib_init_t)(PARROT_INTERP, long init);
+                void *oplib_init;
+                oplib_init_t oplib_init_f;
+                if (!VTABLE_get_bool(interp, lib_pmc))
+                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+                        "Could not load oplib `%s'", lib_name);
+                GETATTR_ParrotLibrary_oplib_init(interp, lib_pmc, oplib_init);
+                oplib_init_f = (oplib_init_t)D2FPTR(oplib_init);
+                entry->lib = oplib_init_f(interp, 1);
+            }
+
+
+            mem_gc_free(interp, lib_name);
+
+            if (entry->lib->major_version != major
+            ||  entry->lib->minor_version != minor
+            ||  entry->lib->patch_version != patch)
+                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+                    "Incompatible versions of `%s' oplib. Found %d.%d.%d but loaded %d.%d.%d",
+                    entry->lib->name, major, minor, patch, entry->lib->major_version,
+                    entry->lib->minor_version, entry->lib->patch_version);
+        }
+
+        /* op entries */
+        {
+            int       j;
+            total_ops += entry->n_ops = PF_fetch_opcode(self->pf, &cursor);
+
+            entry->table_ops = mem_gc_allocate_n_zeroed_typed(interp,
+                                    entry->n_ops, opcode_t);
+            entry->lib_ops   = mem_gc_allocate_n_zeroed_typed(interp,
+                                    entry->n_ops, opcode_t);
+
+            for (j = 0; j < entry->n_ops; j++) {
+                opcode_t idx = PF_fetch_opcode(self->pf, &cursor);
+                opcode_t op  = PF_fetch_opcode(self->pf, &cursor);
+
+                if (0 > op || op >= entry->lib->op_count)
+                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
+                        "opcode index out of bounds on library `%s'. Found %d, expected 0 to %d.",
+                        entry->lib->name, op, entry->lib->op_count - 1);
+
+                if (0 > idx || idx >= byte_code->op_count)
+                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
+                        "op table index out of bounds for entry from library `%s'."
+                        " Found %d, expected 0 to %d",
+                        entry->lib->name, idx, byte_code->op_count - 1);
+
+                if (byte_code->op_func_table[idx])
+                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
+                        "duplicate entries in optable");
+
+                entry->table_ops[j]           = idx;
+                entry->lib_ops[j]             = op;
+                byte_code->op_func_table[idx] = entry->lib->op_func_table[op];
+                byte_code->op_info_table[idx] = &entry->lib->op_info_table[op];
+            }
+        }
+    }
+
+    if (total_ops != byte_code->op_count)
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
+            "wrong number of ops decoded for optable. Decoded %d, but expected %d",
+            total_ops, byte_code->op_count);
+
+    return cursor;
+}
 
 /*
 
@@ -3222,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);
 }
 
@@ -3810,7 +4061,7 @@
 
       case PFC_PMC:
         component = self->u.key; /* the pmc (Sub, ...) */
-        packed_size = PF_size_strlen(Parrot_freeze_pbc_size(interp, component, ct));
+        packed_size = PF_size_strlen(Parrot_freeze_pbc_size(interp, component, ct)) - 1;
         break;
 
       default:
@@ -3905,15 +4156,12 @@
     ASSERT_ARGS(PackFile_Constant_unpack_pmc)
     PackFile * const pf   = constt->base.pf;
     STRING          *_sub = CONST_STRING(interp, "Sub");
-    STRING          *image;
     PMC             *pmc;
 
     /* thawing the PMC needs the real packfile in place */
     PackFile_ByteCode * const cs_save = interp->code;
     interp->code                      = pf->cur_cs;
-    image                             = PF_fetch_string(interp, pf, &cursor);
-
-    pmc         = Parrot_thaw_pbc(interp, image, constt);
+    pmc                               = Parrot_thaw_pbc(interp, constt, &cursor);
 
     /* place item in const_table */
     self->type  = PFC_PMC;
@@ -4064,6 +4312,10 @@
     /* Free any entries. */
     if (self->entries)
         mem_gc_free(interp, self->entries);
+
+    self->keys    = NULL;
+    self->groups  = NULL;
+    self->entries = NULL;
 }
 
 
@@ -4206,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);
@@ -4402,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 and modified: branches/gc_massacre/src/packfile/byteorder.h (from r48798, branches/gc_massacre/src/byteorder.c)
==============================================================================
--- branches/gc_massacre/src/byteorder.c	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/src/packfile/byteorder.h	Sun Sep  5 13:20:27 2010	(r48799)
@@ -25,13 +25,16 @@
 
 */
 
+#ifndef PARROT_BYTEORDER_H_GUARD
+#define PARROT_BYTEORDER_H_GUARD
+
 #include "parrot/parrot.h"
 
-/* HEADERIZER HFILE: include/parrot/packfile.h */
+/* HEADERIZER HFILE: none */
 
 /*
 
-=item C<INTVAL fetch_iv_le(INTVAL w)>
+=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
@@ -41,12 +44,12 @@
 
 */
 
+PARROT_INLINE
 PARROT_WARN_UNUSED_RESULT
 PARROT_CONST_FUNCTION
-INTVAL
+static INTVAL
 fetch_iv_le(INTVAL w)
 {
-    ASSERT_ARGS(fetch_iv_le)
 #if !PARROT_BIGENDIAN
     return w;
 #else
@@ -75,7 +78,7 @@
 
 /*
 
-=item C<INTVAL fetch_iv_be(INTVAL w)>
+=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.
@@ -84,12 +87,12 @@
 
 */
 
+PARROT_INLINE
 PARROT_WARN_UNUSED_RESULT
 PARROT_CONST_FUNCTION
-INTVAL
+static INTVAL
 fetch_iv_be(INTVAL w)
 {
-    ASSERT_ARGS(fetch_iv_be)
 #if PARROT_BIGENDIAN
     return w;
 #else
@@ -117,7 +120,7 @@
 
 /*
 
-=item C<opcode_t fetch_op_be(opcode_t w)>
+=item C<static opcode_t fetch_op_be(opcode_t w)>
 
 Same as C<fetch_iv_be> for opcode_t
 
@@ -125,12 +128,12 @@
 
 */
 
+PARROT_INLINE
 PARROT_WARN_UNUSED_RESULT
 PARROT_CONST_FUNCTION
-opcode_t
+static opcode_t
 fetch_op_be(opcode_t w)
 {
-    ASSERT_ARGS(fetch_op_be)
 #if PARROT_BIGENDIAN
     return w;
 #else
@@ -155,7 +158,7 @@
 
 /*
 
-=item C<opcode_t fetch_op_le(opcode_t w)>
+=item C<static opcode_t fetch_op_le(opcode_t w)>
 
 Same as C<fetch_iv_le> for opcode_t
 
@@ -163,12 +166,12 @@
 
 */
 
+PARROT_INLINE
 PARROT_WARN_UNUSED_RESULT
 PARROT_CONST_FUNCTION
-opcode_t
+static opcode_t
 fetch_op_le(opcode_t w)
 {
-    ASSERT_ARGS(fetch_op_le)
 #if !PARROT_BIGENDIAN
     return w;
 #else
@@ -205,7 +208,7 @@
 
 /*
 
-=item C<void fetch_buf_be_4(unsigned char *rb, const unsigned char *b)>
+=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>.
 
@@ -213,10 +216,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -229,7 +232,7 @@
 
 /*
 
-=item C<void fetch_buf_le_4(unsigned char *rb, const unsigned char *b)>
+=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>.
 
@@ -237,10 +240,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -253,7 +256,7 @@
 
 /*
 
-=item C<void fetch_buf_be_8(unsigned char *rb, const unsigned char *b)>
+=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>
 
@@ -261,10 +264,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -281,7 +284,7 @@
 
 /*
 
-=item C<void fetch_buf_le_8(unsigned char *rb, const unsigned char *b)>
+=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>.
 
@@ -289,10 +292,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -309,7 +312,7 @@
 
 /*
 
-=item C<void fetch_buf_le_12(unsigned char *rb, const unsigned char *b)>
+=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>.
 
@@ -317,10 +320,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -341,7 +344,7 @@
 
 /*
 
-=item C<void fetch_buf_be_12(unsigned char *rb, const unsigned char *b)>
+=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>.
 
@@ -349,10 +352,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -373,7 +376,7 @@
 
 /*
 
-=item C<void fetch_buf_le_16(unsigned char *rb, const unsigned char *b)>
+=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>.
 
@@ -381,10 +384,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -409,7 +412,7 @@
 
 /*
 
-=item C<void fetch_buf_be_16(unsigned char *rb, const unsigned char *b)>
+=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>.
 
@@ -417,10 +420,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -445,7 +448,7 @@
 
 /*
 
-=item C<void fetch_buf_le_32(unsigned char *rb, const unsigned char *b)>
+=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>.
 
@@ -453,10 +456,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -497,7 +500,7 @@
 
 /*
 
-=item C<void fetch_buf_be_32(unsigned char *rb, const unsigned char *b)>
+=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>.
 
@@ -505,10 +508,10 @@
 
 */
 
-void
+PARROT_INLINE
+static 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
@@ -547,6 +550,8 @@
 #endif
 }
 
+#endif /* PARROT_BYTEORDER_H_GUARD */
+
 /*
 
 =back

Modified: branches/gc_massacre/src/packfile/pf_items.c
==============================================================================
--- branches/gc_massacre/src/packfile/pf_items.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/packfile/pf_items.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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);
@@ -1189,6 +1188,107 @@
 
 /*
 
+=item C<STRING * PF_fetch_buf(PARROT_INTERP, PackFile *pf, const opcode_t
+**cursor)>
+
+Fetches a buffer (fixed_8 encoded temporary C<STRING>) from bytecode.
+
+Opcode format is:
+
+    opcode_t size
+    * data
+
+When used for freeze/thaw, the C<pf> argument might be C<NULL>.
+
+The returned buffer points to the underlying packfile. It should be used and
+discarded immediately to avoid things changing underneath you.
+
+=cut
+
+*/
+
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING *
+PF_fetch_buf(PARROT_INTERP, ARGIN_NULLOK(PackFile *pf), ARGIN(const opcode_t **cursor))
+{
+    ASSERT_ARGS(PF_fetch_buf)
+    const int wordsize = pf ? pf->header->wordsize : sizeof (opcode_t);
+    size_t  size       = PF_fetch_opcode(pf, cursor);
+    STRING *s          = Parrot_str_new_init(interp, (const char *)*cursor, size,
+                            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr,
+                            PObj_external_FLAG);
+    *((const unsigned char **)(cursor)) += ROUND_UP_B(size, wordsize);
+    return s;
+}
+
+
+/*
+
+=item C<opcode_t* PF_store_buf(opcode_t *cursor, const STRING *s)>
+
+Write a buffer (fixed_8 encoded, binary string) to the opcode stream. These
+are encoded more compactly and read more efficiently than normal strings, but
+have limitations (see C<PF_fetch_buf>).
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+opcode_t*
+PF_store_buf(ARGOUT(opcode_t *cursor), ARGIN(const STRING *s))
+{
+    ASSERT_ARGS(PF_store_buf)
+    const int  wordsize = sizeof (opcode_t);
+
+    PARROT_ASSERT(s->encoding == Parrot_fixed_8_encoding_ptr);
+    PARROT_ASSERT(s->charset  == Parrot_binary_charset_ptr);
+
+    *cursor++ = s->bufused;
+
+    if (s->strstart) {
+        char *charcursor = (char *) cursor;
+        mem_sys_memcopy(charcursor, s->strstart, s->bufused);
+        charcursor += s->bufused;
+
+        /* Pad up to wordsize boundary. */
+        while ((charcursor - (char *)cursor) % wordsize)
+            *charcursor++ = 0;
+
+        cursor += (charcursor - (char *)cursor) / wordsize;
+    }
+
+    return cursor;
+}
+
+
+/*
+
+=item C<size_t PF_size_buf(const STRING *s)>
+
+Reports the stored size of a buffer in C<opcode_t> units.
+
+=cut
+
+*/
+
+PARROT_PURE_FUNCTION
+size_t
+PF_size_buf(ARGIN(const STRING *s))
+{
+    ASSERT_ARGS(PF_size_buf)
+    if (STRING_IS_NULL(s))
+        return 1;
+    else
+        return PF_size_strlen(s->bufused) - 1;
+}
+
+
+/*
+
 =item C<STRING * PF_fetch_string(PARROT_INTERP, PackFile *pf, const opcode_t
 **cursor)>
 

Modified: branches/gc_massacre/src/packout.c
==============================================================================
--- branches/gc_massacre/src/packout.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/packout.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -346,7 +346,6 @@
     ASSERT_ARGS(PackFile_Constant_pack)
     PMC *key;
     size_t i;
-    STRING *image;
 
     *cursor++ = self->type;
 
@@ -361,9 +360,7 @@
         break;
 
       case PFC_PMC:
-        key = self->u.key;      /* the (Sub) PMC */
-        image = Parrot_freeze_pbc(interp, key, const_table);
-        cursor = PF_store_string(cursor, image);
+        cursor  = Parrot_freeze_pbc(interp, self->u.key, const_table, cursor);
         break;
 
       case PFC_KEY:

Modified: branches/gc_massacre/src/pbc_dump.c
==============================================================================
--- branches/gc_massacre/src/pbc_dump.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pbc_dump.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -118,7 +118,7 @@
 
     while (pc < self->data + self->size) {
         /* n can't be const; the ADD_OP_VAR_PART macro increments it */
-        size_t n = (size_t)interp->op_info_table[*pc].op_count;
+        size_t n = (size_t)interp->code->op_info_table[*pc]->op_count;
         size_t i;
 
         /* trace_op_dump(interp, self->pf->src, pc); */
@@ -131,7 +131,7 @@
                 Parrot_io_printf(interp, "         ");
 
         Parrot_io_printf(interp, "%s\n",
-                interp->op_info_table[*pc].full_name);
+                interp->code->op_info_table[*pc]->full_name);
 
         ADD_OP_VAR_PART(interp, interp->code, pc, n);
         pc += n;
@@ -159,16 +159,16 @@
     const PackFile_Segment *debug      = PackFile_find_segment(interp,
                                             self->dir, debug_name, 1);
 
-    const opcode_t  * pc            = self->data;
-    const opcode_t  * debug_ops     = debug->data;
-    const op_info_t * const op_info = interp->op_info_table;
+    opcode_t   * pc            = self->data;
+    opcode_t   * debug_ops     = debug->data;
+    op_info_t ** const op_info = interp->code->op_info_table;
 
     while (pc < self->data + self->size) {
         /* n can't be const; the ADD_OP_VAR_PART macro increments it */
-        size_t n = (size_t)op_info[*pc].op_count;
+        size_t n = (size_t)op_info[*pc]->op_count;
 
         Parrot_io_printf(interp, " %04x:  %s\n",
-            *(debug_ops++), op_info[*pc].full_name);
+            *(debug_ops++), op_info[*pc]->full_name);
 
         ADD_OP_VAR_PART(interp, interp->code, pc, n);
         pc += n;

Modified: branches/gc_massacre/src/pbc_merge.c
==============================================================================
--- branches/gc_massacre/src/pbc_merge.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pbc_merge.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -64,6 +64,16 @@
 static void help(PARROT_INTERP)
         __attribute__nonnull__(1);
 
+static void pbc_fixup_bytecode(PARROT_INTERP,
+    ARGMOD(pbc_merge_input **inputs),
+    int num_inputs,
+    ARGMOD(PackFile_ByteCode *bc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*inputs)
+        FUNC_MODIFIES(*bc);
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PackFile* pbc_merge_begin(PARROT_INTERP,
@@ -100,16 +110,6 @@
         FUNC_MODIFIES(*pf)
         FUNC_MODIFIES(*bc);
 
-static void pbc_merge_ctpointers(PARROT_INTERP,
-    ARGMOD(pbc_merge_input **inputs),
-    int num_inputs,
-    ARGMOD(PackFile_ByteCode *bc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*inputs)
-        FUNC_MODIFIES(*bc);
-
 static void pbc_merge_debugs(PARROT_INTERP,
     ARGMOD(pbc_merge_input **inputs),
     int num_inputs,
@@ -149,6 +149,10 @@
 
 #define ASSERT_ARGS_help __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_pbc_fixup_bytecode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(inputs) \
+    , PARROT_ASSERT_ARG(bc))
 #define ASSERT_ARGS_pbc_merge_begin __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(inputs))
@@ -161,10 +165,6 @@
     , PARROT_ASSERT_ARG(inputs) \
     , PARROT_ASSERT_ARG(pf) \
     , PARROT_ASSERT_ARG(bc))
-#define ASSERT_ARGS_pbc_merge_ctpointers __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(inputs) \
-    , PARROT_ASSERT_ARG(bc))
 #define ASSERT_ARGS_pbc_merge_debugs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(inputs) \
@@ -601,7 +601,6 @@
     /* Create merged debug segment. Replace created data and mappings
        with merged ones we have created. */
     debug_seg = Parrot_new_debug_seg(interp, bc, num_lines);
-    PackFile_add_segment(interp, &pf->directory, (PackFile_Segment*)debug_seg);
     mem_gc_free(interp, debug_seg->base.data);
     debug_seg->base.data    = lines;
     mem_gc_free(interp, debug_seg->mappings);
@@ -610,23 +609,90 @@
     debug_seg->num_mappings = num_mappings;
 }
 
+
+static opcode_t
+bytecode_remap_op(PARROT_INTERP, PackFile *pf, opcode_t op) {
+    int i;
+    op_info_t         *info    = pf->cur_cs->op_info_table[op];
+    op_lib_t          *lib     = info->lib;
+    op_func_t         op_func  = pf->cur_cs->op_func_table[op];
+    PackFile_ByteCode *bc      = interp->code;
+    PackFile_ByteCode_OpMappingEntry *om;
+
+    for (i = 0; i < bc->op_mapping.n_libs; i++) {
+        if (lib == bc->op_mapping.libs[i].lib) {
+            om = &bc->op_mapping.libs[i];
+            goto found_lib;
+        }
+    }
+
+    /* library not yet mapped */
+    bc->op_mapping.n_libs++;
+    bc->op_mapping.libs = mem_gc_realloc_n_typed_zeroed(interp, bc->op_mapping.libs,
+                            bc->op_mapping.n_libs, bc->op_mapping.n_libs - 1,
+                            PackFile_ByteCode_OpMappingEntry);
+
+    /* initialize a new lib entry */
+    om            = &bc->op_mapping.libs[bc->op_mapping.n_libs - 1];
+    om->lib       = lib;
+    om->n_ops     = 0;
+    om->lib_ops   = mem_gc_allocate_n_zeroed_typed(interp, 0, opcode_t);
+    om->table_ops = mem_gc_allocate_n_zeroed_typed(interp, 0, opcode_t);
+
+  found_lib:
+    for (i = 0; i < om->n_ops; i++) {
+        if (bc->op_func_table[om->table_ops[i]] == op_func)
+            return om->table_ops[i];
+    }
+
+    /* op not yet mapped */
+    bc->op_count++;
+    bc->op_func_table =
+        mem_gc_realloc_n_typed_zeroed(interp, bc->op_func_table, bc->op_count, bc->op_count - 1,
+                                        op_func_t);
+    bc->op_func_table[bc->op_count - 1] = op_func;
+    bc->op_info_table =
+        mem_gc_realloc_n_typed_zeroed(interp, bc->op_info_table, bc->op_count, bc->op_count - 1,
+                                        op_info_t *);
+    bc->op_info_table[bc->op_count - 1] = info;
+
+    /* initialize new op mapping */
+    om->n_ops++;
+
+    om->lib_ops =
+        mem_gc_realloc_n_typed_zeroed(interp, om->lib_ops, om->n_ops, om->n_ops - 1, opcode_t);
+    for (i = 0; i < lib->op_count; i++) {
+        if (lib->op_func_table[i] == op_func) {
+            om->lib_ops[om->n_ops - 1] = i;
+            break;
+        }
+    }
+    PARROT_ASSERT(om->lib_ops[om->n_ops - 1] || !i);
+
+    om->table_ops =
+        mem_gc_realloc_n_typed_zeroed(interp, om->table_ops, om->n_ops, om->n_ops - 1, opcode_t);
+    om->table_ops[om->n_ops - 1] = bc->op_count - 1;
+
+    return bc->op_count - 1;
+}
+
 /*
 
-=item C<static void pbc_merge_ctpointers(PARROT_INTERP, pbc_merge_input
-**inputs, int num_inputs, PackFile_ByteCode *bc)>
+=item C<static void pbc_fixup_bytecode(PARROT_INTERP, pbc_merge_input **inputs,
+int num_inputs, PackFile_ByteCode *bc)>
 
-This function corrects the pointers into the constants table found in the
-bytecode.
+Fixup bytecode. This includes correcting pointers into the constant table
+and updating the ops mapping.
 
 =cut
 
 */
 
 static void
-pbc_merge_ctpointers(PARROT_INTERP, ARGMOD(pbc_merge_input **inputs),
+pbc_fixup_bytecode(PARROT_INTERP, ARGMOD(pbc_merge_input **inputs),
                      int num_inputs, ARGMOD(PackFile_ByteCode *bc))
 {
-    ASSERT_ARGS(pbc_merge_ctpointers)
+    ASSERT_ARGS(pbc_fixup_bytecode)
     int        cur_arg;
     opcode_t  *op_ptr;
     opcode_t  *ops       = bc->base.data;
@@ -637,15 +703,16 @@
     while (cur_op < (opcode_t)bc->base.size) {
         op_info_t *op;
         opcode_t   op_num;
+        op_func_t  op_func;
 
         /* Keep track of the current input file. */
         if (cur_input + 1 < num_inputs &&
             cur_op >= inputs[cur_input + 1]->code_start)
             ++cur_input;
 
-        /* Get info about this op and jump over it. */
-        op_num = ops[cur_op];
-        op     = &interp->op_info_table[op_num];
+        /* Get info about this op, remap it, and jump over it. */
+        op_num = ops[cur_op] = bytecode_remap_op(interp, inputs[cur_input]->pf, ops[cur_op]);
+        op     = bc->op_info_table[op_num];
         op_ptr = ops + cur_op;
         ++cur_op;
 
@@ -669,10 +736,11 @@
         }
 
         /* Handle special case variable argument opcodes. */
-        if (op_num == PARROT_OP_set_args_pc    ||
-                op_num == PARROT_OP_get_results_pc ||
-                op_num == PARROT_OP_get_params_pc  ||
-                op_num == PARROT_OP_set_returns_pc) {
+        op_func = interp->code->op_func_table[op_num];
+        if (op_func == interp->op_func_table[PARROT_OP_set_args_pc]    ||
+            op_func == interp->op_func_table[PARROT_OP_get_results_pc] ||
+            op_func == interp->op_func_table[PARROT_OP_get_params_pc]  ||
+            op_func == interp->op_func_table[PARROT_OP_set_returns_pc]) {
             /* Get the signature. */
             PMC * const sig = bc->const_table->constants[op_ptr[1]].u.key;
 
@@ -739,7 +807,7 @@
     }
 
     /* Merge the various stuff. */
-    bc = pbc_merge_bytecode(interp, inputs, num_inputs, merged);
+    bc = interp->code = pbc_merge_bytecode(interp, inputs, num_inputs, merged);
     ct = pbc_merge_constants(interp, inputs, num_inputs, merged, bc);
     UNUSED(ct);
 
@@ -747,7 +815,7 @@
     pbc_merge_debugs(interp, inputs, num_inputs, merged, bc);
 
     /* Walk bytecode and fix ops that reference the constants table. */
-    pbc_merge_ctpointers(interp, inputs, num_inputs, bc);
+    pbc_fixup_bytecode(interp, inputs, num_inputs, bc);
 
     for (i = 0; i < num_inputs; ++i) {
         mem_gc_free(interp, inputs[i]->const_map);

Modified: branches/gc_massacre/src/pmc.c
==============================================================================
--- branches/gc_massacre/src/pmc.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -127,7 +127,7 @@
 
 #ifndef NDEBUG
 
-    pmc->vtable      = (VTABLE  *)0xdeadbeef;
+    pmc->data = (DPOINTER *)0xdeadbeef;
 
 #endif
 
@@ -573,10 +573,9 @@
     PMC *const classobj = interp->vtables[base_type]->pmc_class;
 
     if (!PMC_IS_NULL(classobj) && PObj_is_class_TEST(classobj)) {
-        PMC * const initial =
-          Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
-        VTABLE_set_integer_native(interp, initial, init);
-        return VTABLE_instantiate(interp, classobj, initial);
+        PMC * const obj = VTABLE_instantiate(interp, classobj, PMCNULL);
+        VTABLE_set_integer_native(interp, obj, init);
+        return obj;
     }
     else {
         PMC * const pmc = get_new_pmc_header(interp, base_type, 0);

Modified: branches/gc_massacre/src/pmc/addrregistry.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/addrregistry.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/addrregistry.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/pmc/bigint.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/bigint.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/bigint.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -384,6 +384,14 @@
 /* HEADERIZER END: static */
 /* HEADERIZER HFILE: none */
 
+/*
+
+=item C<static void bigint_init(PARROT_INTERP, PMC *self)>
+
+=cut
+
+*/
+
 static void
 bigint_init(PARROT_INTERP, ARGIN(PMC *self))
 {
@@ -394,6 +402,14 @@
     mpz_init(bi->b);
 }
 
+/*
+
+=item C<static void bigint_clear(PARROT_INTERP, PMC *self)>
+
+=cut
+
+*/
+
 static void
 bigint_clear(PARROT_INTERP, ARGIN(PMC *self))
 {
@@ -405,6 +421,14 @@
     mem_gc_free(interp, bi);
 }
 
+/*
+
+=item C<static void bigint_set(PARROT_INTERP, PMC *dest, PMC *src)>
+
+=cut
+
+*/
+
 static void
 bigint_set(PARROT_INTERP, ARGMOD(PMC *dest), ARGIN(PMC *src))
 {
@@ -418,6 +442,17 @@
     mpz_set(bi_dest->b, bi_src->b);
 }
 
+/*
+
+=item C<static void bigint_set_long(PARROT_INTERP, PMC *self, long value)>
+
+
+
+
+=cut
+
+*/
+
 static void
 bigint_set_long(PARROT_INTERP, ARGMOD(PMC *self), long value)
 {
@@ -428,6 +463,16 @@
     mpz_set_si(bi->b, value);
 }
 
+/*
+
+=item C<static void bigint_set_double(PARROT_INTERP, PMC *self, double value)>
+
+
+
+=cut
+
+*/
+
 static void
 bigint_set_double(PARROT_INTERP, ARGMOD(PMC *self), double value)
 {
@@ -438,6 +483,15 @@
     mpz_set_d(bi->b, value);
 }
 
+/*
+
+=item C<static void bigint_set_str(PARROT_INTERP, PMC *self, const char *value,
+int base)>
+
+=cut
+
+*/
+
 static void
 bigint_set_str(PARROT_INTERP, ARGMOD(PMC *self), ARGIN(const char *value), int base)
 {
@@ -448,6 +502,14 @@
     mpz_set_str(bi->b, value, base);
 }
 
+/*
+
+=item C<static BIGINT* bigint_get_self(PARROT_INTERP, PMC *self)>
+
+=cut
+
+*/
+
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static BIGINT*
@@ -460,6 +522,14 @@
     return bi;
 }
 
+/*
+
+=item C<static void bigint_set_self(PARROT_INTERP, PMC *self, BIGINT *value)>
+
+=cut
+
+*/
+
 static void
 bigint_set_self(PARROT_INTERP, ARGMOD(PMC *self), ARGIN(BIGINT *value))
 {
@@ -470,6 +540,14 @@
     mpz_set(bi->b, (mpz_srcptr)((BIGINT*)value)->b);
 }
 
+/*
+
+=item C<static long bigint_get_long(PARROT_INTERP, PMC *self)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 static long
 bigint_get_long(PARROT_INTERP, ARGIN(PMC *self))
@@ -484,6 +562,14 @@
     Parrot_ex_throw_from_c_args(interp, NULL, 1, "bigint_get_long: number too big");
 }
 
+/*
+
+=item C<static int bigint_get_bool(PARROT_INTERP, PMC *self)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 static int
 bigint_get_bool(PARROT_INTERP, ARGIN(PMC *self))
@@ -498,6 +584,14 @@
         return 0;
 }
 
+/*
+
+=item C<static char * bigint_get_string(PARROT_INTERP, PMC *self, int base)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static char *
@@ -515,6 +609,14 @@
     return mpz_get_str(s, base, bi->b);
 }
 
+/*
+
+=item C<static double bigint_get_double(PARROT_INTERP, PMC *self)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 static double
 bigint_get_double(PARROT_INTERP, ARGIN(PMC *self))
@@ -526,6 +628,16 @@
     return mpz_get_d(bi->b);
 }
 
+
+/*
+
+=item C<static void bigint_add_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
+
+=cut
+
+*/
+
 static void
 bigint_add_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest))
 {
@@ -538,6 +650,15 @@
     mpz_add(bi_dest->b, bi_self->b, bi_value->b);
 }
 
+/*
+
+=item C<static void bigint_add_bigint_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
+
+=cut
+
+*/
+
 static void
 bigint_add_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
 {
@@ -552,6 +673,15 @@
         mpz_add_ui(bi_dest->b, bi_self->b, (unsigned long int)value);
 }
 
+/*
+
+=item C<static void bigint_sub_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
+
+=cut
+
+*/
+
 static void
 bigint_sub_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest))
 {
@@ -564,6 +694,15 @@
     mpz_sub(bi_dest->b, bi_self->b, bi_value->b);
 }
 
+/*
+
+=item C<static void bigint_sub_bigint_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
+
+=cut
+
+*/
+
 static void
 bigint_sub_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
 {
@@ -578,6 +717,15 @@
         mpz_sub_ui(bi_dest->b, bi_self->b, (unsigned long int)value);
 }
 
+/*
+
+=item C<static void bigint_mul_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
+
+=cut
+
+*/
+
 static void
 bigint_mul_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest))
 {
@@ -590,6 +738,15 @@
     mpz_mul(bi_dest->b, bi_self->b, bi_value->b);
 }
 
+/*
+
+=item C<static void bigint_mul_bigint_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
+
+=cut
+
+*/
+
 static void
 bigint_mul_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
 {
@@ -601,6 +758,15 @@
     mpz_mul_si(bi_dest->b, bi_self->b, value);
 }
 
+/*
+
+=item C<static void bigint_pow_bigint_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
+
+=cut
+
+*/
+
 static void
 bigint_pow_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
 {
@@ -612,6 +778,14 @@
     mpz_pow_ui(bi_dest->b, bi_self->b, (unsigned long int)value);
 }
 
+/*
+
+=item C<static void int_check_divide_zero(PARROT_INTERP, INTVAL value)>
+
+=cut
+
+*/
+
 static void
 int_check_divide_zero(PARROT_INTERP, INTVAL value)
 {
@@ -620,6 +794,14 @@
             "Divide by zero");
 }
 
+/*
+
+=item C<static void bigint_check_divide_zero(PARROT_INTERP, PMC *value)>
+
+=cut
+
+*/
+
 static void
 bigint_check_divide_zero(PARROT_INTERP, ARGIN(PMC *value))
 {
@@ -633,6 +815,15 @@
             "Divide by zero");
 }
 
+/*
+
+=item C<static void bigint_div_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
+
+=cut
+
+*/
+
 static void
 bigint_div_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest))
 {
@@ -647,6 +838,15 @@
     mpz_div(bi_dest->b, bi_self->b, bi_value->b);
 }
 
+/*
+
+=item C<static void bigint_div_bigint_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
+
+=cut
+
+*/
+
 static void
 bigint_div_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
 {
@@ -666,6 +866,15 @@
         mpz_div_ui(bi_dest->b, bi_self->b, (unsigned long int)value);
 }
 
+/*
+
+=item C<static void bigint_fdiv_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
+
+=cut
+
+*/
+
 static void
 bigint_fdiv_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *value), ARGMOD(PMC *dest))
 {
@@ -679,6 +888,15 @@
     mpz_fdiv_q(bi_dest->b, bi_self->b, bi_value->b);
 }
 
+/*
+
+=item C<static void bigint_fdiv_bigint_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
+
+=cut
+
+*/
+
 static void
 bigint_fdiv_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
 {
@@ -697,6 +915,15 @@
         mpz_fdiv_q_ui(bi_dest->b, bi_self->b, (unsigned long int)value);
 }
 
+/*
+
+=item C<static void bigint_mod_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
+
+=cut
+
+*/
+
 static void
 bigint_mod_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *value), ARGMOD(PMC *dest))
 {
@@ -710,6 +937,15 @@
     mpz_mod(bi_dest->b, bi_self->b, bi_value->b);
 }
 
+/*
+
+=item C<static void bigint_mod_bigint_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
+
+=cut
+
+*/
+
 static void
 bigint_mod_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
 {
@@ -727,6 +963,14 @@
         mpz_mod_ui(bi_dest->b, bi_self->b, (unsigned long int)value);
 }
 
+/*
+
+=item C<static INTVAL bigint_cmp(PARROT_INTERP, PMC *self, PMC *value)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 static INTVAL
 bigint_cmp(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value))
@@ -739,6 +983,14 @@
     return mpz_cmp(bi_self->b, bi_value->b);
 }
 
+/*
+
+=item C<static INTVAL bigint_cmp_int(PARROT_INTERP, PMC *self, INTVAL value)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 static INTVAL
 bigint_cmp_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value)
@@ -750,6 +1002,14 @@
     return mpz_cmp_si(bi->b, value);
 }
 
+/*
+
+=item C<static void bigint_abs(PARROT_INTERP, PMC *self, PMC *dest)>
+
+=cut
+
+*/
+
 static void
 bigint_abs(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest))
 {
@@ -761,6 +1021,14 @@
     mpz_abs(bi_dest->b, bi_self->b);
 }
 
+/*
+
+=item C<static void bigint_neg(PARROT_INTERP, PMC *self, PMC *dest)>
+
+=cut
+
+*/
+
 static void
 bigint_neg(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest))
 {
@@ -990,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/gc_massacre/src/pmc/bignum.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/bignum.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/bignum.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -148,6 +148,15 @@
 =item C<static void bignum_set_default_prec(PARROT_INTERP, PMC *self, INTVAL
 prec)>
 
+All the above functions are local to the bignum pmc and are there to provide
+interface functions to The GNU MP Bignum Library (GMP)
+
+If GMP is not available, at present these functions will throw a NYI exception.
+
+(It would be appreciated if maintainers/implementors could improve the
+ documentation here at some stage. possibly adding documentation for
+ individual functions - at least the less obvious ones.)
+
 =cut
 
 */

Modified: branches/gc_massacre/src/pmc/boolean.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/boolean.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/boolean.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -99,6 +99,28 @@
     VTABLE void set_string_native(STRING *value) {
         SELF.set_bool(Parrot_str_boolean(INTERP, value));
     }
+
+/*
+
+=item C<PMC *neg(PMC *dest)>
+
+=item C<void i_neg()>
+
+Set C<dest> to the ''negated'' value of C<SELF>. The negative of a
+boolean value is the identical value.
+
+=cut
+
+*/
+
+    VTABLE PMC *neg(PMC *dest) {
+        dest = Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
+                                       SELF.get_bool());
+        return dest;
+    }
+
+    VTABLE void i_neg() {
+    }
 }
 
 /*

Modified: branches/gc_massacre/src/pmc/callcontext.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/callcontext.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/callcontext.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -64,7 +64,7 @@
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static PMC * autobox_pmc(PARROT_INTERP, ARGIN(Pcc_cell *cell))
+static PMC * autobox_pmc(PARROT_INTERP, ARGIN(Pcc_cell *cell), INTVAL type)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -152,6 +152,15 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/*
+
+=item C<static void ensure_positionals_storage(PARROT_INTERP, PMC *self, INTVAL
+size)>
+
+=cut
+
+*/
+
 static void
 ensure_positionals_storage(PARROT_INTERP, ARGIN(PMC *self), INTVAL size)
 {
@@ -166,6 +175,15 @@
     ensure_positionals_storage_ap(interp, self, size, allocated_positionals);
 }
 
+/*
+
+=item C<static void ensure_positionals_storage_ap(PARROT_INTERP, PMC *self,
+INTVAL size, INTVAL allocated_positionals)>
+
+=cut
+
+*/
+
 static void
 ensure_positionals_storage_ap(PARROT_INTERP,
                               ARGIN(PMC *self), INTVAL size, INTVAL allocated_positionals)
@@ -190,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,
@@ -201,6 +219,14 @@
     SETATTR_CallContext_positionals(interp, self, new_array);
 }
 
+/*
+
+=item C<static Pcc_cell* get_cell_at(PARROT_INTERP, PMC *self, INTVAL key)>
+
+=cut
+
+*/
+
 PARROT_CANNOT_RETURN_NULL
 static Pcc_cell*
 get_cell_at(PARROT_INTERP, ARGIN(PMC *self), INTVAL key)
@@ -212,6 +238,14 @@
     return &cells[key];
 }
 
+/*
+
+=item C<static INTVAL autobox_intval(PARROT_INTERP, const Pcc_cell *cell)>
+
+=cut
+
+*/
+
 static INTVAL
 autobox_intval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
 {
@@ -235,6 +269,14 @@
     return 0;
 }
 
+/*
+
+=item C<static FLOATVAL autobox_floatval(PARROT_INTERP, const Pcc_cell *cell)>
+
+=cut
+
+*/
+
 static FLOATVAL
 autobox_floatval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
 {
@@ -258,6 +300,14 @@
     return 0.0;
 }
 
+/*
+
+=item C<static STRING * autobox_string(PARROT_INTERP, const Pcc_cell *cell)>
+
+=cut
+
+*/
+
 PARROT_CANNOT_RETURN_NULL
 static STRING *
 autobox_string(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
@@ -282,14 +332,22 @@
     return NULL;
 }
 
+/*
+
+=item C<static PMC * autobox_pmc(PARROT_INTERP, Pcc_cell *cell, INTVAL type)>
+
+=cut
+
+*/
+
 PARROT_CANNOT_RETURN_NULL
 static PMC *
-autobox_pmc(PARROT_INTERP, ARGIN(Pcc_cell *cell))
+autobox_pmc(PARROT_INTERP, ARGIN(Pcc_cell *cell), INTVAL type)
 {
     ASSERT_ARGS(autobox_pmc)
     PMC *result = PMCNULL;
 
-    switch (CELL_TYPE_MASK(cell)) {
+    switch (type) {
       case INTCELL:
         result = Parrot_pmc_new(interp, HLL_TYPE(enum_class_Integer));
         VTABLE_set_integer_native(interp, result, CELL_INT(cell));
@@ -312,6 +370,14 @@
     return result;
 }
 
+/*
+
+=item C<static Hash * get_hash(PARROT_INTERP, PMC *SELF)>
+
+=cut
+
+*/
+
 PARROT_CANNOT_RETURN_NULL
 static Hash *
 get_hash(PARROT_INTERP, ARGIN(PMC *SELF))
@@ -325,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);
@@ -334,6 +400,14 @@
     return hash;
 }
 
+/*
+
+=item C<static void mark_cell(PARROT_INTERP, Pcc_cell *c)>
+
+=cut
+
+*/
+
 static void
 mark_cell(PARROT_INTERP, ARGIN(Pcc_cell *c))
 {
@@ -355,6 +429,14 @@
 
 }
 
+/*
+
+=item C<static void mark_positionals(PARROT_INTERP, PMC *self)>
+
+=cut
+
+*/
+
 static void
 mark_positionals(PARROT_INTERP, ARGIN(PMC *self))
 {
@@ -373,23 +455,31 @@
     }
 }
 
+/*
+
+=item C<static void mark_hash(PARROT_INTERP, Hash *h)>
+
+=cut
+
+*/
+
 /* don't look now, but here goes encapsulation.... */
 static void
 mark_hash(PARROT_INTERP, ARGIN(Hash *h))
 {
     ASSERT_ARGS(mark_hash)
-    INTVAL  i;
+    parrot_hash_iterate(h,
+        Parrot_gc_mark_STRING_alive(interp, (STRING *)_bucket->key);
+        mark_cell(interp, (Pcc_cell *)_bucket->value););
+}
 
-    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;
-        }
-    }
-}
+=item C<static PMC * get_named_names(PARROT_INTERP, PMC *SELF)>
+
+=cut
+
+*/
 
 PARROT_CAN_RETURN_NULL
 static PMC *
@@ -397,27 +487,19 @@
 {
     ASSERT_ARGS(get_named_names)
     Hash *hash;
-    PMC  *result = PMCNULL;
 
     GETATTR_CallContext_hash(interp, SELF, hash);
 
     /* yes, this *looks* risky, but it's a Parrot STRING hash internally */
     if (hash && hash->entries) {
-        UINTVAL i, j = 0;
-        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;
-            }
-        }
+        UINTVAL j = 0;
+        PMC *result = Parrot_pmc_new_init_int(interp, enum_class_FixedStringArray, hash->entries);
+        parrot_hash_iterate(hash,
+            VTABLE_set_string_keyed_int(interp, result, j++, (STRING *)_bucket->key););
+        return result;
     }
 
-    return result;
+    return PMCNULL;
 }
 
 #include "parrot/packfile.h"
@@ -603,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);
         }
@@ -641,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);
         }
 
@@ -925,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,
@@ -1035,7 +1099,7 @@
         Pcc_cell *cells;
         PMC      *retval;
         const INTVAL size = STATICSELF.elements();
-        INTVAL    i;
+        INTVAL    i, type;
 
         if (size < 1)
             Parrot_ex_throw_from_c_args(INTERP, NULL,
@@ -1043,7 +1107,8 @@
                 "Cannot shift PMC from empty CallContext");
 
         GET_ATTR_positionals(INTERP, SELF, cells);
-        retval = autobox_pmc(INTERP, &cells[0]);
+        type   = CELL_TYPE_MASK(&cells[0]);
+        retval = autobox_pmc(INTERP, &cells[0], type);
 
         for (i = 1; i < size; ++i)
             cells[i - 1] = cells[i];
@@ -1111,14 +1176,17 @@
 
     VTABLE PMC * get_pmc_keyed_int(INTVAL key) {
         Pcc_cell *cells;
-        INTVAL    num_pos;
+        INTVAL    num_pos, type;
 
         GET_ATTR_num_positionals(INTERP, SELF, num_pos);
         if (key >= num_pos || key < 0)
             return PMCNULL;
 
         GET_ATTR_positionals(INTERP, SELF, cells);
-        return autobox_pmc(INTERP, &cells[key]);
+        type = CELL_TYPE_MASK(&cells[key]);
+        if (type == PMCCELL)
+            return CELL_PMC(&cells[key]);
+        return autobox_pmc(INTERP, &cells[key], type);
     }
 
     VTABLE void set_integer_keyed_int(INTVAL key, INTVAL value) {
@@ -1327,8 +1395,12 @@
             void     * const k    = hash_key_from_string(INTERP, hash, key);
             Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
-            if (cell)
-                return autobox_pmc(INTERP, cell);
+            if (cell) {
+                INTVAL type = CELL_TYPE_MASK(cell);
+                if (type == PMCCELL)
+                    return CELL_PMC(cell);
+                return autobox_pmc(INTERP, cell, type);
+            }
         }
 
         return PMCNULL;
@@ -1383,8 +1455,12 @@
             void     * const k    = hash_key_from_pmc(INTERP, hash, key);
             Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
-            if (cell)
-                return autobox_pmc(INTERP, cell);
+            if (cell) {
+                INTVAL type = CELL_TYPE_MASK(cell);
+                if (type == PMCCELL)
+                    return CELL_PMC(cell);
+                return autobox_pmc(INTERP, cell, type);
+            }
         }
 
         return PMCNULL;

Modified: branches/gc_massacre/src/pmc/capture.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/capture.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/capture.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -26,6 +26,7 @@
     do { \
         GETATTR_Capture_array((i), (obj), (arr)); \
         if (!(arr)) { \
+            PObj_custom_mark_SET(obj); \
             (arr) = Parrot_pmc_new((i), enum_class_ResizablePMCArray); \
             SETATTR_Capture_array((i), (obj), (arr)); \
         } \
@@ -34,6 +35,7 @@
     do { \
         GETATTR_Capture_hash((i), (obj), (hsh)); \
         if (!(hsh)) { \
+            PObj_custom_mark_SET(obj); \
             (hsh) = Parrot_pmc_new((i), enum_class_Hash); \
             SETATTR_Capture_hash((i), (obj), (hsh)); \
         } \
@@ -45,20 +47,6 @@
 
 /*
 
-=item C<void init()>
-
-Initializes the Capture instance.
-
-=cut
-
-*/
-
-    VTABLE void init() {
-        PObj_custom_mark_SET(SELF);
-    }
-
-/*
-
 =item C<PMC *clone()>
 
 Creates an identical copy of the Capture.
@@ -72,12 +60,16 @@
         PMC *dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
         GET_ATTR_array(INTERP, SELF, array);
         GET_ATTR_hash(INTERP, SELF, hash);
-        if (array)
-             array = VTABLE_clone(INTERP, array);
-        if (hash)
-             hash = VTABLE_clone(INTERP, hash);
-        SET_ATTR_array(INTERP, dest, array);
-        SET_ATTR_hash(INTERP, dest, hash);
+        if (!PMC_IS_NULL(array)) {
+            PObj_custom_mark_SET(dest);
+            array = VTABLE_clone(INTERP, array);
+            SET_ATTR_array(INTERP, dest, array);
+        }
+        if (!PMC_IS_NULL(hash)) {
+            PObj_custom_mark_SET(dest);
+            hash = VTABLE_clone(INTERP, hash);
+            SET_ATTR_hash(INTERP, dest, hash);
+        }
 
         return dest;
     }
@@ -739,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/gc_massacre/src/pmc/class.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/class.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/class.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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,17 +179,17 @@
 #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 */
 
-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
+
+*/
 
 static size_t
 key_hash_pointer(SHIM_INTERP, ARGIN(const void *value), size_t seed)
@@ -202,6 +198,15 @@
     return ((size_t) value ^ seed);
 }
 
+/*
+
+=item C<static int cache_class_attribs(PARROT_INTERP, PMC *cur_class, PMC
+*attrib_index, PMC *cache, int cur_index)>
+
+=cut
+
+*/
+
 static int
 cache_class_attribs(PARROT_INTERP,
         ARGIN(PMC *cur_class), ARGIN(PMC *attrib_index),
@@ -241,8 +246,17 @@
     return cur_index;
 }
 
-/* This function builds the attribute index (table to map class name and
- * attribute name to an index) for the current class. */
+/*
+
+=item C<static void build_attrib_index(PARROT_INTERP, PMC *self)>
+
+This function builds the attribute index (table to map class name and
+attribute name to an index) for the current class.
+
+=cut
+
+*/
+
 static void
 build_attrib_index(PARROT_INTERP, ARGIN(PMC *self))
 {
@@ -272,7 +286,16 @@
     _class->attrib_cache = cache;
 }
 
-/* Takes a hash and initializes the class based on it. */
+/*
+
+=item C<static void init_class_from_hash(PARROT_INTERP, PMC *self, PMC *info)>
+
+Takes a hash and initializes the class based on it.
+
+=cut
+
+*/
+
 static void
 init_class_from_hash(PARROT_INTERP, ARGMOD(PMC *self), ARGIN_NULLOK(PMC *info))
 {
@@ -434,6 +457,15 @@
     Parrot_oo_extract_methods_from_namespace(interp, self, _class->_namespace);
 }
 
+/*
+
+=item C<static void initialize_parents(PARROT_INTERP, PMC *object, PMC
+*all_parents)>
+
+=cut
+
+*/
+
 static void
 initialize_parents(PARROT_INTERP, ARGIN(PMC *object), ARGIN(PMC *all_parents))
 {
@@ -463,6 +495,15 @@
     }
 }
 
+/*
+
+=item C<static void initialize_parents_pmc(PARROT_INTERP, PMC *object, PMC
+*all_parents, PMC *init)>
+
+=cut
+
+*/
+
 static void
 initialize_parents_pmc(PARROT_INTERP, ARGIN(PMC *object),
         ARGIN(PMC *all_parents), ARGIN(PMC *init))
@@ -491,10 +532,19 @@
     }
 }
 
-/* This function makes and caches the name of this class, returning the string
- * directly.  VTABLE_isa() uses the name without copying it, for efficiency
- * reasons, as it does not modify the STRING.  VTABLE_get_string() makes a copy
- * of the STRING, so its callers are free to modify it. */
+/*
+
+=item C<static STRING * make_class_name(PARROT_INTERP, PMC *SELF)>
+
+This function makes and caches the name of this class, returning the string
+directly.  C<VTABLE_isa()> uses the name without copying it, for efficiency
+reasons, as it does not modify the STRING.  C<VTABLE_get_string()> makes a
+copy of the STRING, so its callers are free to modify it.
+
+=cut
+
+*/
+
 PARROT_CANNOT_RETURN_NULL
 static STRING *
 make_class_name(PARROT_INTERP, ARGIN(PMC *SELF))
@@ -525,11 +575,19 @@
     return _class->name;
 }
 
-/* calculates the C3 method resolution order for this class. C3 is the
- * name of an algorithm used to calculate the method resolution order
- * (MRO) to use in a system with multiple inheritance. For more information
- * see the documentation associated with C<Parrot_ComputeMRO_C3>.
- */
+/*
+
+=item C<static void calculate_mro(PARROT_INTERP, PMC *SELF, INTVAL num_parents)>
+
+Calculates the C3 method resolution order for this class. C3 is the name of an
+algorithm used to calculate the method resolution order (MRO) to use in a
+system with multiple inheritance. For more information see the documentation
+associated with C<Parrot_ComputeMRO_C3>.
+
+=cut
+
+*/
+
 static void
 calculate_mro(PARROT_INTERP, ARGIN(PMC *SELF), INTVAL num_parents)
 {
@@ -610,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, "");
@@ -629,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);
@@ -1372,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/gc_massacre/src/pmc/complex.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/complex.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/complex.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -13,14 +13,12 @@
 
 =head2 Functions
 
+Equations used are sometimes listed.  At times, multiple equations are given,
+but those starting with => are the ones used
+
 =over 4
 
 =cut
-    ASSERT_ARGS()
-
-
-Equations used are sometimes listed.  At times, multiple equations are given,
-but those starting with => are the ones used
 
 */
 
@@ -77,6 +75,12 @@
 
 =cut
 
+We have a conflict among our coding standards here.  Our 100-character line
+limit meant that the following function declaration had to be split over two
+lines.  However, that leads to t/codingstd/pmc_docs.t reporting that this
+function lacks documentation -- reporting due to differences in whitespacing
+between '=item' and function declaration.
+
 */
 
 static void
@@ -238,6 +242,14 @@
     Parrot_str_free_cstring(str);
 }
 
+/*
+
+=item C<static void int_check_divide_zero(PARROT_INTERP, INTVAL value)>
+
+=cut
+
+*/
+
 static void
 int_check_divide_zero(PARROT_INTERP, INTVAL value)
 {
@@ -248,6 +260,14 @@
             "Divide by zero");
 }
 
+/*
+
+=item C<static void float_check_divide_zero(PARROT_INTERP, FLOATVAL value)>
+
+=cut
+
+*/
+
 static void
 float_check_divide_zero(PARROT_INTERP, FLOATVAL value)
 {
@@ -258,6 +278,14 @@
             "Divide by zero");
 }
 
+/*
+
+=item C<static void complex_check_divide_zero(PARROT_INTERP, PMC *value)>
+
+=cut
+
+*/
+
 static void
 complex_check_divide_zero(PARROT_INTERP, ARGIN(PMC *value))
 {

Modified: branches/gc_massacre/src/pmc/coroutine.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/coroutine.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/coroutine.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -46,6 +46,13 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/*
+
+=item C<static void print_sub_name(PARROT_INTERP, PMC *sub_pmc)>
+
+=cut
+
+*/
 
 static void
 print_sub_name(PARROT_INTERP, ARGIN(PMC *sub_pmc))

Modified: branches/gc_massacre/src/pmc/default.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/default.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/default.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -360,6 +360,23 @@
 
 /*
 
+=item C<void init_int(INTVAL initvalue)>
+
+Calls C<init()> and C<set_integer_native(initvalue)>.
+Default implementation to allow more usages of init_int without having to
+implement it everywhere.
+
+=cut
+
+*/
+
+    VTABLE void init_int(INTVAL initvalue) {
+        SELF.init();
+        SELF.set_integer_native(initvalue);
+    }
+
+/*
+
 =item C<void destroy()>
 
 Does nothing.
@@ -516,6 +533,22 @@
 
 /*
 
+=item C<void PMC *add_attribute(STRING *name, PMC *type)>
+
+Throws an exception, as you can only add an attribute to something Class-y or
+Role-y.
+
+=cut
+
+*/
+
+    VTABLE void add_attribute(STRING *name, PMC *type) {
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+            "Cannot add attribute to non-class");
+    }
+
+/*
+
 =item C<PMC *get_namespace>
 
 Return the namespace for this PMC.

Modified: branches/gc_massacre/src/pmc/env.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/env.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/env.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -10,9 +10,6 @@
 
 C<Env> is a singleton class which provides access to the system environment.
 
-XXX Think about returning Pair back. Currently there is no way to iterate over
-environment I<keys>.
-
 =head2 Methods
 
 =over 4

Modified: branches/gc_massacre/src/pmc/eval.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/eval.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/eval.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -52,6 +52,15 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/*
+
+=item C<static void clear_fixups(PARROT_INTERP, const Parrot_Sub_attributes
+*sub_data)>
+
+=cut
+
+*/
+
 static void
 clear_fixups(PARROT_INTERP, ARGIN(const Parrot_Sub_attributes *sub_data))
 {
@@ -80,6 +89,14 @@
     }
 }
 
+/*
+
+=item C<static PMC* get_sub(PARROT_INTERP, PMC *self, int idx)>
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static PMC*
@@ -116,6 +133,14 @@
     return PMCNULL;
 }
 
+/*
+
+=item C<static void mark_subs(PARROT_INTERP, PMC *self)>
+
+=cut
+
+*/
+
 static void
 mark_subs(PARROT_INTERP, ARGIN(PMC *self))
 {

Modified: branches/gc_massacre/src/pmc/exception.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/exception.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/exception.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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);
     }
 
 /*
@@ -588,6 +590,7 @@
             GET_ATTR_exit_code(INTERP, SELF, exit_code);
             value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, exit_code);
             }
+            break;
           case attr_handled:
             {
             INTVAL handled;
@@ -784,6 +787,7 @@
 */
 
     METHOD backtrace() {
+        STRING * const meth_backtrace = CONST_STRING(INTERP, "backtrace");
         PMC *result = PMCNULL;
         PMC *resume;
 
@@ -792,7 +796,8 @@
         if (!PMC_IS_NULL(resume)) {
             /* We have a resume continuation, so we can get the address from that. */
             const Parrot_Continuation_attributes * const cont = PARROT_CONTINUATION(resume);
-            Parrot_pcc_invoke_method_from_c_args(INTERP, cont->to_ctx, CONST_STRING(INTERP, "backtrace"), "P->P", resume, &result);
+            Parrot_pcc_invoke_method_from_c_args(INTERP, cont->to_ctx, meth_backtrace,
+                    "P->P", resume, &result);
         }
         else {
             /* Hopefully we have a thrower set - our most epic fail fallback is
@@ -801,7 +806,8 @@
             GET_ATTR_thrower(INTERP, SELF, cur_ctx);
             if (PMC_IS_NULL(cur_ctx))
                 cur_ctx = CURRENT_CONTEXT(INTERP);
-            Parrot_pcc_invoke_method_from_c_args(INTERP, cur_ctx, CONST_STRING(INTERP, "backtrace"), "->P", &result);
+            Parrot_pcc_invoke_method_from_c_args(INTERP, cur_ctx, meth_backtrace,
+                    "->P", &result);
         }
 
         RETURN(PMC *result);

Modified: branches/gc_massacre/src/pmc/fixedintegerarray.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/fixedintegerarray.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/fixedintegerarray.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -11,10 +11,6 @@
 This class, FixedIntegerArray, implements an array of fixed size which stores
 INTVALs.  It uses Integer PMCs for all of the conversions.
 
-=head2 Functions
-
-=over 4
-
 =cut
 
 */
@@ -34,13 +30,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-PARROT_PURE_FUNCTION
-static int
-auxcmpfunc(ARGIN(const INTVAL *i), ARGIN(const INTVAL *j))
-{
-    ASSERT_ARGS(auxcmpfunc)
-    return *i - *j;
-}
 
 pmclass FixedIntegerArray auto_attrs provides array {
     ATTR INTVAL   size;  /* number of INTVALs stored in this array */
@@ -48,9 +37,7 @@
 
 /*
 
-=back
-
-=head2 Methods
+=head2 Vtable functions
 
 =over 4
 
@@ -511,25 +498,6 @@
         SELF.set_pmc_keyed_int(k, value);
     }
 
-    METHOD sort(PMC *cmp_func :optional) {
-        UINTVAL n;
-        INTVAL  size;
-
-        GET_ATTR_size(INTERP, SELF, size);
-        n = (UINTVAL)size;
-
-        if (n > 1) {
-            INTVAL *int_array;
-            GET_ATTR_int_array(INTERP, SELF, int_array);
-            if (PMC_IS_NULL(cmp_func))
-                qsort(int_array, n, sizeof (INTVAL),
-                        (int (*)(const void *, const void*))auxcmpfunc);
-            else
-                Parrot_quicksort(INTERP, (void**)int_array, n, cmp_func);
-        }
-        RETURN(PMC *SELF);
-    }
-
 /*
 
 =item C<INTVAL is_equal(PMC *value)>
@@ -633,6 +601,66 @@
                 int_array[i] = VTABLE_shift_integer(INTERP, info);
         }
     }
+
+/*
+
+=back
+
+=head2 Methods
+
+=over 4
+
+=item C<PMC *sort()>
+
+Sort the array and return self.
+
+=cut
+
+*/
+
+    METHOD sort(PMC *cmp_func :optional) {
+        UINTVAL n;
+        INTVAL  size;
+
+        GET_ATTR_size(INTERP, SELF, size);
+        n = (UINTVAL)size;
+
+        if (n > 1) {
+            INTVAL *int_array;
+            GET_ATTR_int_array(INTERP, SELF, int_array);
+            if (PMC_IS_NULL(cmp_func))
+                qsort(int_array, n, sizeof (INTVAL),
+                        (int (*)(const void *, const void*))auxcmpfunc);
+            else
+                Parrot_quicksort(INTERP, (void**)int_array, n, cmp_func);
+        }
+        RETURN(PMC *SELF);
+    }
+
+}
+
+/*
+
+=back
+
+=head2 Auxiliary functions
+
+=over 4
+
+=item C<static int auxcmpfunc(const INTVAL *i, const INTVAL *j)>
+
+INTVAL compare function for qsort usage.
+
+=cut
+
+*/
+
+PARROT_PURE_FUNCTION
+static int
+auxcmpfunc(ARGIN(const INTVAL *i), ARGIN(const INTVAL *j))
+{
+    ASSERT_ARGS(auxcmpfunc)
+    return *i - *j;
 }
 
 /*

Modified: branches/gc_massacre/src/pmc/fixedpmcarray.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/fixedpmcarray.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/fixedpmcarray.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -68,20 +68,6 @@
 
 =over 4
 
-=item C<void init()>
-
-Initializes the array.
-
-=cut
-
-*/
-
-    VTABLE void init() {
-        PObj_custom_mark_destroy_SETALL(SELF);
-    }
-
-/*
-
 =item C<void init_int(INTVAL size)>
 
 Initializes the array.
@@ -96,8 +82,6 @@
                     _("FixedPMCArray: Cannot set array size to a negative number (%d)"), size);
 
         SELF.set_integer_native(size);
-
-        PObj_custom_mark_destroy_SETALL(SELF);
     }
 
 /*
@@ -406,6 +390,7 @@
         for (i = 0; i < size; ++i)
             data[i] = PMCNULL;
 
+        PObj_custom_mark_destroy_SETALL(SELF);
         PMC_array(SELF) = data;
     }
 

Modified: branches/gc_massacre/src/pmc/fixedstringarray.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/fixedstringarray.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/fixedstringarray.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -35,20 +35,6 @@
 
 =over 4
 
-=item C<void init()>
-
-Initializes the array.
-
-=cut
-
-*/
-
-    VTABLE void init() {
-        PObj_custom_mark_destroy_SETALL(SELF);
-    }
-
-/*
-
 =item C<void init_int(INTVAL size)>
 
 Initializes the array.
@@ -61,9 +47,12 @@
         if (size < 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 _("FixedStringArray: Cannot set array size to a negative number (%d)"), size);
-        SET_ATTR_size(INTERP, SELF, size);
-        SET_ATTR_str_array(INTERP, SELF, mem_gc_allocate_n_zeroed_typed(INTERP, size, STRING *));
-        PObj_custom_mark_destroy_SETALL(SELF);
+        if (size) {
+            SET_ATTR_size(INTERP, SELF, size);
+            SET_ATTR_str_array(INTERP,
+                               SELF, mem_gc_allocate_n_zeroed_typed(INTERP, size, STRING *));
+            PObj_custom_mark_destroy_SETALL(SELF);
+        }
     }
 
 

Modified: branches/gc_massacre/src/pmc/float.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/float.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/float.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/pmc/hash.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/hash.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/hash.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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;
 
@@ -78,7 +132,6 @@
             (Parrot_Hash_attributes *) PMC_data(SELF);
 
         attr->hash            = parrot_new_hash(INTERP);
-        attr->hash->container = SELF;
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
@@ -89,9 +142,8 @@
         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);
-        attr->hash->container = SELF;
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
@@ -100,6 +152,7 @@
         if (hash)
             parrot_hash_destroy(INTERP, hash);
     }
+
 /*
 
 =item C<void mark()>
@@ -112,7 +165,7 @@
 
     VTABLE void mark() {
         Hash * const hash = (Hash *)SELF.get_pointer();
-        if (hash != NULL)
+        if (hash && hash->entries)
             parrot_mark_hash(INTERP, hash);
     }
 
@@ -150,7 +203,6 @@
         Hash * const new_hash = (Hash *)ptr;
 
         PARROT_HASH(SELF)->hash = new_hash;
-        new_hash->container     = SELF;
 
         if (old_hash)
             parrot_hash_destroy(INTERP, old_hash);
@@ -182,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
@@ -206,7 +258,6 @@
 
 
         PARROT_HASH(SELF)->hash = new_hash;
-        new_hash->container     = SELF;
 
         if (old_hash)
             parrot_hash_destroy(INTERP, old_hash);
@@ -247,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;
 
@@ -260,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:
@@ -269,7 +320,6 @@
         }
 
         PARROT_HASH(SELF)->hash = new_hash;
-        new_hash->container     = SELF;
 
         if (old_hash)
             parrot_hash_destroy(INTERP, old_hash);
@@ -421,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);
+
+        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.");
 
-        /* Recusively call to enclosed aggregate */
-        return VTABLE_get_integer_keyed(INTERP, valpmc, nextkey);
+        /* Recursively call to enclosed aggregate */
+        return VTABLE_get_integer_keyed(INTERP, (PMC *)b->value, key);
     }
 
 /*
@@ -450,29 +501,25 @@
 */
 
     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))
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Used non-constant PMC key in constant hash.");
+
+        key = key_next(INTERP, key);
 
-        if (!nextkey) {
-            parrot_hash_put(INTERP, hash, keystr,
+        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) {
@@ -491,6 +538,13 @@
 
     VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
         Hash * const hash = (Hash *)SELF.get_pointer();
+
+        if (PObj_constant_TEST(SELF)
+        && !PObj_constant_TEST((PObj *)key))
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Used non-constant key in constant hash.");
+
         parrot_hash_put(INTERP, hash, hash_key_from_string(INTERP, hash, key),
                 hash_value_from_int(INTERP, hash, value));
     }
@@ -539,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 (!key)
+            return hash_value_to_number(INTERP, hash, b->value);
 
-        if (!nextkey)
-            return VTABLE_get_number(INTERP, valpmc);
+        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, valpmc, nextkey);
+        return VTABLE_get_number_keyed(INTERP, (PMC *)b->value, key);
     }
 
 
@@ -601,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);
+
+        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.");
 
-        /* Recusively call to enclosed aggregate */
-        return VTABLE_get_string_keyed(INTERP, valpmc, nextkey);
+        /* Recursively call to enclosed aggregate */
+        return VTABLE_get_string_keyed(INTERP, (PMC *)b->value, key);
     }
 
 /*
@@ -630,29 +686,30 @@
 */
 
     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 (!nextkey) {
-            parrot_hash_put(INTERP, hash, keystr,
-                    hash_value_from_string(INTERP, hash, value));
-            return;
+        if (PObj_constant_TEST(SELF)){
+            if (!PObj_constant_TEST((PObj *)key))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant PMC key in constant hash.");
+            if (!PObj_constant_TEST((PObj *)value))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant STRING value in constant hash.");
         }
 
-        b = parrot_hash_get_bucket(INTERP, hash, keystr);
-        if (b)
-            box = hash_value_to_pmc(INTERP, hash, b->value);
+        key = key_next(INTERP, key);
+
+        if (!key) {
+            parrot_hash_put(INTERP, hash, hash_key,
+                    hash_value_from_string(INTERP, hash, 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);
     }
 
 /*
@@ -665,13 +722,31 @@
 
     VTABLE void set_string_keyed_str(STRING *key, STRING *value) {
         Hash * const hash = (Hash *)SELF.get_pointer();
-        parrot_hash_put(INTERP, hash,
-                hash_key_from_string(INTERP, hash, key),
+
+        if (PObj_constant_TEST(SELF)){
+            if (!PObj_constant_TEST((PObj *)key))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant STRING key in constant hash.");
+            if (!PObj_constant_TEST((PObj *)value))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant STRING value in constant hash.");
+        }
+
+        parrot_hash_put(INTERP, hash, hash_key_from_string(INTERP, hash, key),
                 hash_value_from_string(INTERP, hash, value));
     }
 
     VTABLE void set_string_keyed_int(INTVAL key, STRING *value) {
         Hash * const hash = (Hash *)SELF.get_pointer();
+
+        if ((PObj_constant_TEST(SELF))
+        && (!PObj_constant_TEST((PObj *)value)))
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Used non-constant STRING value in constant hash.");
+
         parrot_hash_put(INTERP, hash,
                 hash_key_from_int(INTERP, hash, key),
                 hash_value_from_string(INTERP, hash, value));
@@ -693,16 +768,15 @@
 
     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 key type, for speed */
-        if (hash->key_type == Hash_key_type_STRING)
-            b = parrot_hash_get_bucket(INTERP, hash, key);
-        else
-            b = parrot_hash_get_bucket(INTERP, hash,
-                hash_key_from_string(INTERP, hash, key));
+        /* special case the most likely key type, for speed */
+        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);
 
         if (!b)
             return PMCNULL;
@@ -727,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);
     }
 
 /*
@@ -756,28 +831,25 @@
 */
 
     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))
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                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);
+        }
     }
 
 /*
@@ -791,9 +863,16 @@
 */
 
     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))
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                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));
     }
 
 /*
@@ -805,29 +884,30 @@
 */
 
     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 (!nextkey) {
-            parrot_hash_put(INTERP, hash, keystr, value);
-            return;
+        if (PObj_constant_TEST(SELF)) {
+            if (!PObj_constant_TEST((PObj *)key))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant PMC key in constant hash.");
+
+            if (!PObj_constant_TEST((PObj *)value))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant PMC value in constant hash.");
         }
 
-        b = parrot_hash_get_bucket(INTERP, hash, keystr);
-        if (b)
-            box = hash_value_to_pmc(INTERP, hash, b->value);
+        key = key_next(INTERP, key);
+
+        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);
     }
 
 /*
@@ -842,6 +922,19 @@
 
     VTABLE void set_pmc_keyed_str(STRING *key, PMC *value) {
         Hash * const hash = (Hash *)SELF.get_pointer();
+
+        if (PObj_constant_TEST(SELF)) {
+            if (!PObj_constant_TEST((PObj *)key))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant STRING key in constant hash.");
+
+            if (!PObj_constant_TEST((PObj *)value))
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Used non-constant STRING value in constant hash.");
+        }
+
         parrot_hash_put(INTERP, hash, hash_key_from_string(INTERP, hash, key),
                 hash_value_from_pmc(INTERP, hash, value));
     }
@@ -886,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);
     }
 
 /*
@@ -932,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);
     }
 
 /*
@@ -971,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);
     }
 
 /*
@@ -1080,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.
@@ -1104,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);
     }
 
 /*
@@ -1124,48 +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->container = SELF;
-            hash->entries   = elems;
-        }
+        SELF.set_pointer((void *)Parrot_hash_thaw(INTERP, info));
     }
 }
 

Modified: branches/gc_massacre/src/pmc/hashiterator.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/hashiterator.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/hashiterator.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -66,32 +66,21 @@
 
 /*
 
+=item C<static void advance_to_next(PARROT_INTERP, PMC *self)>
+
 Advance to next position. Return found (if any) HashBucket.
 
+=cut
+
 */
 
 static void
 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;
 }
 
@@ -191,6 +180,7 @@
 Returns this Iterator's Hash.
 
 =cut
+
 */
     VTABLE PMC* get_pmc() {
         return PARROT_HASHITERATOR(SELF)->pmc_hash;

Modified: branches/gc_massacre/src/pmc/imageio.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/imageio.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/imageio.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -10,6 +10,10 @@
 
 Freezes and thaws other PMCs.
 
+=head1 FUNCTIONS
+
+=over 4
+
 =cut
 
 */
@@ -78,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))
@@ -110,15 +100,17 @@
 #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 */
 
+/*
+
+=item C<static opcode_t * GET_VISIT_CURSOR(const PMC *pmc)>
+
+=cut
+
+*/
+
 PARROT_INLINE
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
@@ -132,6 +124,14 @@
     return (opcode_t *)(buf + pos);
 }
 
+/*
+
+=item C<static void SET_VISIT_CURSOR(PMC *pmc, const char *cursor)>
+
+=cut
+
+*/
+
 
 PARROT_INLINE
 static void
@@ -139,10 +139,18 @@
 {
     ASSERT_ARGS(SET_VISIT_CURSOR)
 
-    const char *bufstart = (char *)Buffer_bufstart(PARROT_IMAGEIO(pmc)->buffer);
+    const char * const bufstart  = (const char *)Buffer_bufstart(PARROT_IMAGEIO(pmc)->buffer);
     PARROT_IMAGEIO(pmc)->pos = (cursor - bufstart);
 }
 
+/*
+
+=item C<static void INC_VISIT_CURSOR(PMC *pmc, UINTVAL inc)>
+
+=cut
+
+*/
+
 
 PARROT_INLINE
 static void
@@ -157,6 +165,14 @@
 #define BYTECODE_SHIFT_OK(pmc) PARROT_ASSERT( \
     PARROT_IMAGEIO(pmc)->pos <= PARROT_IMAGEIO(pmc)->input_length)
 
+/*
+
+=item C<static void create_buffer(PARROT_INTERP, PMC *pmc, PMC *info)>
+
+=cut
+
+*/
+
 static void
 create_buffer(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc), ARGMOD(PMC *info))
 {
@@ -183,16 +199,18 @@
         PARROT_IMAGEIO(info)->buffer, len);
     memset(Buffer_bufstart(PARROT_IMAGEIO(info)->buffer), 0, len);
     SET_VISIT_CURSOR(info,
-        (char *)Buffer_bufstart(PARROT_IMAGEIO(info)->buffer));
+        (const char *)Buffer_bufstart(PARROT_IMAGEIO(info)->buffer));
 }
 
-
 /*
-static void ensure_buffer_size(PARROT_INTERP, PMC *io, size_t len)
 
-Checks the size of the buffer to see if it can accommodate 'len' more
+=item C<static void ensure_buffer_size(PARROT_INTERP, PMC *io, size_t len)>
+
+Checks the size of the buffer to see if it can accommodate C<len> more
 bytes. If not, expands the buffer.
 
+=cut
+
 */
 
 PARROT_INLINE
@@ -201,7 +219,7 @@
 {
     ASSERT_ARGS(ensure_buffer_size)
 
-    Buffer *buf         = PARROT_IMAGEIO(io)->buffer;
+    Buffer * const buf  = PARROT_IMAGEIO(io)->buffer;
     const size_t used   = PARROT_IMAGEIO(io)->pos;
     const int need_free = Buffer_buflen(buf) - used - len;
 
@@ -222,6 +240,13 @@
 #endif
 }
 
+/*
+
+=item C<static INTVAL INFO_HAS_DATA(const PMC *io)>
+
+=cut
+
+*/
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_INLINE
@@ -233,6 +258,13 @@
     return PARROT_IMAGEIO(io)->pos < PARROT_IMAGEIO(io)->input_length;
 }
 
+/*
+
+=item C<static PMC* id_list_get(PARROT_INTERP, const PMC *io, UINTVAL id)>
+
+=cut
+
+*/
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
@@ -245,111 +277,6 @@
     return VTABLE_get_pmc_keyed_int(interp, PARROT_IMAGEIO(io)->todo, id - 1);
 }
 
-
-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;
-}
-
-
-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 */
@@ -363,6 +290,8 @@
 
 /*
 
+=back
+
 =head1 VTABLES
 
 =over 4
@@ -382,36 +311,12 @@
 */
     VTABLE void init() {
         PARROT_IMAGEIO(SELF)->seen = PMCNULL;
-        PARROT_IMAGEIO(SELF)->pf   = PackFile_new(INTERP, 0);
         PARROT_IMAGEIO(SELF)->todo =
             Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
 
         PObj_flag_CLEAR(private1, SELF);
 
-        PObj_custom_mark_destroy_SETALL(SELF);
-    }
-
-
-/*
-
-=item C<void init_pmc(PMC *pmc)>
-
-Initializes the PMC with a pre-existing C<PackFile_ConstTable>.
-
-=cut
-
-*/
-    VTABLE void init_pmc(PMC *pmc) {
-        PARROT_IMAGEIO(SELF)->seen   = PMCNULL;
-        PARROT_IMAGEIO(SELF)->pf     = PackFile_new(INTERP, 0);
-        PARROT_IMAGEIO(SELF)->pf_ct  =
-            (PackFile_ConstTable *)VTABLE_get_pointer(INTERP, pmc);
-        PARROT_IMAGEIO(SELF)->todo   =
-            Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
-
-        PObj_flag_SET(private1, SELF);
-
-        PObj_custom_mark_destroy_SETALL(SELF);
+        PObj_custom_mark_SET(SELF);
     }
 
 
@@ -524,7 +429,7 @@
         const size_t len = PF_size_integer() * sizeof (opcode_t);
         ensure_buffer_size(INTERP, SELF, len);
         SET_VISIT_CURSOR(SELF,
-            (char *)PF_store_integer(GET_VISIT_CURSOR(SELF), v));
+            (const char *)PF_store_integer(GET_VISIT_CURSOR(SELF), v));
     }
 
 
@@ -542,7 +447,7 @@
         const size_t len = PF_size_number() * sizeof (opcode_t);
         ensure_buffer_size(INTERP, SELF, len);
         SET_VISIT_CURSOR(SELF,
-            (char *)PF_store_number(GET_VISIT_CURSOR(SELF), &v));
+            (const char *)PF_store_number(GET_VISIT_CURSOR(SELF), &v));
     }
 
 
@@ -559,9 +464,9 @@
     VTABLE void push_string(STRING *v) {
         if (PObj_flag_TEST(private1, SELF)) {
             /* store a reference to constant table entry of string */
-            PMC                 *v_pmc = key_new_string(interp, v);
-            PackFile_ConstTable *table = PARROT_IMAGEIO(SELF)->pf_ct;
-            int                  idx   =
+            PMC                 * const v_pmc = key_new_string(interp, v);
+            PackFile_ConstTable * const table = PARROT_IMAGEIO(SELF)->pf_ct;
+            const int idx =
                 PackFile_ConstTable_rlookup(INTERP, table, v_pmc, PFC_STRING);
 
             if (idx >= 0) {
@@ -583,7 +488,7 @@
             const size_t len = PF_size_string(v) * sizeof (opcode_t);
             ensure_buffer_size(INTERP, SELF, len);
             SET_VISIT_CURSOR(SELF,
-                (char *)PF_store_string(GET_VISIT_CURSOR(SELF), v));
+                (const char *)PF_store_string(GET_VISIT_CURSOR(SELF), v));
         }
     }
 
@@ -600,7 +505,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);
+        }
     }
 
 
@@ -656,7 +605,7 @@
     VTABLE FLOATVAL shift_float() {
         const opcode_t *pos = GET_VISIT_CURSOR(SELF);
         FLOATVAL        f   = PF_fetch_number(PARROT_IMAGEIO(SELF)->pf, &pos);
-        SET_VISIT_CURSOR(SELF, (char *)pos);
+        SET_VISIT_CURSOR(SELF, (const char *)pos);
         BYTECODE_SHIFT_OK(SELF);
         return f;
     }
@@ -693,10 +642,10 @@
         }
 
         {
-            const opcode_t *pos = GET_VISIT_CURSOR(SELF);
-            STRING         *s   = PF_fetch_string(INTERP,
+            const opcode_t * pos     = GET_VISIT_CURSOR(SELF);
+            STRING         * const s = PF_fetch_string(INTERP,
                                     PARROT_IMAGEIO(SELF)->pf, &pos);
-            SET_VISIT_CURSOR(SELF, (char *)pos);
+            SET_VISIT_CURSOR(SELF, (const char *)pos);
             BYTECODE_SHIFT_OK(SELF);
             return s;
         }
@@ -714,21 +663,68 @@
 */
 
     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)
     {
-        const UINTVAL header_length =
-            GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
-
         PARROT_IMAGEIO(SELF)->what  = VISIT_FREEZE_NORMAL;
 
         create_buffer(INTERP, p, SELF);
-        ensure_buffer_size(INTERP, SELF, header_length);
-        mem_sys_memcopy(GET_VISIT_CURSOR(SELF),
-            PARROT_IMAGEIO(SELF)->pf->header, PACKFILE_HEADER_BYTES);
-        INC_VISIT_CURSOR(SELF, header_length);
+        if (PObj_flag_TEST(private1, SELF)) {
+            PARROT_IMAGEIO(SELF)->pf = PARROT_IMAGEIO(SELF)->pf_ct->base.pf;
+        }
+        else {
+            const UINTVAL header_length =
+                GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+
+            PARROT_IMAGEIO(SELF)->pf = PackFile_new(INTERP, 0);
+            PObj_custom_destroy_SET(SELF);
+
+            ensure_buffer_size(INTERP, SELF, header_length);
+            mem_sys_memcopy(GET_VISIT_CURSOR(SELF),
+                PARROT_IMAGEIO(SELF)->pf->header, PACKFILE_HEADER_BYTES);
+            INC_VISIT_CURSOR(SELF, header_length);
+        }
 
         PARROT_IMAGEIO(SELF)->seen = Parrot_pmc_new(INTERP, enum_class_Hash);
         VTABLE_set_pointer(INTERP, PARROT_IMAGEIO(SELF)->seen,
@@ -740,29 +736,37 @@
 
     VTABLE void set_string_native(STRING *image) {
         PMC          *unused;
-        int           unpacked_length;
-        const UINTVAL header_length =
-             GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
-
         PARROT_IMAGEIO(SELF)->what   = VISIT_THAW_NORMAL;
         PARROT_IMAGEIO(SELF)->buffer = (Buffer *)image;
 
         PARROT_ASSERT(image->_bufstart == image->strstart);
 
         SET_VISIT_CURSOR(SELF,
-            (char *)Buffer_bufstart(PARROT_IMAGEIO(SELF)->buffer));
+            (const char *)Buffer_bufstart(PARROT_IMAGEIO(SELF)->buffer));
         PARROT_IMAGEIO(SELF)->input_length = image->strlen;
 
-        PARROT_IMAGEIO(SELF)->pf->options |= PFOPT_PMC_FREEZE_ONLY;
-        unpacked_length = PackFile_unpack(INTERP, PARROT_IMAGEIO(SELF)->pf,
-            GET_VISIT_CURSOR(SELF), PARROT_IMAGEIO(SELF)->input_length);
-
-        if (unpacked_length)
-            INC_VISIT_CURSOR(SELF, header_length);
-        else
-            Parrot_ex_throw_from_c_args(INTERP, NULL,
-                    EXCEPTION_INVALID_STRING_REPRESENTATION,
-                    "PackFile header failed during unpack");
+        if (PObj_flag_TEST(private1, SELF)) {
+            PARROT_IMAGEIO(SELF)->pf = PARROT_IMAGEIO(SELF)->pf_ct->base.pf;
+        }
+        else {
+            const UINTVAL header_length =
+                 GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+            int unpacked_length;
+
+            PARROT_IMAGEIO(SELF)->pf   = PackFile_new(INTERP, 0);
+            PObj_custom_destroy_SET(SELF);
+
+            PARROT_IMAGEIO(SELF)->pf->options |= PFOPT_PMC_FREEZE_ONLY;
+            unpacked_length = PackFile_unpack(INTERP, PARROT_IMAGEIO(SELF)->pf,
+                GET_VISIT_CURSOR(SELF), PARROT_IMAGEIO(SELF)->input_length);
+
+            if (unpacked_length)
+                INC_VISIT_CURSOR(SELF, header_length);
+            else
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                        EXCEPTION_INVALID_STRING_REPRESENTATION,
+                        "PackFile header failed during unpack");
+        }
 
         unused = STATICSELF.shift_pmc();
         Parrot_visit_loop_visit(INTERP, SELF);

Modified: branches/gc_massacre/src/pmc/imageiosize.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/imageiosize.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/imageiosize.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -17,50 +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 */
-
-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 */
@@ -284,15 +240,38 @@
 */
 
     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)
     {
-        UINTVAL header_length = GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
-        PARROT_IMAGEIOSIZE(SELF)->size += header_length;
+        if (!PObj_flag_TEST(private1, SELF)) {
+            UINTVAL header_length = GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+            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/gc_massacre/src/pmc/imageiostrings.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/imageiostrings.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/imageiostrings.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/pmc/integer.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/integer.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/integer.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -43,6 +43,18 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/*
+
+=item C<static void maybe_throw_overflow_error(PARROT_INTERP)>
+
+Checks to see if the interpreter is set to throw an exception on overflow.
+
+If so, throw the exception, otherwise ignore.
+
+=cut
+
+*/
+
 static void
 maybe_throw_overflow_error(PARROT_INTERP)
 {
@@ -56,6 +68,16 @@
             "Integer overflow");
 }
 
+/*
+
+=item C<static PMC* upgrade_self_to_bignum(PARROT_INTERP, PMC *self)>
+
+Returns a pointer of *self upgraded to a bignum
+
+=cut
+
+*/
+
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PMC*
@@ -119,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());
     }
 
 /*
@@ -236,7 +257,7 @@
 
 =item C<void set_integer_native(INTVAL value)>
 
-Sets the value of the integer to the value of the C<Integer> C<*value>.
+Sets the value of the integer to the value of the native integer C<*value>.
 
 =cut
 
@@ -299,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);
         }
     }
@@ -318,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));
 
@@ -332,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;
     }
 
@@ -351,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);
         }
     }
@@ -441,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);
         }
     }
@@ -473,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);
     }
 
@@ -502,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);
         }
     }
@@ -602,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);
         }
     }
@@ -635,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);
     }
 
 
@@ -647,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);
         }
     }
@@ -743,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);
     }
 
@@ -755,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);
     }
 
 
@@ -804,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);
     }
 
@@ -818,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);
     }
 
 
@@ -833,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) {
@@ -848,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) {
@@ -926,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);
     }
 
@@ -939,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;
     }
 
 
@@ -952,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;
     }
 
 
@@ -965,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;
     }
 
 
@@ -1013,6 +987,46 @@
 
 /*
 
+=item C<PMC *neg(PMC *dest)>
+
+=item C<void i_neg()>
+
+Set C<dest> to the negated value of C<SELF>. If the value of C<SELF>
+is the minimum integer, a BigInt is created.
+
+=cut
+
+*/
+
+    VTABLE PMC *neg(PMC *dest) {
+        const INTVAL a = SELF.get_integer();
+
+        if (a != PARROT_INTVAL_MIN)
+            return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
+                                                   -a);
+        else {
+            PMC *promoted;
+            maybe_throw_overflow_error(INTERP);
+            promoted = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, 0);
+            return VTABLE_subtract_int(INTERP, promoted, a, promoted);
+        }
+    }
+
+    VTABLE void i_neg() {
+        const INTVAL a = SELF.get_integer();
+
+        if (a != PARROT_INTVAL_MIN)
+            VTABLE_set_integer_native(INTERP, SELF, -a);
+        else {
+            maybe_throw_overflow_error(INTERP);
+            SELF = upgrade_self_to_bignum(INTERP, SELF);
+            VTABLE_set_integer_native(INTERP, SELF, 0);
+            VTABLE_i_subtract_int(INTERP, SELF, a);
+        }
+    }
+
+/*
+
 =item C<INTVAL is_equal(PMC *value)>
 
 The C<==> operation.
@@ -1023,15 +1037,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)
@@ -1052,15 +1067,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;
+        }
     }
 
 
@@ -1178,27 +1198,38 @@
 
 =item C<void absolute()>
 
-Sets C<dest> to the absolute value of SELF.
+Sets C<dest> to the absolute value of C<SELF>. If the value of C<SELF>
+is the minimum integer, a BigInt is created.
 
 =cut
 
 */
 
     VTABLE PMC *absolute(PMC *dest) {
-        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;
+        const INTVAL a = SELF.get_integer();
 
+        if (a != PARROT_INTVAL_MIN)
+            return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
+                                                   abs(a));
+        else {
+            PMC *promoted;
+            maybe_throw_overflow_error(INTERP);
+            promoted = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, a);
+            return VTABLE_neg(INTERP, promoted, dest);
+        }
     }
 
 
     VTABLE void i_absolute() {
-        const INTVAL a = abs(SELF.get_integer());
-        VTABLE_set_integer_native(INTERP, SELF, a);
+        const INTVAL a = SELF.get_integer();
+
+        if (a != PARROT_INTVAL_MIN)
+            VTABLE_set_integer_native(INTERP, SELF, abs(a));
+        else {
+            maybe_throw_overflow_error(INTERP);
+            SELF = upgrade_self_to_bignum(INTERP, SELF);
+            return VTABLE_i_neg(INTERP, SELF);
+        }
     }
 
 

Modified: branches/gc_massacre/src/pmc/lexinfo.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/lexinfo.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/lexinfo.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/pmc/multisub.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/multisub.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/multisub.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -34,13 +34,9 @@
     }
 
     VTABLE void push_pmc(PMC *value) {
-        STRING * const _sub = CONST_STRING(INTERP, "Sub");
-        STRING * const _nci = CONST_STRING(INTERP, "NCI");
-
-        if (!VTABLE_isa(INTERP, value, _sub)
-        &&  !VTABLE_isa(INTERP, value, _nci))
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
-                    "attempt to push non Sub PMC");
+        if (!VTABLE_does(INTERP, value, CONST_STRING(INTERP, "invokable")))
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION, "attempt to push non Sub PMC");
 
         SUPER(value);
     }

Modified: branches/gc_massacre/src/pmc/namespace.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/namespace.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/namespace.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -32,7 +32,7 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-static void add_nci_to_namespace(PARROT_INTERP,
+static void add_native_to_namespace(PARROT_INTERP,
     ARGIN(PMC *SELF),
     ARGIN(STRING *key),
     ARGIN_NULLOK(PMC *value))
@@ -76,7 +76,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(SELF) \
     , PARROT_ASSERT_ARG(key))
-#define ASSERT_ARGS_add_nci_to_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_add_native_to_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(SELF) \
     , PARROT_ASSERT_ARG(key))
@@ -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,16 +225,24 @@
     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),
+add_native_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
         ARGIN_NULLOK(PMC *value))
 {
-    ASSERT_ARGS(add_nci_to_namespace)
-
-    STRING * const nci_str = CONST_STRING(interp, "NCI");
+    ASSERT_ARGS(add_native_to_namespace)
 
     if (!PMC_IS_NULL(value)
-    &&   VTABLE_isa(interp, value, nci_str)) {
+    && (value->vtable->base_type == enum_class_NativePCCMethod ||
+        value->vtable->base_type == enum_class_NCI)) {
         Parrot_NameSpace_attributes * const nsinfo = PARROT_NAMESPACE(SELF);
         PMC * const classobj = VTABLE_get_class(interp, SELF);
 
@@ -216,6 +251,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))
@@ -382,18 +426,20 @@
                               :value->vtable->base_type == enum_class_NameSpace;
 
         /* don't need this everywhere yet */
-        PMC * const old = (PMC *)parrot_hash_get(INTERP, (Hash *)SELF.get_pointer(), key);
+        PMC *old;
 
         /* If it's a sub... */
         if (maybe_add_sub_to_namespace(INTERP, SELF, key, value))
             return;
 
-        /* If it's an NCI method */
-        add_nci_to_namespace(INTERP, SELF, key, value);
+        /* If it's an native method */
+        add_native_to_namespace(INTERP, SELF, key, value);
 
         /* If it's a multi-sub and the first in this NS... */
         add_multi_to_namespace(INTERP, SELF, key, value);
 
+        old = (PMC *)parrot_hash_get(INTERP, (Hash *)SELF.get_pointer(), key);
+
         if (!old)
             SUPER(key, value);
         else {

Added: branches/gc_massacre/src/pmc/nativepccmethod.pmc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/src/pmc/nativepccmethod.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -0,0 +1,198 @@
+/*
+Copyright (C) 2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/nativepccmethod.pmc - Native PCC Method PMC
+
+=head1 DESCRIPTION
+
+Container for native functions that handle PCC on their own.
+
+=head2 Methods
+
+=over 4
+
+=cut
+
+*/
+
+/* HEADERIZER HFILE: none */
+
+pmclass NativePCCMethod auto_attrs {
+    ATTR STRING *signature;
+    ATTR void   *func;
+
+    /* MMD fields */
+    ATTR STRING *mmd_long_signature;
+    ATTR PMC    *mmd_multi_sig;
+
+/*
+
+=item C<void init()>
+
+Initializes the PMC with a C<NULL> function pointer.
+
+=cut
+
+*/
+
+    VTABLE void init() {
+        Parrot_NativePCCMethod_attributes *attrs = PARROT_NATIVEPCCMETHOD(SELF);
+
+        attrs->func               = NULL;
+        attrs->signature          = STRINGNULL;
+        attrs->mmd_long_signature = STRINGNULL;
+        attrs->mmd_multi_sig      = PMCNULL;
+
+        PObj_custom_mark_SET(SELF);
+    }
+
+/*
+
+=item C<void *get_pointer()>
+
+Get the pointer to the native function.
+
+=item C<void set_pointer_keyed_str(STRING *sig, void *func)>
+
+Set the pointer to the native function and the PCC signature.
+
+=cut
+
+*/
+
+
+    VTABLE void *get_pointer() {
+        return PARROT_NATIVEPCCMETHOD(SELF)->func;
+    }
+
+    VTABLE void set_pointer_keyed_str(STRING *sig, void *func) {
+        PARROT_NATIVEPCCMETHOD(SELF)->signature = sig;
+        PARROT_NATIVEPCCMETHOD(SELF)->func = func;
+    }
+
+/*
+
+=item C<INTVAL defined()>
+
+=item C<INTVAL get_bool()>
+
+NULLness check.
+
+=cut
+
+*/
+
+    VTABLE INTVAL defined() {
+        return !! PARROT_NATIVEPCCMETHOD(SELF)->func;
+    }
+
+    VTABLE INTVAL get_bool() {
+        return STATICSELF.defined();
+    }
+
+/*
+
+=item C<opcode_t *invoke(void *next)>
+
+Call the function pointer.
+
+=cut
+
+*/
+
+    VTABLE opcode_t *invoke(void *next) {
+        void                *func;
+        native_pcc_method_t  fptr;
+
+        GET_ATTR_func(INTERP, SELF, func);
+        if (!func)
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "attempt to call NULL native function");
+
+        fptr = D2FPTR(func);
+        fptr(INTERP);
+
+        /*
+         * If this function was tailcalled, the return result
+         * is already passed back to the caller of this frame.
+         * We therefore invoke the return continuation here,
+         * which gets rid of this frame and returns the real
+         * return address.
+         */
+        {
+            PMC *cont = INTERP->current_cont;
+
+            if (cont && cont != NEED_CONTINUATION
+            && (PObj_get_FLAGS(cont) & SUB_FLAG_TAILCALL)) {
+                cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
+                next = VTABLE_invoke(INTERP, cont, next);
+            }
+        }
+
+        return (opcode_t *)next;
+    }
+
+/*
+
+=item C<void mark()>
+
+Mark contained elements for GC.
+
+=cut
+
+*/
+
+    VTABLE void mark() {
+        Parrot_NativePCCMethod_attributes *attrs = PARROT_NATIVEPCCMETHOD(SELF);
+
+        Parrot_gc_mark_STRING_alive(interp, attrs->signature);
+        Parrot_gc_mark_STRING_alive(interp, attrs->mmd_long_signature);
+        Parrot_gc_mark_PMC_alive(interp,    attrs->mmd_multi_sig);
+    }
+
+/*
+
+=item C<PMC *clone()>
+
+Create a clone of this PMC.
+
+=cut
+
+*/
+
+    VTABLE PMC *clone() {
+        PMC *ret = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+        Parrot_NativePCCMethod_attributes *self_attrs = PARROT_NATIVEPCCMETHOD(SELF);
+        Parrot_NativePCCMethod_attributes *ret_attrs  = PARROT_NATIVEPCCMETHOD(ret);
+
+        ret_attrs->func               = self_attrs->func;
+        ret_attrs->signature          = self_attrs->signature;
+        ret_attrs->mmd_long_signature = self_attrs->mmd_long_signature;
+        ret_attrs->mmd_multi_sig      = self_attrs->mmd_multi_sig;
+
+        return ret;
+    }
+}
+
+/*
+
+=back
+
+=head1 SEE ALSO
+
+F<docs/pdds/pdd03_calling_conventions.pod>.
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/gc_massacre/src/pmc/nci.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/nci.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/nci.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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
@@ -204,20 +221,6 @@
 
 /*
 
-=item C<METHOD set_raw_nci_ptr(void *func)>
-
-Sets the specified function pointer and raw flag.
-
-=cut
-
-*/
-
-    METHOD make_raw_nci(PMC *func) {
-        VTABLE_set_pointer(interp, SELF, (void *)func);
-    }
-
-/*
-
 =item C<void init()>
 
 Initializes the NCI with a C<NULL> function pointer.
@@ -227,11 +230,13 @@
 */
 
     VTABLE void init() {
-        /* Mark that we're not a raw NCI. */
-        PObj_flag_CLEAR(private2, SELF);
         PObj_custom_mark_SET(SELF);
     }
 
+    VTABLE void *get_pointer() {
+        return PARROT_NCI(SELF)->orig_func;
+    }
+
 /*
 
 =item C<void set_pointer_keyed_str(STRING *key, void *func)>
@@ -242,15 +247,6 @@
 
 */
 
-    VTABLE void set_pointer(void *ptr) {
-        SET_ATTR_orig_func(INTERP, SELF, ptr);
-        PObj_flag_SET(private2, SELF);
-    }
-
-    VTABLE void *get_pointer() {
-        return PARROT_NCI(SELF)->orig_func;
-    }
-
     VTABLE void set_pointer_keyed_str(STRING *key, void *func) {
         Parrot_NCI_attributes * const nci_info   = PARROT_NCI(SELF);
 
@@ -320,7 +316,7 @@
         nci_info_ret->pcc_params_signature  = nci_info_self->pcc_params_signature;
         nci_info_ret->pcc_return_signature  = nci_info_self->pcc_params_signature;
         nci_info_ret->arity                 = nci_info_self->arity;
-        PObj_get_FLAGS(ret)                |= (PObj_get_FLAGS(SELF) & 0x7);
+        PObj_get_FLAGS(ret)                 = PObj_get_FLAGS(SELF);
 
         return ret;
     }
@@ -360,9 +356,7 @@
         PMC                          *cont;
 
         GET_ATTR_orig_func(INTERP, SELF, orig_func);
-        func = PObj_flag_TEST(private2, SELF)
-            ? (nci_thunk_t) D2FPTR(orig_func)
-            : (nci_thunk_t) D2FPTR(nci_info->func);
+        func = D2FPTR(nci_info->func);
 
         GET_ATTR_fb_info(INTERP, SELF, fb_info);
 

Modified: branches/gc_massacre/src/pmc/null.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/null.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/null.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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,20 +28,14 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-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.
@@ -92,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
 
 */
 
@@ -110,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/gc_massacre/src/pmc/object.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/object.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/object.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 -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 C<-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),
@@ -324,7 +355,7 @@
 
         /* If there's a vtable override for 'get_attr_str' run that first. */
         PMC * const method = Parrot_oo_find_vtable_override(INTERP,
-                VTABLE_get_class(INTERP, SELF), get_attr);
+                obj->_class, get_attr);
 
         if (!PMC_IS_NULL(method)) {
             PMC *result = PMCNULL;
@@ -389,7 +420,7 @@
 
         /* If there's a vtable override for 'set_attr_str' run that first. */
         PMC * const method = Parrot_oo_find_vtable_override(INTERP,
-                VTABLE_get_class(INTERP, SELF), vtable_meth_name);
+                obj->_class, vtable_meth_name);
 
         if (!PMC_IS_NULL(method)) {
             Parrot_ext_call(INTERP, method, "PiSP->", SELF, name, value);
@@ -563,20 +594,7 @@
 
 */
     VTABLE PMC *get_class() {
-        PMC    * const classobj  = PARROT_OBJECT(SELF)->_class;
-        STRING * const get_class = CONST_STRING(INTERP, "get_class");
-
-        /* If there's a vtable override for 'get_class' run that instead. */
-        PMC    * const method    = Parrot_oo_find_vtable_override(INTERP,
-                classobj, get_class);
-
-        if (!PMC_IS_NULL(method)) {
-            PMC *result;
-            Parrot_ext_call(INTERP, method, "Pi->P", SELF, &result);
-            return result;
-        }
-
-        return classobj;
+        return PARROT_OBJECT(SELF)->_class;
     }
 
 

Modified: branches/gc_massacre/src/pmc/opcode.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/opcode.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/opcode.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -23,19 +23,12 @@
 pmclass Opcode auto_attrs {
     ATTR op_info_t *info;
     ATTR INTVAL op_number;
-    ATTR STRING *full_name_cache;
 
     VTABLE void init() {
         Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
             "Opcode must be created from OpLib.");
     }
 
-    VTABLE void mark() {
-        Parrot_Opcode_attributes * const attrs = PARROT_OPCODE(SELF);
-        if (attrs->full_name_cache)
-            Parrot_gc_mark_STRING_alive(INTERP, attrs->full_name_cache);
-    }
-
     VTABLE void set_pointer(void *i) {
         Parrot_Opcode_attributes * const attrs = PARROT_OPCODE(SELF);
         if (attrs->info)
@@ -44,16 +37,6 @@
         attrs->info = (op_info_t *)i;
     }
 
-    VTABLE void set_string_native(STRING *name) {
-        char * const cstr = Parrot_str_to_cstring(INTERP, name);
-        const INTVAL num = INTERP->op_lib->op_code(INTERP, cstr, 1);
-        Parrot_str_free_cstring(cstr);
-        if (num == -1)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                "Opcode: Opcode %S not found", name);
-        VTABLE_set_integer_native(INTERP, SELF, num);
-    }
-
     VTABLE INTVAL get_integer() {
         Parrot_Opcode_attributes * const attrs = PARROT_OPCODE(SELF);
         if (!attrs->info)
@@ -62,27 +45,18 @@
     }
 
     VTABLE void set_integer_native(INTVAL value) {
-        const INTVAL opcount = INTERP->op_lib->op_count;
         Parrot_Opcode_attributes * const attrs = PARROT_OPCODE(SELF);
         if (attrs->info)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Opcode has already been initialized");
-        if (value >= opcount || value < 0)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                "Opcode: Opcode index %d out of bounds", value);
-        attrs->info = &(INTERP->op_info_table[value]);
         attrs->op_number = value;
     }
 
     VTABLE STRING* get_string() {
         Parrot_Opcode_attributes * const attrs = PARROT_OPCODE(SELF);
-        if (attrs->full_name_cache == NULL) {
-            const char * const name = attrs->info->full_name;
-            const INTVAL len = strlen(name);
-            STRING * const newstr = Parrot_str_new(INTERP, name, len);
-            attrs->full_name_cache = newstr;
-        }
-        return attrs->full_name_cache;
+        const char * const name                = attrs->info->full_name;
+        const INTVAL len                       = strlen(name);
+        return Parrot_str_new(INTERP, name, len);
     }
 
     VTABLE INTVAL elements() {

Modified: branches/gc_massacre/src/pmc/oplib.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/oplib.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/oplib.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -15,51 +15,59 @@
 */
 
 #include "parrot/parrot.h"
+#include "parrot/oplib/core_ops.h"
 
 /* HEADERIZER HFILE: none */
 /* HEADERIZER BEGIN: static */
 /* HEADERIZER END: static */
 
-/* TODO: Since Opcode PMCs are essentially read-only after initialization
-         here, we should cache them. A FixedPMCArray would be okay, an
-         INTVAL->PMC HASH might be better, since it's unlikely that we will
-         need to cache even a majority of the ~1300 ops. */
-static PMC *OPLIB_PMC_INSTANCE;
-static PMC *OPLIB_OPCODE_CACHE;
-pmclass OpLib singleton {
-    void class_init() {
-        OPLIB_PMC_INSTANCE = NULL;
-        OPLIB_OPCODE_CACHE = NULL;
-    }
+pmclass OpLib auto_attrs {
+    ATTR op_lib_t *oplib;
 
-    VTABLE void *get_pointer() {
-        return OPLIB_PMC_INSTANCE;
+    VTABLE void init() {
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+                "OpLib must be initialized with an oplib name");
     }
 
-    VTABLE void set_pointer(void *ptr) {
-        OPLIB_PMC_INSTANCE = (PMC *)ptr;
-    }
+    VTABLE void init_pmc(PMC *name_pmc) {
+        STRING   *name      = VTABLE_get_string(INTERP, name_pmc);
+        char     *name_cstr = Parrot_str_to_cstring(INTERP, name);
+        op_lib_t *oplib     = NULL;
+        int       i;
 
-    VTABLE void init() {
-        if (OPLIB_OPCODE_CACHE == NULL) {
-            OPLIB_OPCODE_CACHE = Parrot_pmc_new(INTERP, enum_class_Hash);
-            Parrot_pmc_gc_register(INTERP, OPLIB_OPCODE_CACHE);
+        if (STREQ(name_cstr, PARROT_CORE_OPLIB_NAME)) {
+            oplib = PARROT_CORE_OPLIB_INIT(INTERP, 1);
         }
-        PObj_custom_mark_SET(SELF);
-    }
+        else {
+            for (i = 0; i < INTERP->n_libs; i++) {
+                if (STREQ(name_cstr, INTERP->all_op_libs[i]->name)) {
+                    oplib = INTERP->all_op_libs[i];
+                    break;
+                }
+            }
+        }
+
+        Parrot_str_free_cstring(name_cstr);
 
-    VTABLE void mark() {
-        if (OPLIB_OPCODE_CACHE != NULL)
-            Parrot_gc_mark_PMC_alive(INTERP, OPLIB_OPCODE_CACHE);
+        if (!oplib)
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_LIBRARY_NOT_LOADED,
+                    "Could not find oplib `%S'", name);
+
+        SET_ATTR_oplib(INTERP, SELF, oplib);
     }
 
     /* Look up an opnumber given the name of the op. First we look for the
        specific name, then the more general short name. */
     VTABLE INTVAL get_integer_keyed_str(STRING *name) {
-        char * const cstr = Parrot_str_to_cstring(INTERP, name);
-        INTVAL num = INTERP->op_lib->op_code(INTERP, cstr, 1);
+        op_lib_t     *oplib;
+        char * const  cstr = Parrot_str_to_cstring(INTERP, name);
+        INTVAL        num;
+
+        GET_ATTR_oplib(INTERP, SELF, oplib);
+        num  = oplib->op_code(INTERP, cstr, 1);
         if (num == -1)
-            num = INTERP->op_lib->op_code(INTERP, cstr, 0);
+            num = oplib->op_code(INTERP, cstr, 0);
+
         Parrot_str_free_cstring(cstr);
         return num;
     }
@@ -70,17 +78,11 @@
     }
 
     VTABLE PMC* get_pmc_keyed_str(STRING *name) {
-        if (VTABLE_defined_keyed_str(INTERP, OPLIB_OPCODE_CACHE, name)) {
-            PMC * const op = VTABLE_get_pmc_keyed_str(INTERP, OPLIB_OPCODE_CACHE, name);
-            return op;
-        }
-        else {
-            PMC * const op = Parrot_pmc_new_noinit(INTERP, enum_class_Opcode);
-            VTABLE_set_string_native(INTERP, op, name);
-            PObj_custom_mark_SET(op);
-            VTABLE_set_pmc_keyed_str(INTERP, OPLIB_OPCODE_CACHE, name, op);
-            return op;
-        }
+        const INTVAL  num = STATICSELF.get_integer_keyed_str(name);
+        if (num == -1)
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                "Opcode: Opcode %S not found", name);
+        return STATICSELF.get_pmc_keyed_int(num);
     }
 
     VTABLE PMC* get_pmc_keyed(PMC *key) {
@@ -89,18 +91,29 @@
     }
 
     VTABLE PMC* get_pmc_keyed_int(INTVAL value) {
-        if ((UINTVAL)value >= INTERP->op_lib->op_count)
+        op_lib_t *oplib;
+        GET_ATTR_oplib(INTERP, SELF, oplib);
+        if ((UINTVAL)value >= oplib->op_count ||
+                     value <  0) {
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
-                "OpLib: Opcode index %d out of bounds", value);
+                "OpLib `%s': Opcode index %d out of bounds", oplib->name, value);
+        }
         else {
-            const char * const name   = INTERP->op_info_table[value].full_name;
-            STRING     * const newstr = Parrot_str_new(INTERP, name, 0);
-            return VTABLE_get_pmc_keyed_str(INTERP, SELF, newstr);
+            PMC * const op = Parrot_pmc_new_noinit(INTERP, enum_class_Opcode);
+            VTABLE_set_integer_native(INTERP, op, value);
+            VTABLE_set_pointer(INTERP, op, &oplib->op_info_table[value]);
+            return op;
         }
     }
 
     VTABLE INTVAL elements() {
-        return INTERP->op_lib->op_count;
+        op_lib_t *oplib;
+        GET_ATTR_oplib(INTERP, SELF, oplib);
+        return oplib->op_count;
+    }
+
+    VTABLE INTVAL get_integer() {
+        return STATICSELF.elements();
     }
 
     VTABLE INTVAL get_integer() {
@@ -110,11 +123,14 @@
     METHOD op_family(STRING *shortname)
     {
         char * const sname = Parrot_str_to_cstring(INTERP, shortname);
-        const op_lib_t * const op_lib = INTERP->op_lib;
-        const op_info_t * const table = op_lib->op_info_table;
+        op_lib_t  *oplib;
+        op_info_t *table;
         PMC *result = PMCNULL;
         UINTVAL i;
-        for (i = 0; i < op_lib->op_count; ++i) {
+
+        GET_ATTR_oplib(INTERP, SELF, oplib);
+        table = oplib->op_info_table;
+        for (i = 0; i < oplib->op_count; ++i) {
             if (strcmp(table[i].name, sname) == 0) {
                 if (PMC_IS_NULL(result))
                     result = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);

Modified: branches/gc_massacre/src/pmc/orderedhash.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/orderedhash.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/orderedhash.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -132,8 +132,18 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-/* Get list_item by index */
-/* XXX Can this actually return NULL or not? */
+/*
+
+=item C<static PMC* get_list_item(PARROT_INTERP, PMC *self, INTVAL idx)>
+
+Get list_item by index
+
+XXX Can this actually return NULL or not?
+
+=cut
+
+*/
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static PMC*
@@ -158,8 +168,19 @@
     return list_entry;
 }
 
-/* Find first/last in cloned/thawed OrderedHash */
-/* Parameter C<pmc_hash> is Hash, not OrderedHash */
+/*
+
+=item C<static void find_bounds(PARROT_INTERP, PMC *pmc_hash, PMC **first, PMC
+**last)>
+
+Find first/last in cloned/thawed OrderedHash
+
+Parameter C<pmc_hash> is Hash, not OrderedHash
+
+=cut
+
+*/
+
 static void
 find_bounds(PARROT_INTERP, ARGIN(PMC *pmc_hash), ARGMOD(PMC **first), ARGMOD(PMC **last))
 {
@@ -182,6 +203,17 @@
 }
 
 /* Helpers for boxing values */
+
+/*
+
+=item C<static PMC* box_string(PARROT_INTERP, STRING *str)>
+
+Helper function to box STRING
+
+=cut
+
+*/
+
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static PMC*
@@ -195,6 +227,16 @@
     return ret;
 }
 
+/*
+
+=item C<static PMC* box_integer(PARROT_INTERP, INTVAL val)>
+
+Helper function to box INTVAL
+
+=cut
+
+*/
+
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static PMC*
@@ -208,6 +250,16 @@
     return ret;
 }
 
+/*
+
+=item C<static PMC* box_number(PARROT_INTERP, FLOATVAL val)>
+
+Helper function to box FLOATVAL
+
+=cut
+
+*/
+
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static PMC*

Modified: branches/gc_massacre/src/pmc/packfile.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/packfile.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/packfile.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -41,8 +41,16 @@
 /* HEADERIZER END: static */
 
 /*
+
+=item C<static void copy_packfile_header(PARROT_INTERP, PMC *self, PackFile
+*pf)>
+
 Copy attributes from PackFile* to Packfile PMC.
+
+=cut
+
 */
+
 static void
 copy_packfile_header(PARROT_INTERP, ARGMOD(PMC *self), ARGIN(PackFile *pf))
 {

Modified: branches/gc_massacre/src/pmc/packfiledirectory.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/packfiledirectory.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/packfiledirectory.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -43,7 +43,7 @@
 
 */
     VTABLE void init() {
-        Parrot_PackfileDirectory_attributes * attrs =
+        Parrot_PackfileDirectory_attributes * const attrs =
                 PMC_data_typed(SELF, Parrot_PackfileDirectory_attributes*);
 
         attrs->hash = Parrot_pmc_new(INTERP, enum_class_Hash);
@@ -62,7 +62,7 @@
 */
 
     VTABLE void mark() {
-        Parrot_PackfileDirectory_attributes * attrs =
+        Parrot_PackfileDirectory_attributes * const attrs =
                 PARROT_PACKFILEDIRECTORY(SELF);
 
         Parrot_gc_mark_PMC_alive(INTERP, attrs->hash);

Modified: branches/gc_massacre/src/pmc/parrotinterpreter.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/parrotinterpreter.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/parrotinterpreter.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/pmc/parrotlibrary.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/parrotlibrary.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/parrotlibrary.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/pmc/resizablepmcarray.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/resizablepmcarray.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/resizablepmcarray.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -89,20 +89,6 @@
 pmclass ResizablePMCArray extends FixedPMCArray auto_attrs provides array {
     ATTR INTVAL resize_threshold; /* max size before array needs resizing */
 
-
-/*
-=item C<void init()>
-
-Initializes the array.
-
-=cut
-
-*/
-
-    VTABLE void init() {
-        PObj_custom_mark_destroy_SETALL(SELF);
-    }
-
 /*
 
 =item C<void set_integer_native(INTVAL size)>

Modified: branches/gc_massacre/src/pmc/role.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/role.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/role.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -68,7 +68,16 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-/* Takes a hash and initializes the role based on it. */
+/*
+
+=item C<static void init_role_from_hash(PARROT_INTERP, PMC *self, PMC *info)>
+
+Takes a hash and initializes the role based on it.
+
+=cut
+
+*/
+
 static void
 init_role_from_hash(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *info))
 {

Modified: branches/gc_massacre/src/pmc/stringbuilder.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/stringbuilder.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/stringbuilder.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -37,6 +37,7 @@
 pmclass StringBuilder provides string auto_attrs {
     ATTR STRING *buffer;    /* Mutable string to gather results */
 
+
 /*
 
 =item C<void init()>
@@ -51,6 +52,7 @@
         STATICSELF.init_int(INITIAL_STRING_CAPACITY);
     }
 
+
 /*
 
 =item C<void init_int()>
@@ -63,19 +65,53 @@
 
     VTABLE void init_int(INTVAL initial_size) {
         STRING * const buffer = mem_gc_allocate_zeroed_typed(INTERP, STRING);
-        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 | PObj_external_FLAG;
-        buffer->_bufstart = buffer->strstart = mem_gc_allocate_n_typed(INTERP,
-                initial_size, char);
-        buffer->_buflen   = initial_size;
+
+        buffer->encoding      = Parrot_default_encoding_ptr;
+        buffer->charset       = Parrot_default_charset_ptr;
+        buffer->_buflen       = initial_size;
+        buffer->_bufstart     = buffer->strstart
+                              = mem_gc_allocate_n_typed(INTERP,
+                                        initial_size, char);
+
+        /* We need these string flags to use this buffer in substr_str */
+        buffer->flags         = PObj_is_string_FLAG | PObj_external_FLAG;
 
         SET_ATTR_buffer(INTERP, SELF, buffer);
 
         PObj_custom_destroy_SET(SELF);
     }
 
+
+/*
+
+=item C<void init_pmc()>
+
+Initializes the StringBuilder with an array of STRINGs.
+
+=cut
+
+*/
+
+    VTABLE void init_pmc(PMC *ar) {
+        const INTVAL count = VTABLE_elements(INTERP, ar);
+
+        if (!count)
+            STATICSELF.init_int(INITIAL_STRING_CAPACITY);
+        else {
+            STRING * const first = VTABLE_get_string_keyed_int(INTERP, ar, 0);
+            const INTVAL   size  = Parrot_str_byte_length(INTERP, first);
+            INTVAL         i;
+
+            /* it's just an estimate, but estimates help */
+            STATICSELF.init_int(size * count);
+            SELF.push_string(first);
+
+            for (i = 1; i < count; ++i)
+                SELF.push_string(VTABLE_get_string_keyed_int(INTERP, ar, i));
+        }
+    }
+
+
 /*
 
 =item C<void destroy()>
@@ -145,7 +181,7 @@
             STRING * const new_buffer = Parrot_unicode_charset_ptr->to_charset(interp, buffer);
             mem_gc_free(INTERP, buffer->_bufstart);
             STRUCT_COPY(buffer, new_buffer);
-            buffer->flags     = PObj_is_string_FLAG | PObj_live_FLAG | PObj_external_FLAG;
+            buffer->flags     = PObj_is_string_FLAG | PObj_external_FLAG;
 
             buffer->_bufstart = buffer->strstart = mem_gc_allocate_n_typed(INTERP,
                                                     new_buffer->_buflen, char);
@@ -353,16 +389,13 @@
             }
             else if (Parrot_str_equal(INTERP, key, comma)) {
                 INTVAL num_args = VTABLE_elements(INTERP, args);
-                INTVAL pos_args = 1;
-
-                VTABLE_push_string(INTERP, stringbuilder,
-                    VTABLE_get_string_keyed_int(INTERP, args, 0));
+                INTVAL pos_args;
 
-                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/gc_massacre/src/pmc/stringhandle.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/stringhandle.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/stringhandle.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -195,7 +195,7 @@
             if (encoding_is_utf8(INTERP, encoding))
                 new_string = string_make(INTERP, "", 0, "unicode", 0);
             else
-                new_string = Parrot_str_new(INTERP, "", 0);
+                new_string = CONST_STRING(INTERP, "");
 
             SET_ATTR_stringhandle(INTERP, SELF, new_string);
         }
@@ -203,7 +203,7 @@
         /* Set a default mode of read-only. */
         GET_ATTR_mode(INTERP, SELF, open_mode);
         if (STRING_IS_NULL(open_mode)) {
-            open_mode = Parrot_str_new_constant(INTERP, "r");
+            open_mode = CONST_STRING(INTERP, "r");
             SET_ATTR_mode(INTERP, SELF, open_mode);
         }
 
@@ -315,7 +315,7 @@
             if (encoding_is_utf8(INTERP, encoding))
                 string_result = string_make(INTERP, "", 0, "unicode", 0);
             else
-                string_result = Parrot_str_new_constant(INTERP, "");
+                string_result = CONST_STRING(INTERP, "");
         }
 
         RETURN(STRING *string_result);

Modified: branches/gc_massacre/src/pmc/stringiterator.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/stringiterator.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/stringiterator.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/pmc/sub.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/sub.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/sub.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -33,6 +33,14 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/*
+
+=item C<static void print_sub_name(PARROT_INTERP, PMC *sub)>
+
+=cut
+
+*/
+
 static void
 print_sub_name(PARROT_INTERP, ARGIN_NULLOK(PMC *sub))
 {
@@ -861,7 +869,8 @@
                     Parrot_sub_arginfo);
 
             /* If the first instruction is a get_params... */
-            if (*pc == PARROT_OP_get_params_pc) {
+            if (sub->seg->op_func_table[*pc]
+                == interp->op_func_table[PARROT_OP_get_params_pc]) {
                 /* Get the signature (the next thing in the bytecode). */
                 PMC * const sig = PF_CONST(sub->seg, *(++pc)).u.key;
 
@@ -1144,7 +1153,10 @@
 
 (Experimental) Returns Sub flags.
 
+=back
+
 =cut
+
 */
     METHOD comp_flags() {
         Parrot_Sub_attributes  *sub;

Modified: branches/gc_massacre/src/pmc/threadinterpreter.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/threadinterpreter.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/threadinterpreter.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -44,6 +44,15 @@
  * can't do multi-threaded GC yet
  * XXX a quick hack to pass the few tests
  */
+
+/*
+
+=item C<static void stop_GC(Interp *parent, Interp *thread)>
+
+=cut
+
+*/
+
 static void
 stop_GC(ARGMOD(Interp *parent), ARGMOD(Interp *thread))
 {

Modified: branches/gc_massacre/src/pmc/undef.pmc
==============================================================================
--- branches/gc_massacre/src/pmc/undef.pmc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc/undef.pmc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -178,7 +178,7 @@
         Parrot_warn(INTERP, PARROT_WARNINGS_UNDEF_FLAG,
             "Stringifying an Undef PMC");
 
-        return Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
+        return CONST_STRING(INTERP, "");
     }
 
 /*

Modified: branches/gc_massacre/src/pmc_freeze.c
==============================================================================
--- branches/gc_massacre/src/pmc_freeze.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/pmc_freeze.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -62,8 +62,8 @@
 
 /*
 
-=item C<STRING * Parrot_freeze_pbc(PARROT_INTERP, PMC *pmc, const
-PackFile_ConstTable *pf)>
+=item C<opcode_t * Parrot_freeze_pbc(PARROT_INTERP, PMC *pmc, const
+PackFile_ConstTable *pf, opcode_t *cursor)>
 
 Freezes a PMC to a PackFile.
 
@@ -74,21 +74,24 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-STRING *
-Parrot_freeze_pbc(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(const PackFile_ConstTable *pf))
+opcode_t *
+Parrot_freeze_pbc(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(const PackFile_ConstTable *pf),
+    ARGIN(opcode_t *cursor))
 {
     ASSERT_ARGS(Parrot_freeze_pbc)
-    PMC *visitor;
-    PMC * const pf_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
+    PMC    *visitor;
+    STRING *image;
     DECL_CONST_CAST;
 
-    VTABLE_set_pointer(interp, pf_pmc,
+    visitor  = Parrot_pmc_new(interp, enum_class_ImageIO);
+    VTABLE_set_pointer(interp, visitor,
         PARROT_const_cast(void *, (const void *)pf));
-
-    visitor  = Parrot_pmc_new_init(interp, enum_class_ImageIO, pf_pmc);
     VTABLE_set_pmc(interp, visitor, pmc);
 
-    return VTABLE_get_string(interp, visitor);
+    image  = VTABLE_get_string(interp, visitor);
+    cursor = PF_store_buf(cursor, image);
+
+    return cursor;
 }
 
 
@@ -230,8 +233,8 @@
 
 /*
 
-=item C<PMC* Parrot_thaw_pbc(PARROT_INTERP, STRING *image, PackFile_ConstTable
-*pf)>
+=item C<PMC* Parrot_thaw_pbc(PARROT_INTERP, PackFile_ConstTable *ct, const
+opcode_t **cursor)>
 
 Thaw a pmc frozen by Parrot_freeze_pbc.
 
@@ -243,13 +246,13 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 PMC*
-Parrot_thaw_pbc(PARROT_INTERP, ARGIN(STRING *image), ARGIN(PackFile_ConstTable *pf))
+Parrot_thaw_pbc(PARROT_INTERP, ARGIN(PackFile_ConstTable *ct), ARGMOD(const opcode_t **cursor))
 {
     ASSERT_ARGS(Parrot_thaw_pbc)
-    PMC *info = Parrot_pmc_new(interp, enum_class_ImageIO);
-
-    VTABLE_set_pointer(interp, info, pf);
-
+    PackFile * const pf = ct->base.pf;
+    STRING *image       = PF_fetch_buf(interp, pf, cursor);
+    PMC *info           = Parrot_pmc_new(interp, enum_class_ImageIO);
+    VTABLE_set_pointer(interp, info, ct);
     VTABLE_set_string_native(interp, info, image);
     return VTABLE_get_pmc(interp, info);
 }

Modified: branches/gc_massacre/src/runcore/cores.c
==============================================================================
--- branches/gc_massacre/src/runcore/cores.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/runcore/cores.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/runcore/main.c
==============================================================================
--- branches/gc_massacre/src/runcore/main.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/runcore/main.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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;
@@ -520,9 +525,11 @@
 disable_event_checking(PARROT_INTERP)
 {
     ASSERT_ARGS(disable_event_checking)
+    PackFile_ByteCode *cs = interp->code;
     /* restore func table */
-    PARROT_ASSERT(interp->save_func_table);
-    notify_func_table(interp, interp->save_func_table, 0);
+    PARROT_ASSERT(cs->save_func_table);
+    cs->op_func_table   = cs->save_func_table;
+    cs->save_func_table = NULL;
 }
 
 
@@ -546,8 +553,12 @@
 enable_event_checking(PARROT_INTERP)
 {
     ASSERT_ARGS(enable_event_checking)
-    /* put table in place */
-    notify_func_table(interp, interp->evc_func_table, 1);
+    PackFile_ByteCode *cs = interp->code;
+    /* only save if we're not already event checking */
+    if (cs->save_func_table == NULL)
+        cs->save_func_table = cs->op_func_table;
+    /* put evc table in place */
+    cs->op_func_table   = interp->evc_func_table;
 }
 
 

Modified: branches/gc_massacre/src/runcore/profiling.c
==============================================================================
--- branches/gc_massacre/src/runcore/profiling.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/runcore/profiling.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -459,7 +459,7 @@
             pprof_data[PPROF_DATA_TIME] = op_time;
         }
         pprof_data[PPROF_DATA_LINE]   = preop_line;
-        pprof_data[PPROF_DATA_OPNAME] = (PPROF_DATA)(interp->op_info_table)[*preop_pc].name;
+        pprof_data[PPROF_DATA_OPNAME] = (PPROF_DATA)(interp->code->op_info_table)[*preop_pc]->name;
         runcore->output_fn(runcore, pprof_data, PPROF_LINE_OP);
     }
 

Modified: branches/gc_massacre/src/runcore/trace.c
==============================================================================
--- branches/gc_massacre/src/runcore/trace.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/runcore/trace.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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);
@@ -297,7 +297,7 @@
 {
     ASSERT_ARGS(trace_op_dump)
     Interp    * const debugger = debugger_or_interp(interp);
-    op_info_t * const info     = &interp->op_info_table[*pc];
+    op_info_t * const info     = interp->code->op_info_table[*pc];
     PMC *sig                   = PMCNULL;
     INTVAL n                   = info->op_count;
     INTVAL s                   = 1;

Modified: branches/gc_massacre/src/scheduler.c
==============================================================================
--- branches/gc_massacre/src/scheduler.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/scheduler.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/string/api.c
==============================================================================
--- branches/gc_massacre/src/string/api.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/api.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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);
@@ -393,12 +392,17 @@
 
     d = Parrot_gc_new_string_header(interp,
         PObj_get_FLAGS(s) & ~PObj_constant_FLAG);
+    /* This might set the constant flag again but it is the right thing
+     * to do */
     STRUCT_COPY(d, s);
 
+    /* Clear live flag. It might be set on constant strings */
+    PObj_live_CLEAR(d);
+
     /* Now check that buffer allocated from pool and affected by compacting */
     if (is_movable && Buffer_bufstart(s)) {
         /* If so, mark it as shared */
-        INTVAL * const buffer_flags = Buffer_bufrefcountptr(d);
+        INTVAL * const buffer_flags = Buffer_bufflagsptr(d);
         *buffer_flags |= Buffer_shared_FLAG;
     }
 
@@ -1107,6 +1111,104 @@
     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)
+    STRING *dest = Parrot_str_copy(interp, str);
+
+    dest->strstart = (char *)dest->strstart + l->bytepos;
+
+    if (r == NULL) {
+        dest->bufused = str->bufused - l->bytepos;
+        dest->strlen  = str->strlen  - l->charpos;
+    }
+    else {
+        dest->bufused = r->bytepos - l->bytepos;
+        dest->strlen  = r->charpos - l->charpos;
+    }
+
+    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;
+}
+
 
 /*
 
@@ -1148,7 +1250,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)) {
@@ -1184,13 +1286,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)
@@ -1207,8 +1311,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;
@@ -1229,7 +1332,7 @@
             (char *)src->strstart + 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;
@@ -1255,7 +1358,7 @@
     ASSERT_ARGS(Parrot_str_chopn)
 
     STRING * const chopped = Parrot_str_copy(interp, s);
-    UINTVAL new_length, uchar_size;
+    UINTVAL new_length;
 
     if (n < 0) {
         new_length = -n;
@@ -1276,23 +1379,23 @@
         return chopped;
     }
 
-    uchar_size      = chopped->bufused / chopped->strlen;
-    chopped->strlen = new_length;
-
     if (chopped->encoding == Parrot_fixed_8_encoding_ptr) {
         chopped->bufused = new_length;
     }
     else if (chopped->encoding == Parrot_ucs2_encoding_ptr) {
+        const UINTVAL uchar_size = chopped->bufused / chopped->strlen;
         chopped->bufused = new_length * uchar_size;
     }
     else {
         String_iter iter;
 
-        ENCODING_ITER_INIT(interp, s, &iter);
-        iter.set_position(interp, &iter, new_length);
+        STRING_ITER_INIT(interp, &iter);
+        STRING_ITER_SET_POSITION(interp, s, &iter, new_length);
         chopped->bufused = iter.bytepos;
     }
 
+    chopped->strlen = new_length;
+
     return chopped;
 }
 
@@ -1863,13 +1966,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;
@@ -1959,17 +2061,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;
@@ -2332,22 +2433,22 @@
 Parrot_str_to_hashval(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
 {
     ASSERT_ARGS(Parrot_str_to_hashval)
-    String_iter iter;
-    UINTVAL     offs;
-    size_t      hashval = interp->hash_seed;
 
-    if (STRING_IS_NULL(s) || !s->strlen)
-        return hashval;
+    size_t hashval = interp->hash_seed;
 
-    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;
+        s->hashval = hashval;
+    }
 
     return hashval;
 }
@@ -2420,11 +2521,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 *)result->strstart;
 
     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) {
@@ -2564,17 +2665,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;
@@ -2584,10 +2685,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);
@@ -2595,11 +2696,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))
@@ -2623,7 +2724,7 @@
                                 pending = 0;
                                 break;
                             }
-                            c = itersrc.get_and_advance(interp, &itersrc);
+                            c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
                         }
                     }
                     if (digcount == 0)
@@ -2634,7 +2735,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;
@@ -2645,7 +2746,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;
@@ -2658,7 +2759,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;
@@ -2672,7 +2773,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;
@@ -2753,7 +2854,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 *)result->strstart)[offs];
@@ -2776,7 +2877,7 @@
         }
 
         PARROT_ASSERT(d < offs);
-        iter.set_and_advance(interp, &iter, r);
+        encoding->iter_set_and_advance(interp, result, &iter, r);
         ++d;
     }
 
@@ -3150,107 +3251,39 @@
 Parrot_str_join(PARROT_INTERP, ARGIN_NULLOK(STRING *j), ARGIN(PMC *ar))
 {
     ASSERT_ARGS(Parrot_str_join)
-    STRING  **chunks;
-    STRING   *res;
-    STRING   *s;
-    char     *pos;
-    const int ar_len       = VTABLE_elements(interp, ar);
-    int       total_length = 0;
-    int       transcoded   = 0;
-    int       i;
-
-    if (ar_len == 0)
-        return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
-
-    if (STRING_IS_NULL(j))
-        j = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
-
-    chunks = (STRING **)Parrot_gc_allocate_fixed_size_storage(interp,
-        ar_len * sizeof (STRING *));
 
-    for (i = 0; i < ar_len; ++i) {
-        STRING *next = VTABLE_get_string_keyed_int(interp, ar, i);
-
-        if (STRING_IS_NULL(next)) {
-            chunks[i] = STRINGNULL;
-            continue;
-        }
-
-        if (next->encoding != j->encoding) {
-            const ENCODING *e = j->encoding;
-
-            string_rep_compatible(interp, next, j, &e);
-            if (e == Parrot_fixed_8_encoding_ptr)
-                e = Parrot_utf8_encoding_ptr;
-            j           = e->to_encoding(interp, j);
-            transcoded  = 1;
-        }
-
-        chunks[i]     = next;
-        total_length += next->bufused;
+    if (STRING_IS_NULL(j)) {
+        PMC *sb = Parrot_pmc_new_init(interp, enum_class_StringBuilder, ar);
+        return VTABLE_get_string(interp, sb);
     }
-
-    /* with the right charset, transcode any strings if necessary */
-    if (transcoded) {
-        const CHARSET  *c = j->charset;
-        const ENCODING *e = j->encoding;
-
-        for (i = 0; i < ar_len; ++i) {
-            STRING *s = chunks[i];
-
-            if (STRING_IS_NULL(s))
-                continue;
-
-            if (s->encoding != e || s->charset != c) {
-                STRING *new_s = e->to_encoding(interp, s);
-                chunks[i]     = new_s;
-                total_length += new_s->bufused - s->bufused;
-            }
+    else {
+        PMC      *sb;
+        STRING   *first;
+        const int count = VTABLE_elements(interp, ar);
+        INTVAL    length, j_length;
+        int       i;
+
+        if (count == 0)
+            return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+
+        first    = VTABLE_get_string_keyed_int(interp, ar, 0);
+        length   = Parrot_str_byte_length(interp, first);
+        j_length = Parrot_str_byte_length(interp, j);
+
+        /* it's an approximiation, but it doesn't hurt */
+        sb       = Parrot_pmc_new_init_int(interp, enum_class_StringBuilder,
+                    (length + j_length) * count);
+
+        VTABLE_push_string(interp, sb, first);
+
+        for (i = 1; i < count; ++i) {
+            VTABLE_push_string(interp, sb, j);
+            VTABLE_push_string(interp, sb,
+                VTABLE_get_string_keyed_int(interp, ar, i));
         }
-    }
-
-    /* add the length of the separator, now that it's transcoded */
-    total_length += j->bufused * ar_len;
-
-    res = Parrot_gc_new_string_header(interp, 0);
-    Parrot_gc_allocate_string_storage(interp, res, total_length);
-
-    res->charset  = j->charset;
-    res->encoding = j->encoding;
 
-    /* Iterate over chunks and append it to res */
-    pos = res->strstart;
-
-    /* Copy first chunk */
-    s = chunks[0];
-    if (!STRING_IS_NULL(s)) {
-        mem_sys_memcopy(pos, s->strstart, s->bufused);
-        pos += s->bufused;
+        return VTABLE_get_string(interp, sb);
     }
-
-    for (i = 1; i < ar_len; ++i) {
-        STRING *next = chunks[i];
-
-        if (STRING_IS_NULL(next))
-            continue;
-
-        mem_sys_memcopy(pos, j->strstart, j->bufused);
-        pos += j->bufused;
-
-        mem_sys_memcopy(pos, next->strstart, next->bufused);
-        pos += next->bufused;
-
-        /* We can consume all buffer and pos will be next-after-end of buffer */
-        PARROT_ASSERT(pos <= res->strstart + Buffer_buflen(res) + 1);
-    }
-
-    res->bufused  = pos - res->strstart;
-    res->strlen = CHARSET_CODEPOINTS(interp, res);
-
-    Parrot_gc_free_fixed_size_storage(interp, ar_len * sizeof (STRING *),
-        chunks);
-
-    return res;
 }
 
 
@@ -3274,8 +3307,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;
@@ -3287,44 +3322,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/gc_massacre/src/string/charset/ascii.c
==============================================================================
--- branches/gc_massacre/src/string/charset/ascii.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/charset/ascii.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 *)dest->strstart;
-    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/gc_massacre/src/string/charset/iso-8859-1.c
==============================================================================
--- branches/gc_massacre/src/string/charset/iso-8859-1.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/charset/iso-8859-1.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/string/charset/unicode.c
==============================================================================
--- branches/gc_massacre/src/string/charset/unicode.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/charset/unicode.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/string/encoding/fixed_8.c
==============================================================================
--- branches/gc_massacre/src/string/encoding/fixed_8.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/encoding/fixed_8.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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))
@@ -369,85 +393,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));
+}
 
 /*
 
@@ -503,9 +547,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/gc_massacre/src/string/encoding/ucs2.c
==============================================================================
--- branches/gc_massacre/src/string/encoding/ucs2.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/encoding/ucs2.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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(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_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 */
 
@@ -323,11 +353,11 @@
         String_iter iter;
         UINTVAL start;
 
-        iter_init(interp, src, &iter);
-        iter.set_position(interp, &iter, offset);
+        STRING_ITER_INIT(interp, &iter);
+        ucs2_iter_set_position(interp, src, &iter, offset);
         start = iter.bytepos;
         return_string->strstart = (char *)return_string->strstart + start;
-        iter.set_position(interp, &iter, offset + count);
+        ucs2_iter_set_position(interp, src, &iter, offset + count);
         return_string->bufused = iter.bytepos - start;
     }
 #endif
@@ -402,7 +432,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.
 
@@ -411,35 +489,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*) i->str->strstart;
+    UChar * const s = (UChar*) str->strstart;
     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.
@@ -449,64 +526,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*) i->str->strstart;
+    UChar * const s = (UChar*) str->strstart;
     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*) s->strstart;
-    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.
 
@@ -515,50 +557,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*) s->strstart;
+    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
 }
@@ -590,9 +634,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/gc_massacre/src/string/encoding/ucs4.c
==============================================================================
--- branches/gc_massacre/src/string/encoding/ucs4.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/encoding/ucs4.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 */
@@ -414,90 +437,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 *) i->str->strstart;
-    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 *) i->str->strstart;
-    size_t   pos = i->bytepos / sizeof (UChar32);
-    s[pos++] = (UChar32) c;
-    ++i->charpos;
-    i->bytepos = pos * sizeof (UChar32);
+    const UChar32 * const s = (const UChar32*) str->strstart;
+    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*) s->strstart;
-    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*) str->strstart;
+    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.
 
@@ -506,9 +554,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);
@@ -519,36 +570,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*) s->strstart;
+    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
 
 /*
 
@@ -577,13 +625,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/gc_massacre/src/string/encoding/utf16.c
==============================================================================
--- branches/gc_massacre/src/string/encoding/utf16.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/encoding/utf16.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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,19 +407,27 @@
 get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_codepoints)
-    String_iter iter;
-    UINTVAL start;
+#if PARROT_HAS_ICU
+    UINTVAL pos = 0, start;
+    const UChar * const s = (UChar*) src->strstart;
     STRING * const return_string = Parrot_str_copy(interp, src);
 
-    iter_init(interp, src, &iter);
-    iter.set_position(interp, &iter, offset);
-    start = iter.bytepos;
-    return_string->strstart = (char *)return_string->strstart + start ;
-    iter.set_position(interp, &iter, offset + count);
-    return_string->bufused = iter.bytepos - start;
+    U16_FWD_N_UNSAFE(s, pos, offset);
+    start = pos * sizeof (UChar);
+    return_string->strstart = (char *)return_string->strstart + start;
+    U16_FWD_N_UNSAFE(s, pos, count);
+    return_string->bufused = pos * sizeof (UChar) - start;
     return_string->strlen = count;
     return_string->hashval = 0;
     return return_string;
+#else
+    UNUSED(src);
+    UNUSED(offset);
+    UNUSED(count);
+
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
 }
 
 
@@ -432,15 +470,24 @@
 codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
-    String_iter iter;
+#if PARROT_HAS_ICU
+    const UChar * const s = (UChar*) src->strstart;
+    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
 }
 
 /*
@@ -461,106 +508,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*) i->str->strstart;
-    UINTVAL pos = i->bytepos / sizeof (UChar);
-    UINTVAL c;
+    ASSERT_ARGS(utf16_iter_get)
+#if PARROT_HAS_ICU
+    const UChar * const s = (UChar*) str->strstart;
+    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*) i->str->strstart;
+    ASSERT_ARGS(utf16_iter_skip)
+#if PARROT_HAS_ICU
+    const UChar * const s = (UChar*) str->strstart;
     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*) str->strstart;
+    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*) i->str->strstart;
+    ASSERT_ARGS(utf16_iter_set_and_advance)
+#if PARROT_HAS_ICU
+    UChar * const s = (UChar*) str->strstart;
     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*) str->strstart;
+    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
@@ -593,9 +718,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/gc_massacre/src/string/encoding/utf8.c
==============================================================================
--- branches/gc_massacre/src/string/encoding/utf8.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/encoding/utf8.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 *)str->strstart + 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 *)str->strstart + 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 *)str->strstart;
+}
+
+/*
+
+=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 *)i->str->strstart + i->bytepos);
+    ASSERT_ARGS(utf8_iter_get_and_advance)
+    const utf8_t *u8ptr = (utf8_t *)((char *)str->strstart + 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,25 +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 *)s->strstart + i->bytepos;
+    ASSERT_ARGS(utf8_iter_set_and_advance)
+    unsigned char * const pos = (unsigned char *)str->strstart + i->bytepos;
     unsigned char * const new_pos = (unsigned char *)utf8_encode(interp, pos, c);
 
     i->bytepos += (new_pos - pos);
-    ++i->charpos;
     /* XXX possible buffer overrun exception? */
-    /* We are finished or still have some data. Exact match on strlen to assert overrun */
-    PARROT_ASSERT((i->charpos == s->strlen)
-                  || (i->bytepos <= Buffer_buflen(s)));
+    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.
@@ -475,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 *)i->str->strstart;
+    ASSERT_ARGS(utf8_iter_set_position)
+    const utf8_t *u8ptr = (const utf8_t *)str->strstart;
 
-    /* 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 *)i->str->strstart;
+    i->charpos = pos;
+    i->bytepos = (const char *)u8ptr - (const char *)str->strstart;
 }
 
 
@@ -515,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)
@@ -525,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;
@@ -544,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;
@@ -685,16 +787,16 @@
     String_iter    iter;
     UINTVAL        start;
 
-    iter_init(interp, src, &iter);
+    STRING_ITER_INIT(interp, &iter);
 
     if (offset)
-        iter.set_position(interp, &iter, offset);
+        utf8_iter_set_position(interp, src, &iter, offset);
 
     start                   = iter.bytepos;
     return_string->strstart = (char *)return_string->strstart + start;
 
     if (count)
-        iter.set_position(interp, &iter, offset + count);
+        utf8_iter_set_position(interp, src, &iter, offset + count);
 
     return_string->bufused  = iter.bytepos - start;
     return_string->strlen   = count;
@@ -751,9 +853,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;
 }
 
@@ -777,29 +879,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.
@@ -825,9 +904,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/gc_massacre/src/string/primitives.c
==============================================================================
--- branches/gc_massacre/src/string/primitives.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/string/primitives.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/src/sub.c
==============================================================================
--- branches/gc_massacre/src/sub.c	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/src/sub.c	Sun Sep  5 13:20:27 2010	(r48799)
@@ -182,7 +182,7 @@
         if (!debug)
             return 0;
         for (i = n = 0; n < sub->seg->base.size; ++i) {
-            op_info_t * const op_info = &interp->op_info_table[*pc];
+            op_info_t * const op_info = sub->seg->op_info_table[*pc];
             opcode_t var_args = 0;
 
             if (i >= debug->base.size)
@@ -234,7 +234,7 @@
     current_annotation = pc - base_pc;
 
     for (i = op = 0; op < debug_size; ++i) {
-        op_info_t * const op_info  = &interp->op_info_table[*base_pc];
+        op_info_t * const op_info  = interp->code->op_info_table[*base_pc];
         opcode_t          var_args = 0;
 
         if (i >= debug_size)

Modified: branches/gc_massacre/t/codingstd/c_macro_args.t
==============================================================================
--- branches/gc_massacre/t/codingstd/c_macro_args.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/codingstd/c_macro_args.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/codingstd/c_operator.t
==============================================================================
--- branches/gc_massacre/t/codingstd/c_operator.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/codingstd/c_operator.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -75,25 +75,37 @@
             $buf = strip_pod($buf);
         }
 
-        # strip ', ", and C comments
+        # strip ', ", and C comments #'
         $buf =~ s{ (?:
-                       (?: (') (?: \\\\ | \\' | [^'] )* (') ) # remove ' string
-                     | (?: (") (?: \\\\ | \\" | [^"] )* (") ) # remove " string
-                     | /(\*) .*? (\*)/                        # remove C comment
+                       (?: (') (?: \\\\ | \\' | [^'] )* (') ) # rm ' string #'
+                     | (?: (") (?: \\\\ | \\" | [^"] )* (") ) # rm " string #"
+                     | /(\*) .*? (\*)/                        # rm C comment
                    )
                 }{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} }, $lines[$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 @comma_space_files;
+    for my $path ( sort keys %comma_space ) {
+        if (my $cnt = scalar  @{ $comma_space{$path} }) {
+            push @comma_space_files, <<"END_ERROR";
+$path [$cnt line@{[ ($cnt >1) ? 's': '' ]}] at :
+@{[ join("\n--\n", @{$comma_space{$path}}) ]}
+END_ERROR
+        }
+    }
+    is(join("\n", at comma_space_files),
+       "",
+       "there should be one space or a newline after a comma");
 }
 
 # Local Variables:

Modified: branches/gc_massacre/t/codingstd/c_todo.t
==============================================================================
--- branches/gc_massacre/t/codingstd/c_todo.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/codingstd/c_todo.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -60,7 +60,7 @@
 
 my $num_failed_files = scalar keys %failed_files;
 TODO: {
-    local $TODO = 'some todos remain';
+    local $TODO = scalar(@fixme) . ' todos remain';
 
 ok( !scalar(@fixme), 'FIXME strings' )
     or diag( "FIXME strings found in "

Modified: branches/gc_massacre/t/codingstd/perlcritic.t
==============================================================================
--- branches/gc_massacre/t/codingstd/perlcritic.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/codingstd/perlcritic.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/codingstd/pir_code_coda.t
==============================================================================
--- branches/gc_massacre/t/codingstd/pir_code_coda.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/codingstd/pir_code_coda.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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

Added: branches/gc_massacre/t/codingstd/pmc_docs.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/t/codingstd/pmc_docs.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -0,0 +1,143 @@
+#! perl
+# Copyright (C) 2006-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+use lib qw( . lib ../lib ../../lib );
+use Test::More;
+use Parrot::Config qw(%PConfig);
+use Parrot::Distribution;
+use Parrot::Headerizer;
+
+=head1 NAME
+
+t/codingstd/pmc_docs.t - checks for missing function documentation
+
+=head1 SYNOPSIS
+
+    # test all files
+    % prove t/codingstd/pmc_docs.t
+
+    # test specific files
+    % perl t/codingstd/pmc_docs.t src/foo.pmc src/bar.pmc
+
+=head1 DESCRIPTION
+
+Checks that all PMC source files have documentation for each function
+declared.
+
+=cut
+
+my $DIST = Parrot::Distribution->new;
+my $headerizer = Parrot::Headerizer->new;
+
+my @files = @ARGV ? @ARGV :
+    map {s/^$PConfig{build_dir}\///; $_}
+    map {s/\\/\//g; $_}
+    map {$_->path} $DIST->pmc_source_files();
+
+plan tests => scalar @files;
+
+my %todos;
+while (<DATA>) {
+    next if /^#/;
+    next if /^\s*$/;
+    chomp;
+    $todos{$_} = 1;
+}
+
+my %all_files = ();
+
+# Traverse each file, analyzing each function declaration therein, then
+# post results in %all_files.
+
+foreach my $path (@files) {
+    my $buf = $DIST->slurp($path);
+    my @function_decls = $headerizer->extract_function_declarations($buf);
+
+    # We start out asserting that every file will have documentation for each
+    # of its function declarations.  We then seek to contradict this
+    # assertion.
+
+    my %this_file = ( overall => 1 );
+
+    for my $function_decl (@function_decls) {
+        my $escaped_decl
+            = $headerizer->generate_documentation_signature($function_decl);
+        $this_file{$function_decl}{esc} = $escaped_decl;
+
+        if ( $buf =~ m/^\Q$escaped_decl\E$(.*?)^=cut/sm ) {
+            my $docs = $1;
+            $docs =~ s/\s//g;
+            if ($docs eq '') { # boilerplate only
+                $this_file{$function_decl}{status} = 0;
+                $this_file{overall} = 0;
+            }
+            else { # documentation found
+                $this_file{$function_decl}{status} = 1;
+            }
+        }
+        else { # no documentation found
+            $this_file{$function_decl}{status} = undef;
+            $this_file{overall} = 0;
+        }
+    }
+    $all_files{$path} = \%this_file;
+}
+
+foreach my $path (sort keys %all_files) {
+    TODO: {
+        local $TODO = 'Missing function docs' if $todos{$path};
+        ok( $all_files{$path}{overall}, $path )
+            or diag( diagnosis( \%all_files, $path ) );
+    }
+}
+
+sub diagnosis {
+    my ($all_files_ref, $path) = @_;
+    my $missing = '';
+    my $boilerplate = '';
+    my %this_file = %{ $all_files_ref->{$path} };
+    delete $this_file{overall};
+    foreach my $decl ( sort keys %this_file ) {
+        if ( ! defined $this_file{$decl}{status} ) {
+            $missing .= "$decl\n";
+            $missing .= "Need:\n";
+            $missing .= "$this_file{$decl}{esc}\n\n";
+        }
+        elsif ( ! $this_file{$decl}{status} ) {
+            $boilerplate .= "$this_file{$decl}{esc}\n\n";
+        }
+        else {
+            # docs!
+        }
+    }
+    my $diagnosis = "$path\n";
+    $diagnosis .= "Undocumented functions:\n\n$missing" if $missing;
+    $diagnosis .= "Boilerplate only:\n$boilerplate" if $boilerplate;
+    return "$diagnosis";
+}
+
+__DATA__
+src/pmc/bigint.pmc
+src/pmc/callcontext.pmc
+src/pmc/class.pmc
+src/pmc/complex.pmc
+src/pmc/coroutine.pmc
+src/pmc/eval.pmc
+src/pmc/imageio.pmc
+src/pmc/namespace.pmc
+src/pmc/nci.pmc
+src/pmc/object.pmc
+src/pmc/sub.pmc
+src/pmc/threadinterpreter.pmc
+src/pmc/unmanagedstruct.pmc
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/gc_massacre/t/compilers/imcc/syn/const.t
==============================================================================
--- branches/gc_massacre/t/compilers/imcc/syn/const.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/compilers/imcc/syn/const.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -9,7 +9,7 @@
 
 use Test::More;
 use Parrot::Config;
-use Parrot::Test tests => 34;
+use Parrot::Test tests => 35;
 
 pir_output_is( <<'CODE', <<'OUT', "globalconst 1" );
 
@@ -592,6 +592,17 @@
 12
 OUT
 
+pir_error_output_like( <<'CODE', <<'OUT', "" );
+.sub 'bus_error'
+    .local string hello
+    hello = "'Allo, 'allo, 'allo."
+    .const string hello = "Hello, Polly."
+    say hello
+.end
+CODE
+/^error:imcc:syntax error, duplicated IDENTIFIER/
+OUT
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/gc_massacre/t/compilers/pge/p5regex/p5rx.t
==============================================================================
--- branches/gc_massacre/t/compilers/pge/p5regex/p5rx.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/compilers/pge/p5regex/p5rx.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,7 +1,6 @@
 #!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
-# vi: ft=pir
 
 =head1 NAME
 

Modified: branches/gc_massacre/t/dynoplibs/debug.t
==============================================================================
--- branches/gc_massacre/t/dynoplibs/debug.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/dynoplibs/debug.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -106,7 +106,7 @@
 called from Sub 'parrot;Test1;main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
 OUTPUT
 
-pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - fetch of unknown lexical" );
+pir_error_output_like( <<'CODE', <<'OUTPUT', "debug backtrace - division by 0" );
 .namespace ["Test2"]
 .sub main
     print "ok 1\n"
@@ -115,13 +115,14 @@
 .end
 .sub foo :lex
     print "ok 2\n"
-    find_lex $P0, "nosuchlex"
+    $I1 = 0
+    div $I2, $I2, 0
     print "not ok 3\n"
 .end
 CODE
 /^ok 1
 ok 2
-Lexical 'nosuchlex' not found
+Divide by zero
 current instr.: 'parrot;Test2;foo' pc (\d+|-1) \(.*?:(\d+|-1)\)
 called from Sub 'parrot;Test2;main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
 OUTPUT

Modified: branches/gc_massacre/t/dynoplibs/deprecated.t
==============================================================================
--- branches/gc_massacre/t/dynoplibs/deprecated.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/dynoplibs/deprecated.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -16,7 +16,7 @@
 
 =cut
 
-.const int TESTS = 105
+.const int TESTS = 13
 
 .loadlib 'deprecated_ops'
 
@@ -31,18 +31,19 @@
     test_exchange_n()
     test_clears()
     test_exchange_s()
+    test_clearp()
 .end
 
 .sub 'test_exchange_i'
     $I10 = 10
     $I20 = 20
     exchange $I10, $I20
-    is($I10, 20, 'exchange - first operand ok')
-    is($I20, 10, 'exchange - second operand ok')
+    is($I10, 20, 'exchange i - first operand ok')
+    is($I20, 10, 'exchange i - second operand ok')
 
     $I30 = 30
     exchange $I30, $I30
-    is($I30, 30, 'exchange - reflexive')
+    is($I30, 30, 'exchange i - reflexive')
 .end
 
 
@@ -82,38 +83,44 @@
 
     cleari
 
-    is($I0, 0, 'cleari - $I0 cleared')
-    is($I1, 0, 'cleari - $I1 cleared')
-    is($I2, 0, 'cleari - $I2 cleared')
-    is($I3, 0, 'cleari - $I3 cleared')
-    is($I4, 0, 'cleari - $I4 cleared')
-    is($I5, 0, 'cleari - $I5 cleared')
-    is($I6, 0, 'cleari - $I6 cleared')
-    is($I7, 0, 'cleari - $I7 cleared')
-    is($I8, 0, 'cleari - $I8 cleared')
-    is($I9, 0, 'cleari - $I9 cleared')
-    is($I10, 0, 'cleari - $I10 cleared')
-    is($I11, 0, 'cleari - $I11 cleared')
-    is($I12, 0, 'cleari - $I12 cleared')
-    is($I13, 0, 'cleari - $I13 cleared')
-    is($I14, 0, 'cleari - $I14 cleared')
-    is($I15, 0, 'cleari - $I15 cleared')
-    is($I16, 0, 'cleari - $I16 cleared')
-    is($I17, 0, 'cleari - $I17 cleared')
-    is($I18, 0, 'cleari - $I18 cleared')
-    is($I19, 0, 'cleari - $I19 cleared')
-    is($I20, 0, 'cleari - $I20 cleared')
-    is($I21, 0, 'cleari - $I21 cleared')
-    is($I22, 0, 'cleari - $I22 cleared')
-    is($I23, 0, 'cleari - $I23 cleared')
-    is($I24, 0, 'cleari - $I24 cleared')
-    is($I25, 0, 'cleari - $I25 cleared')
-    is($I26, 0, 'cleari - $I26 cleared')
-    is($I27, 0, 'cleari - $I27 cleared')
-    is($I28, 0, 'cleari - $I28 cleared')
-    is($I29, 0, 'cleari - $I29 cleared')
-    is($I30, 0, 'cleari - $I30 cleared')
-    is($I31, 0, 'cleari - $I31 cleared')
+    $S0 = 'NO'
+
+    ne $I0, 0, result
+    ne $I1, 0, result
+    ne $I2, 0, result
+    ne $I3, 0, result
+    ne $I4, 0, result
+    ne $I5, 0, result
+    ne $I6, 0, result
+    ne $I7, 0, result
+    ne $I8, 0, result
+    ne $I9, 0, result
+    ne $I10, 0, result
+    ne $I11, 0, result
+    ne $I12, 0, result
+    ne $I13, 0, result
+    ne $I14, 0, result
+    ne $I15, 0, result
+    ne $I16, 0, result
+    ne $I17, 0, result
+    ne $I18, 0, result
+    ne $I19, 0, result
+    ne $I20, 0, result
+    ne $I21, 0, result
+    ne $I22, 0, result
+    ne $I23, 0, result
+    ne $I24, 0, result
+    ne $I25, 0, result
+    ne $I26, 0, result
+    ne $I27, 0, result
+    ne $I28, 0, result
+    ne $I29, 0, result
+    ne $I30, 0, result
+    ne $I31, 0, result
+
+    $S0 = 'YES'
+  result:
+    is($S0, 'YES', 'cleari')
 .end
 
 .sub test_clearn
@@ -150,49 +157,56 @@
     set     $N30, 547972.0
     set     $N31, 547972.0
     clearn
-    is( $N0, "0", 'clearn' )
-    is( $N1, "0", 'clearn' )
-    is( $N2, "0", 'clearn' )
-    is( $N3, "0", 'clearn' )
-    is( $N4, "0", 'clearn' )
-    is( $N5, "0", 'clearn' )
-    is( $N6, "0", 'clearn' )
-    is( $N7, "0", 'clearn' )
-    is( $N8, "0", 'clearn' )
-    is( $N9, "0", 'clearn' )
-    is( $N10, "0", 'clearn' )
-    is( $N11, "0", 'clearn' )
-    is( $N12, "0", 'clearn' )
-    is( $N13, "0", 'clearn' )
-    is( $N14, "0", 'clearn' )
-    is( $N15, "0", 'clearn' )
-    is( $N16, "0", 'clearn' )
-    is( $N17, "0", 'clearn' )
-    is( $N18, "0", 'clearn' )
-    is( $N19, "0", 'clearn' )
-    is( $N20, "0", 'clearn' )
-    is( $N21, "0", 'clearn' )
-    is( $N22, "0", 'clearn' )
-    is( $N23, "0", 'clearn' )
-    is( $N24, "0", 'clearn' )
-    is( $N25, "0", 'clearn' )
-    is( $N26, "0", 'clearn' )
-    is( $N27, "0", 'clearn' )
-    is( $N28, "0", 'clearn' )
-    is( $N29, "0", 'clearn' )
-    is( $N30, "0", 'clearn' )
-    is( $N31, "0", 'clearn' )
+
+    $I0 = 0
+
+    ne $N0, 0.0, result
+    ne $N1, 0.0, result
+    ne $N2, 0.0, result
+    ne $N3, 0.0, result
+    ne $N4, 0.0, result
+    ne $N5, 0.0, result
+    ne $N6, 0.0, result
+    ne $N7, 0.0, result
+    ne $N8, 0.0, result
+    ne $N9, 0.0, result
+    ne $N10, 0.0, result
+    ne $N11, 0.0, result
+    ne $N12, 0.0, result
+    ne $N13, 0.0, result
+    ne $N14, 0.0, result
+    ne $N15, 0.0, result
+    ne $N16, 0.0, result
+    ne $N17, 0.0, result
+    ne $N18, 0.0, result
+    ne $N19, 0.0, result
+    ne $N20, 0.0, result
+    ne $N21, 0.0, result
+    ne $N22, 0.0, result
+    ne $N23, 0.0, result
+    ne $N24, 0.0, result
+    ne $N25, 0.0, result
+    ne $N26, 0.0, result
+    ne $N27, 0.0, result
+    ne $N28, 0.0, result
+    ne $N29, 0.0, result
+    ne $N30, 0.0, result
+    ne $N31, 0.0, result
+
+    $I0 = 1
+  result:
+    is($I0, 1, 'clearn')
 .end
 
 .sub test_exchange_n
     set $N1, 1.234560
     set $N2, 9.876540
     exchange $N1, $N2
-    is( $N1, "9.87654", 'exchange' )
-    is( $N2, "1.23456", 'exchange' )
+    is( $N1, "9.87654", 'exchange n' )
+    is( $N2, "1.23456", 'exchange n' )
     set $N3, -100.200300
     exchange $N3, $N3
-    is( $N3, "-100.2003", 'exchange' )
+    is( $N3, "-100.2003", 'exchange n' )
 .end
 
 .sub test_clears
@@ -229,50 +243,85 @@
     set $S30, "BOO 30"
     set $S31, "BOO 31"
     clears
-    is( $S0, "", '' )
-    is( $S1, "", '' )
-    is( $S2, "", '' )
-    is( $S3, "", '' )
-    is( $S4, "", '' )
-    is( $S5, "", '' )
-    is( $S6, "", '' )
-    is( $S7, "", '' )
-    is( $S8, "", '' )
-    is( $S9, "", '' )
-    is( $S10, "", '' )
-    is( $S11, "", '' )
-    is( $S12, "", '' )
-    is( $S13, "", '' )
-    is( $S14, "", '' )
-    is( $S15, "", '' )
-    is( $S16, "", '' )
-    is( $S17, "", '' )
-    is( $S18, "", '' )
-    is( $S19, "", '' )
-    is( $S20, "", '' )
-    is( $S21, "", '' )
-    is( $S22, "", '' )
-    is( $S23, "", '' )
-    is( $S24, "", '' )
-    is( $S25, "", '' )
-    is( $S26, "", '' )
-    is( $S27, "", '' )
-    is( $S28, "", '' )
-    is( $S29, "", '' )
-    is( $S30, "", '' )
-    is( $S31, "", '' )
+
+    $I0 = 0
+
+    unless_null $S0, result
+    unless_null $S1, result
+    unless_null $S2, result
+    unless_null $S3, result
+    unless_null $S4, result
+    unless_null $S5, result
+    unless_null $S6, result
+    unless_null $S7, result
+    unless_null $S8, result
+    unless_null $S9, result
+    unless_null $S10, result
+    unless_null $S11, result
+    unless_null $S12, result
+    unless_null $S13, result
+    unless_null $S14, result
+    unless_null $S15, result
+    unless_null $S16, result
+    unless_null $S17, result
+    unless_null $S18, result
+    unless_null $S19, result
+    unless_null $S20, result
+    unless_null $S21, result
+    unless_null $S22, result
+    unless_null $S23, result
+    unless_null $S24, result
+    unless_null $S25, result
+    unless_null $S26, result
+    unless_null $S27, result
+    unless_null $S28, result
+    unless_null $S29, result
+    unless_null $S30, result
+    unless_null $S31, result
+
+    $I0 = 1
+  result:
+    is($I0, 1, 'clears')
 .end
 
 .sub test_exchange_s
     set $S0, "String #0"
     set $S1, "String #1"
     exchange $S0, $S1
-    is( $S0, "String #1", 'exchange' )
-    is( $S1, "String #0", 'exchange' )
+    is( $S0, "String #1", 'exchange s' )
+    is( $S1, "String #0", 'exchange s' )
 
     set $S2, "String #2"
     exchange $S2, $S2
-    is( $S2, "String #2", 'exchange' )
+    is( $S2, "String #2", 'exchange s' )
+.end
+
+.sub test_clearp
+    $P0 = new ['Integer']
+    $P1 = new ['Integer']
+    $P2 = new ['Integer']
+    $P3 = new ['Integer']
+    $P4 = new ['Integer']
+    $P5 = new ['Integer']
+    $P6 = new ['Integer']
+    $P7 = new ['Integer']
+    $P8 = new ['Integer']
+    $P9 = new ['Integer']
+    clearp
+    $I0 = 0
+    unless_null $P0, result
+    unless_null $P1, result
+    unless_null $P2, result
+    unless_null $P3, result
+    unless_null $P4, result
+    unless_null $P5, result
+    unless_null $P6, result
+    unless_null $P7, result
+    unless_null $P8, result
+    unless_null $P9, result
+    $I0 = 1
+  result:
+    is($I0, 1, 'clearp')
 .end
 
 # Local Variables:

Modified: branches/gc_massacre/t/dynoplibs/trans-infnan.t
==============================================================================
--- branches/gc_massacre/t/dynoplibs/trans-infnan.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/dynoplibs/trans-infnan.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/dynoplibs/trans.t
==============================================================================
--- branches/gc_massacre/t/dynoplibs/trans.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/dynoplibs/trans.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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
 

Deleted: branches/gc_massacre/t/examples/japh.t
==============================================================================
--- branches/gc_massacre/t/examples/japh.t	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,56 +0,0 @@
-#!perl
-# Copyright (C) 2005-2009, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Test::More;
-use Parrot::Test tests => 5;
-use Parrot::Config;
-
-=head1 NAME
-
-t/examples/japh.t - Test some JAPHs
-
-=head1 SYNOPSIS
-
-    % prove t/examples/japh.t
-
-=head1 DESCRIPTION
-
-Test the JAPHs in 'examples/japh'.
-For now there are only JAPHs in PASM.
-
-Some JAPH are not really suitable for inclusion in automated tests.
-
-=head1 TODO
-
-Get the TODO JAPHs working or decide that they are not suitable for testing.
-
-=cut
-
-# known reasons for failure
-my %todo = ();
-if ( defined( $ENV{TEST_PROG_ARGS}) && $ENV{TEST_PROG_ARGS} =~ /--runcore=jit/ ) {
-    $todo{4} = 'broken with JIT';
-}
-
-# run all tests and tell about todoness
-foreach ( 1..5 ) {
-    my $pasm_fn = "examples/japh/japh$_.pasm";
-    unless ( -e $pasm_fn ) {
-        pass("deleted");
-        next;
-    }
-
-    my @todo = $todo{$_} ? ( todo => $todo{$_} ) : ();
-    example_output_is( $pasm_fn, "Just another Parrot Hacker\n", @todo );
-}
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Copied and modified: branches/gc_massacre/t/examples/pgegrep.t (from r48798, branches/gc_massacre/t/tools/pgegrep.t)
==============================================================================
--- branches/gc_massacre/t/tools/pgegrep.t	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/t/examples/pgegrep.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -8,11 +8,11 @@
 
 =head1 SYNOPSIS
 
-    % prove t/tools/pgegrep.t
+    % prove t/examples/tools/pgegrep.t
 
 =head1 DESCRIPTION
 
-Tests the features of of the C<pgegrep> utility.
+Tests the features of of the C<pgegrep> utility (see F<examples/pgegrep>).
 
 =cut
 
@@ -34,7 +34,7 @@
     my ($options, $snippet, $desc)  = @_;
 
     my $PARROT  = ".$PConfig{slash}$PConfig{test_prog}";
-    my $pgegrep = File::Spec->catfile( qw{. tools util pgegrep} );
+    my $pgegrep = File::Spec->catfile( qw{. examples tools pgegrep} );
     my $out     = `$PARROT $pgegrep $options`;
 
     like( $out, $snippet, $desc );

Modified: branches/gc_massacre/t/examples/pir.t
==============================================================================
--- branches/gc_massacre/t/examples/pir.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/examples/pir.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -191,7 +191,9 @@
 # TODO currently broken
 # $expected{'quine_ord.pir'} = Parrot::Test::slurp_file("examples/pir/quine_ord.pir");
 
-my %skips;
+my %skips = (
+    'make_hello_pbc.pir' => [ 1, "PackfileRawSegment no longer valid for bytecode" ],
+);
 
 while ( my ( $example, $expected ) = each %expected ) {
     my $skip = $skips{$example};

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

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

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

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

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

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

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

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

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

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

Deleted: branches/gc_massacre/t/native_pbc/testdata/annotations.pir
==============================================================================
--- branches/gc_massacre/t/native_pbc/testdata/annotations.pir	Sun Sep  5 13:20:27 2010	(r48798)
+++ /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/gc_massacre/t/oo/isa.t
==============================================================================
--- branches/gc_massacre/t/oo/isa.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/oo/isa.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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']
 

Modified: branches/gc_massacre/t/op/calling.t
==============================================================================
--- branches/gc_massacre/t/op/calling.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/op/calling.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 
 use Test::More;
-use Parrot::Test tests => 98;
+use Parrot::Test tests => 99;
 
 =head1 NAME
 
@@ -2554,6 +2554,48 @@
 done
 OUTPUT
 
+pir_output_is( <<'CODE', <<'OUTPUT', "handling of slurpy after optional, TT #1733" );
+
+# Lua calling convention scheme
+
+# f() has 2 known parameters
+.sub 'f'
+    .param pmc p1 :optional
+    .param int has_p1 :opt_flag
+    .param pmc p2 :optional
+    .param int has_p2 :opt_flag
+    .param pmc extra :slurpy
+    unless has_p1 goto L1
+    say p1
+    unless has_p2 goto L1
+    say p2
+    $P0 = iter extra
+  L2:
+    unless $P0 goto L1
+    $P1 = shift $P0
+    say $P1
+    goto L2
+  L1:
+.end
+
+.sub 'main' :main
+    $P1 = box "p1"
+    $P2 = box "p2"
+    $P3 = box "p3"
+    f($P1, $P2, $P3)
+    f($P1, $P2)
+    f($P1)
+.end
+
+CODE
+p1
+p2
+p3
+p1
+p2
+p1
+OUTPUT
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/gc_massacre/t/op/cmp-nonbranch.t
==============================================================================
--- branches/gc_massacre/t/op/cmp-nonbranch.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/op/cmp-nonbranch.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -17,7 +17,7 @@
 =cut
 
 
-.const int TESTS = 93
+.const int TESTS = 96
 
 .macro EXP()
   exp_nok:
@@ -66,6 +66,7 @@
     'iseq'()
     'isne'()
     'cmp'()
+    'cmp_string_null'()
     'trac#11'()
 .end
 
@@ -1214,6 +1215,24 @@
 .end
 
 
+.sub 'cmp_string_null'
+    .local string s1, s2
+    .local int r
+    null s1
+    s2 = 'hello'
+
+    r = cmp s1, s2
+    is(r, -1, 'cmp snull, snotnull')
+
+    r = cmp s2, s1
+    is(r, 1, 'cmp snotnull, snull')
+
+    null s2
+    r = cmp s2, s1
+    is(r, 0, 'cmp snull, snull')
+.end
+
+
 .sub 'trac#11'
     $P0 = new 'String'
     assign $P0, 'foo'

Added: branches/gc_massacre/t/op/gc-active-buffers.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/t/op/gc-active-buffers.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 and modified: branches/gc_massacre/t/op/gc-leaky-box.t (from r48798, branches/gc_massacre/t/op/gc-leaky.t)
==============================================================================
--- branches/gc_massacre/t/op/gc-leaky.t	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/t/op/gc-leaky-box.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -4,16 +4,16 @@
 
 =head1 NAME
 
-t/op/gc-leaky.t - test for memory leaks in the Garbage Collector
+t/op/gc-leaky-box.t - test for memory leaks in the Garbage Collector
 
 =head1 SYNOPSIS
 
-    % prove t/op/gc-leaky.t
+    % 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++ . More tests are needed to close
+been created. Test suggested by chromatic++ . Also includes tests for
 TT1465 - http://trac.parrot.org/parrot/ticket/1465 .
 
 =cut
@@ -25,7 +25,7 @@
 .sub _main :main
     .include 'test_more.pir'
 
-    plan(2)
+    plan(3)
 
     $S0 = interpinfo .INTERPINFO_GC_SYS_NAME
     if $S0 == "inf" goto dont_run_hanging_tests
@@ -36,34 +36,38 @@
   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 > 1e7 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)
+  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:

Added: branches/gc_massacre/t/op/gc-leaky-call.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/t/op/gc-leaky-call.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/op/gc-leaky.t
==============================================================================
--- branches/gc_massacre/t/op/gc-leaky.t	Sun Sep  5 13:20:27 2010	(r48798)
+++ /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 > 1e7 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/gc_massacre/t/op/integer.t
==============================================================================
--- branches/gc_massacre/t/op/integer.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/op/integer.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -16,7 +16,7 @@
 
 =cut
 
-.const int TESTS = 152
+.const int TESTS = 153
 
 .sub 'test' :main
     .include 'test_more.pir'
@@ -48,6 +48,7 @@
     test_sub_i_i()
     test_set_n()
     test_neg()
+    test_negate_max_integer()
     test_mul_i_i()
     test_null()
     test_div_i_i_by_zero()
@@ -745,6 +746,23 @@
     is($I0, -3, 'neg_i')
 .end
 
+# Test to ensure that the negative of the maximum integer is equal to the
+# minimum integer + 1. This should be true because we are assuming a
+# two's-complement machine.
+
+.loadlib 'sys_ops'
+.include 'sysinfo.pasm'
+
+.sub test_negate_max_integer
+    .local int max
+    .local int min
+    max = sysinfo .SYSINFO_PARROT_INTMAX
+    neg max
+    min = sysinfo .SYSINFO_PARROT_INTMIN
+    inc min
+    is(max, min)
+.end
+
 .sub 'test_mul_i_i'
     $I0 = 3
     $I1 = 4

Modified: branches/gc_massacre/t/op/lexicals.t
==============================================================================
--- branches/gc_massacre/t/op/lexicals.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/op/lexicals.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -840,7 +840,7 @@
 /Null PMC access/
 OUT
 
-pir_error_output_like( <<'CODE', <<'OUTPUT', 'get non existing' );
+pir_output_is( <<'CODE', <<'OUTPUT', 'get undefined lexical' );
 .sub "main" :main
     .lex 'a', $P0
     foo()
@@ -852,9 +852,14 @@
 .sub bar   :outer('foo')
     .lex 'c', $P0
     $P2 = find_lex 'no_such'
+    if null $P2 goto ok
+    print "Undefined name not NULL\n"
+    end
+ok:
+    print "ok\n"
 .end
 CODE
-/Lexical 'no_such' not found/
+ok
 OUTPUT
 
 pir_output_is( <<'CODE', <<'OUTPUT', 'find_name on lexicals' );

Modified: branches/gc_massacre/t/op/string.t
==============================================================================
--- branches/gc_massacre/t/op/string.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/op/string.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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()
@@ -121,9 +124,11 @@
     test_find_encoding()
     test_assign()
     assign_and_globber()
+    split_on_null_string()
     split_on_empty_string()
     split_on_non_empty_string()
     test_join()
+    test_join_many()
     eq_addr_or_ne_addr()
     test_if_null_s_ic()
     test_upcase()
@@ -307,26 +312,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
@@ -1388,6 +1428,28 @@
     is( $S5, "JAPH", 'assign & globber' )
 .end
 
+.sub split_on_null_string
+    .local string s, delim
+    .local pmc p
+    .local int i
+    null s
+    null delim
+    split p, s, delim
+    i = isnull p
+    is(i, 1, 'split on null string and delim')
+
+    s = 'foo'
+    split p, s, delim
+    i = isnull p
+    is(i, 1, 'split on null delim')
+
+    null s
+    delim = 'bar'
+    split p, s, delim
+    i = isnull p
+    is(i, 1, 'split on null string')
+.end
+
 .sub split_on_empty_string
     split $P1, "", ""
     set $I1, $P1
@@ -1437,6 +1499,21 @@
     is( $S0, "a--b", 'join' )
 .end
 
+.sub 'test_join_many'
+    $P1 = new ['ResizablePMCArray']
+    $I0 = 0
+  loop:
+    unless $I0 < 20000 goto done
+    $P2 = new ['Integer']
+    assign $P2, $I0
+    push $P1, $P2
+    inc $I0
+    goto loop
+  done:
+    $S0 = join ' ', $P1
+    ok("Join of many temporary strings doesn't crash")
+.end
+
 # join: get_string returns a null string --------
 .namespace ["Foo5"]
     .sub get_string :vtable :method

Modified: branches/gc_massacre/t/perl/Parrot_Test.t
==============================================================================
--- branches/gc_massacre/t/perl/Parrot_Test.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/perl/Parrot_Test.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -285,6 +285,10 @@
 OUTPUT
 test_test($desc);
 
+#
+# incorporate changes in Test::Builder after Version 0.94
+#
+if ($Test::Builder::VERSION <= eval '0.94') {
 $desc = 'pir_error_output_like: todo';
 $line = line_num(+22);
 my $location;
@@ -321,6 +325,34 @@
 else {
     test_test($desc);
 }
+}  #end of test for Test::Builder 0.94 or before
+#
+# Test for TEST::Builder after Version 0.94
+#
+else {
+$line = line_num(+14);
+my $location = "at $0 line $line";
+$desc = 'pir_output_like: todo';
+test_out("not ok 1 - $desc # TODO foo");
+$err = <<"EOUT";
+#   Failed (TODO) test '$desc'
+#   $location.
+#                   'foo
+# '
+#     doesn't match '/bar/
+# '
+EOUT
+chomp $err;
+test_out($err);
+pir_output_like( <<'CODE', <<"OUTPUT", $desc, todo => 'foo' );
+.sub 'test' :main
+    print "foo\n"
+.end
+CODE
+/bar/
+OUTPUT
+    test_test($desc);
+}
 
 ##### PIR-to-PASM output test functions #####
 

Modified: branches/gc_massacre/t/pmc/bigint.t
==============================================================================
--- branches/gc_massacre/t/pmc/bigint.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/bigint.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -20,7 +20,7 @@
 
     .include 'test_more.pir'
 
-    plan(34)
+    plan(36)
     check_libgmp_good()
 
     set_and_get()
@@ -28,9 +28,11 @@
     subtraction()
     multiplication()
     division()
-    division_by_zero()
     negation()
+    division_by_zero()
+    negate_min_integer()
     absolute_value()
+    absolute_min_integer()
     overflow_coercion()
     interface()
     boolean()
@@ -75,12 +77,12 @@
 
 NoLibGMP:
     diag( 'No BigInt Lib configured' )
-    skip(34)
+    skip(36)
     exit 0
 
 OldLibGMP:
     diag( 'Buggy GMP version [', $S3, '] with huge digit multiply - please upgrade' )
-    skip(34)
+    skip(36)
     exit 0
 
 ret:
@@ -504,6 +506,23 @@
     ok($I1, 'negation')
 .end
 
+.loadlib 'sys_ops'
+.include 'sysinfo.pasm'
+
+.sub negate_min_integer
+    .local int max
+    .local int min
+    .local pmc max_1
+    .local pmc neg_min
+    max = sysinfo .SYSINFO_PARROT_INTMAX
+    min = sysinfo .SYSINFO_PARROT_INTMIN
+    max_1 = box max
+    inc max_1
+    neg_min = box min
+    neg neg_min                         # Use 1-operand form of neg.
+    is(neg_min, max_1, 'negate minimum native integer')
+.end
+
 .sub absolute_value
     $P0 = new ['BigInt']
     $P0 = '-1230000000000000000000'
@@ -522,6 +541,21 @@
     is($S0,'1230000000000000000000','... and in-place works too')
 .end
 
+.sub absolute_min_integer
+    .local int max
+    .local int min
+    .local pmc max_1
+    .local pmc neg_min
+    .local pmc result
+    max = sysinfo .SYSINFO_PARROT_INTMAX
+    min = sysinfo .SYSINFO_PARROT_INTMIN
+    max_1 = box max
+    inc max_1
+    neg_min = box min
+    result = abs neg_min                # Use 2-operand form of abs.
+    is(result, max_1, 'absolute minimum native integer')
+.end
+
 .sub overflow_coercion
     # check libgmp included in Parrot build
     $P0 = getinterp
@@ -745,7 +779,7 @@
     ne $S0, $S6, k25
     inc $I1
 k25:
-    todo( $I1, 'integer negation of MinInt converts MaxInt+1 to BigInt', 'TT #1616')
+    ok($I1, 'integer negation of MinInt converts to BigInt')
 
     $I1 = 0
     $P0 = new ['Integer']
@@ -760,7 +794,7 @@
     ne $S0, $S6, k27
     inc $I1
 k27:
-    todo( $I1, 'integer absolute-value of MinInt converts MaxInt+1 to BigInt', 'TT #1616')
+    ok($I1, 'integer abs(MinInt) converts to BigInt')
 
     $P0 = new ['Integer']
     $P0 = $I3

Modified: branches/gc_massacre/t/pmc/exception.t
==============================================================================
--- branches/gc_massacre/t/pmc/exception.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/exception.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -16,42 +16,137 @@
 
 =cut
 
+.include 'except_types.pasm'
+
 .sub main :main
     .include 'test_more.pir'
-    plan(20)
+    plan(43)
     test_bool()
     test_int()
+    test_integer_keyed()
+    test_string_keyed()
     test_attrs()
     test_attributes()
+    test_setattribute_wrong()
+    test_birthtime()
+    test_handler_ctx()
     test_push_pop_eh()
     test_push_pop_eh_long()
     test_push_eh_throw()
     test_die()
     test_throw_obj()
+    test_clone()
+    test_throw_clone()
+    test_backtrace()
+    test_annotations()
 .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_string_keyed
+    .local pmc ex, eh
+    .local string value
+    .const string TEST_VALUE = 'fubar'
+    ex = new ['Exception']
+    ex['message'] = TEST_VALUE
+    value = ex['message']
+    is(value, TEST_VALUE, 'set/get string_keyed')
+.end
+
+
+.sub setattr_int
+    .param pmc obj
+    .param string attrname
+    .param int value
+    $P0 = new ['Integer'], value
+    setattribute obj, attrname, $P0
+.end
+
+.sub setattr_string
+    .param pmc obj
+    .param string attrname
+    .param string value
+    $P0 = new ['String']
+    $P0 = value
+    setattribute obj, attrname, $P0
+.end
+
+.sub gotattr_int
+    .param pmc obj
+    .param string attrname
+    .param int checkvalue
+
+    $S0 = 'got ' . attrname
+    $P1 = getattribute obj, attrname
+    $I1 = $P1
+    is($I1, checkvalue, $S0)
 .end
 
+.sub gotattr_string
+    .param pmc obj
+    .param string attrname
+    .param string checkvalue
+
+    $S0 = 'got ' . attrname
+    $P1 = getattribute obj, attrname
+    $S1 = $P1
+    is($S1, checkvalue, $S0)
+.end
+
+
 .sub test_attrs
     $P0 = new 'ExceptionHandler'
     set_addr $P0, _handler
@@ -68,53 +163,114 @@
     getattribute $P4, $P0, 'severity'
     ok(1,'got severity')
 
-    push_eh done
+    push_eh catch
     $I0 = 1
     getattribute $P5, $P0, 'foo'
     $I0 = 0
+    goto done
+  catch:
+    .get_results($P0)
+    finalize $P0
   done:
     ok($I0, "Can't fetch non-existent attribute")
 .end
 
 .sub test_attributes
-    push_eh handler
     $P1 = new ['Exception']
-    $P2 = new ['String']
-    $P2 = "just pining"
-    setattribute $P1, 'message', $P2
-    $P3 = new ['Integer']
-    $P3 = 5
-    setattribute $P1, 'severity', $P3
-    $P4 = new ['String']
-    $P4 = "additional payload"
-    setattribute $P1, 'payload', $P4
-    $P5 = new ['ResizablePMCArray']
-    $P5 = 2
-    $P5[0] = 'backtrace line 1'
-    $P5[1] = 'backtrace line 2'
-    setattribute $P1, 'backtrace', $P5
 
+    setattr_int($P1,    'type',      5)
+    setattr_int($P1,    'severity',  6)
+    setattr_int($P1,    'exit_code', 7)
+    setattr_int($P1,    'handled',   1)
+    setattr_string($P1, 'message',   "just pining")
+    setattr_string($P1, 'payload',   "additional payload")
+
+    $P8 = new ['ResizablePMCArray']
+    $P8 = 2
+    $P8[0] = 'backtrace line 1'
+    $P8[1] = 'backtrace line 2'
+    setattribute $P1, 'backtrace', $P8
+
+    push_eh handler
     throw $P1
-    is(0, "throwing exception failed")
+    ok(0, "throwing exception failed")
+    skip(7, "because of throwing exception failed")
     .return()
   handler:
     .get_results($P0)
+    pop_eh
 
-    $P16 = getattribute $P0, 'message'
-    is($P16, "just pining", 'got message')
+    gotattr_int($P0,    'type',      5)
+    gotattr_int($P0,    'severity',  6)
+    gotattr_int($P0,    'exit_code', 7)
+    gotattr_int($P0,    'handled',   1)
+    gotattr_string($P0, 'message',   "just pining")
+    gotattr_string($P0, 'payload',   "additional payload")
+
+    $P28 = getattribute $P0, 'backtrace'
+    $P30 = $P28[0]
+    is($P30, "backtrace line 1", 'got backtrace data')
 
-    $P17 = getattribute $P0, 'severity'
-    is($P17, 5, 'got severity')
+    $P31 = $P28[1]
+    is($P31, "backtrace line 2", 'more backtrace data')
+.end
 
-    $P18 = getattribute $P0, 'payload'
-    is($P18, "additional payload", 'got payload')
+.sub test_setattribute_wrong
+    .local pmc ex, eh
+    .local int result
+    ex = new ['Exception']
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_ATTRIB_NOT_FOUND)
+    set_addr eh, catch
+    result = 0
+    push_eh eh
+    setattribute ex, 'wrong attribute', eh
+    goto done
+  catch:
+    result = 1
+    finalize eh
+  done:
+    is(result, 1, 'setting a wrong attribute throws')
+.end
 
-    $P19 = getattribute $P0, 'backtrace'
-    $P20 = $P19[0]
-    is($P20, "backtrace line 1", 'got backtrace data')
+.sub test_birthtime
+    .local pmc ex, bt
+    ex = new ['Exception']
+    .local num n, nbt
+    n = 123.456
+    ex = n
+    bt = getattribute ex, 'birthtime'
+    nbt = bt
+    is(nbt, n, 'get and set birthtime')
+.end
 
-    $P20 = $P19[1]
-    is($P20, "backtrace line 2", 'more backtrace data')
+.sub test_handler_ctx
+    .local pmc ex, eh, hc
+    .local int result
+    ex = new ['Exception']
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_INVALID_OPERATION)
+
+    result = 0
+    set_label eh, catch_get
+    push_eh eh
+    hc = getattribute ex, 'handler_ctx'
+    goto done_get
+  catch_get:
+    finalize eh
+    result = 1
+  done_get:
+    is(result, 1, 'get handler_ctx invalid operation')
+
+    result = 0
+    set_label eh, catch_set
+    setattribute ex, 'handler_ctx', ex
+    goto done_set
+  catch_set:
+    finalize eh
+    result = 1
+  done_set:
+    is(result, 1, 'set handler_ctx invalid operation')
 .end
 
 .sub test_push_pop_eh
@@ -173,6 +329,88 @@
     ok(1,'caught exception object thrown')
 .end
 
+# Test clone vtable function
+
+.sub test_clone
+    .local pmc ex, exclone
+    ex = new ['Exception']
+    ex['type'] = .EXCEPTION_SYNTAX_ERROR
+    exclone = clone ex
+    .local int result
+    result = iseq ex, exclone
+    is(result, 1, 'cloned Exception is equal to original')
+    exclone['type'] = .EXCEPTION_ERR_OVERFLOW
+    result = iseq ex, exclone
+    is(result, 0, 'cloned and modified Exception is not equal to original')
+.end
+
+.sub test_throw_clone
+    .local pmc ex, exclone, eh, ehguard
+    .local int result
+    ex = new ['Exception']
+    ex['type'] = .EXCEPTION_SYNTAX_ERROR
+    exclone = clone ex
+
+    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
+
+.sub test_backtrace
+    .local pmc ex, bt
+    ex = new ['Exception']
+    bt = ex.'backtrace'()
+    $I0 = isnull bt
+    is($I0, 0, 'got backtrace from unthrow Exception')
+.end
+
+.sub test_annotations
+    .local pmc ex, ann
+    ex = new ['Exception']
+    ann = ex.'annotations'()
+    $I0 = isnull ann
+    is($I0, 0, 'got annotations from unthrow Exception')
+    $I0 = ann
+    is($I0, 0, 'annotations from unthrow Exception are empty')
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/gc_massacre/t/pmc/exceptionhandler.t
==============================================================================
--- branches/gc_massacre/t/pmc/exceptionhandler.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/exceptionhandler.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/pmc/float.t
==============================================================================
--- branches/gc_massacre/t/pmc/float.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/float.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/pmc/hash.t
==============================================================================
--- branches/gc_massacre/t/pmc/hash.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/hash.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/pmc/lexinfo.t
==============================================================================
--- branches/gc_massacre/t/pmc/lexinfo.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/lexinfo.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/pmc/object-meths.t
==============================================================================
--- branches/gc_massacre/t/pmc/object-meths.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/object-meths.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,12 +1,12 @@
 #! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 37;
+use Parrot::Test tests => 36;
 
 =head1 NAME
 
@@ -1080,24 +1080,6 @@
 get_attr_str was called
 OUTPUT
 
-pir_output_is( <<'CODE', <<'OUTPUT', "overloading get_class vtable" );
-.sub main :main
-    .local pmc cl, o, cl2
-    cl = newclass 'MyClass'
-    o = new ['MyClass']
-    cl2 = class o
-.end
-
-.namespace ['MyClass']
-
-.sub get_class :method :vtable
-    print "get_class was called\n"
-.end
-
-CODE
-get_class was called
-OUTPUT
-
 pir_error_output_like( <<'CODE', <<'OUTPUT', "method called on non-object" );
 .namespace [ 'Foo' ]
 

Modified: branches/gc_massacre/t/pmc/oplib.t
==============================================================================
--- branches/gc_massacre/t/pmc/oplib.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/oplib.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -26,7 +26,7 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(12)
+    plan(13)
     new_oplib()
     check_elements()
     getint_end()
@@ -37,15 +37,17 @@
 .end
 
 .sub new_oplib
-    $P0 = new ['OpLib']
-    $I0 = isnull $P0
+    $P0 = box "core_ops"
+    $P1 = new ['OpLib'], $P0
+    $I0 = isnull $P1
     nok($I0, "new OpLib")
 .end
 
 .sub check_elements
     .local pmc oplib, op, eh
     .local int n, i
-    oplib = new ['OpLib']
+    $P0 = box "core_ops"
+    oplib = new ['OpLib'], $P0
     n = elements oplib
     i = n - 1
     op = oplib[i]
@@ -66,14 +68,16 @@
 .end
 
 .sub getint_end
-    $P0 = new ['OpLib']
+    $P0 = box 'core_ops'
+    $P0 = new ['OpLib'], $P0
     $I1 = $P0[TESTED_OP]
     $I0 = isne $I1, -1
     ok($I0, "got end opcode")
 .end
 
 .sub getint_no_opcode
-    $P0 = new ['OpLib']
+    $P0 = box 'core_ops'
+    $P0 = new ['OpLib'], $P0
     $I1 = $P0[TESTED_NOSUCHOP]
     $I0 = iseq $I1, -1
     ok($I0, "get non existent opcode fails")
@@ -81,7 +85,8 @@
 
 .sub getop_end
     .local pmc oplib, op, op2, name
-    oplib = new ['OpLib']
+    $P0 = box 'core_ops'
+    oplib = new ['OpLib'], $P0
 
     # Using a string constant
     op = oplib[TESTED_OP]
@@ -99,15 +104,20 @@
     is($I0, 0, "got end opcode data keyed pmc")
 
     $I0 = issame op, op2
-    ok($I0, "got same result from both ways")
+    $S0 = "Implement cacheing, Opcode.is_same, or change comparison"
+    todo($I0, "got same result from both ways", $S0)
 
     $I1 = op
-    $I0 = oplib['end']
+    $I0 = oplib[TESTED_OP]
     is($I0, $I1, 'opcode number from Opcode and from OpLib is the same')
+
+    $S0 = op
+    is($S0, TESTED_OP, 'name from Opcode matches name searched for')
 .end
 
 .sub family_end
-    $P0 = new ['OpLib']
+    $P0 = box 'core_ops'
+    $P0 = new ['OpLib'], $P0
     $P1 = $P0.'op_family'(TESTED_OP)
     $I0 = isnull $P1
     dec $I0
@@ -118,7 +128,8 @@
 .end
 
 .sub family_no_opcode
-    $P0 = new ['OpLib']
+    $P0 = box 'core_ops'
+    $P0 = new ['OpLib'], $P0
     $P1 = $P0.'op_family'(TESTED_NOSUCHOP)
     $I0 = isnull $P1
     ok($I0, "non existent opcode family is null")

Modified: branches/gc_massacre/t/pmc/packfile.t
==============================================================================
--- branches/gc_massacre/t/pmc/packfile.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/packfile.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/pmc/packfileannotations.t
==============================================================================
--- branches/gc_massacre/t/pmc/packfileannotations.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/packfileannotations.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/pmc/packfileconstanttable.t
==============================================================================
--- branches/gc_massacre/t/pmc/packfileconstanttable.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/packfileconstanttable.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/pmc/packfiledirectory.t
==============================================================================
--- branches/gc_massacre/t/pmc/packfiledirectory.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/packfiledirectory.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -9,6 +9,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfiledirectory.t
 
 =head1 DESCRIPTION

Modified: branches/gc_massacre/t/pmc/packfilefixupentry.t
==============================================================================
--- branches/gc_massacre/t/pmc/packfilefixupentry.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/packfilefixupentry.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -8,6 +8,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfilefixupentry.t
 
 =head1 DESCRIPTION

Modified: branches/gc_massacre/t/pmc/packfilefixuptable.t
==============================================================================
--- branches/gc_massacre/t/pmc/packfilefixuptable.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/packfilefixuptable.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -9,6 +9,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfilefixuptable.t
 
 =head1 DESCRIPTION

Modified: branches/gc_massacre/t/pmc/packfilerawsegment.t
==============================================================================
--- branches/gc_massacre/t/pmc/packfilerawsegment.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/packfilerawsegment.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -9,6 +9,7 @@
 
 =head1 SYNOPSIS
 
+    % make test_prep
     % prove t/pmc/packfilerawsegment.t
 
 =head1 DESCRIPTION

Modified: branches/gc_massacre/t/pmc/pmc.t
==============================================================================
--- branches/gc_massacre/t/pmc/pmc.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/pmc.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -51,7 +51,9 @@
 my $checkTypes;
 my %types_we_cant_test
     = map { $_ => 1; } (    # These require initializers.
-    qw(default Null Iterator ArrayIterator HashIterator StringIterator OrderedHashIterator Enumerate ParrotObject ParrotThread BigInt LexInfo LexPad Object Handle Opcode),
+    qw(default Null Iterator ArrayIterator HashIterator StringIterator
+        OrderedHashIterator Enumerate ParrotObject ParrotThread BigInt LexInfo
+        LexPad Object Handle Opcode OpLib),
 
     # Instances of these appear to have other types.
     qw(PMCProxy Class) );

Modified: branches/gc_massacre/t/pmc/stringbuilder.t
==============================================================================
--- branches/gc_massacre/t/pmc/stringbuilder.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/stringbuilder.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -21,6 +21,7 @@
     .include 'test_more.pir'
 
     test_create()               # 2 tests
+    test_init_pmc()
     test_push_string()
     test_push_pmc()             # 4 tests
     test_push_string_unicode()  # 1 test
@@ -110,7 +111,6 @@
     push sb, $S0
     $I0 = sb
     is( $I0, 16384, "push a null string does nothing" )
-
 .end
 
 .sub 'test_push_pmc'
@@ -305,6 +305,34 @@
     ok( $S0, "Pushing unicode strings doesn't kill StringBuilder")
 .end
 
+.sub 'test_init_pmc'
+    .local pmc ar
+    ar = new ['ResizableStringArray']
+
+    push ar, "foo"
+    push ar, "bar"
+
+    $S99 = repeat "x", 12
+    push ar, $S99
+    $S1 = 'foobar' . $S99
+
+    $S99 = repeat "y", 13
+    push ar, $S99
+    $S1 = $S1 . $S99
+
+    $S99 = repeat "z", 14
+    push ar, $S99
+    $S1 = $S1 . $S99
+
+    null $S0
+    push ar, $S0
+
+    .local pmc sb
+    sb  = new ["StringBuilder"], ar
+    $S0 = sb
+    is( $S0, $S1, 'init_pmc() should join all passed strings' )
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/gc_massacre/t/pmc/stringiterator.t
==============================================================================
--- branches/gc_massacre/t/pmc/stringiterator.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/stringiterator.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -17,21 +17,34 @@
 =cut
 
 .include 'iterator.pasm'
+.include 'except_types.pasm'
 
 .sub main :main
     .include 'test_more.pir'
 
-    plan(24)
+    plan(30)
 
+    test_get_pmc()
     test_clone()
     test_elements()
     iterate_forward() # 11 tests
     iterate_backward() # 8 tests
     iterate_wrong() # 1 test
     iterate_out() # 1 test
+    get_keyed()
 
 .end
 
+
+.sub 'test_get_pmc'
+    .local pmc s, it, sget
+    s = new ['String']
+    s = 'foobar'
+    it = iter s
+    sget = deref it
+    is(s, sget, 'deref StringIterator gives the iterated string')
+.end
+
 .sub 'test_clone'
     .local pmc s, it, itc
     .local int nit, nitc
@@ -208,6 +221,46 @@
 end:
 .end
 
+.sub get_keyed
+    .local pmc s, it, eh
+    .local string s1
+    .local int result, i1
+    result = 0
+    s = new ['String']
+    s = 'hi'
+    it = iter s
+    s1 = it[0]
+    is(s1, 'h', 'get_string_keyed_int - zero')
+    s1 = it[1]
+    is(s1, 'i', 'get_string_keyed_int - not zero')
+
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_OUT_OF_BOUNDS)
+    set_label eh, catch
+    push_eh eh
+    s1 = it[2]
+    goto done
+  catch:
+    finalize eh
+    result = 1
+  done:
+    ok(result, 'get_string_keyed_int out of bounds')
+
+    result = 0
+    i1 = it[0]
+    s1 = chr i1
+    is(s1, 'h', 'get_integer_keyed_int')
+
+    set_label eh, catch2
+    i1 = it[2]
+    goto done2
+  catch2:
+    finalize eh
+    result = 1
+  done2:
+    ok(result, 'get_integer_keyed_int out of bounds')
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Copied and modified: branches/gc_massacre/t/pmc/testlib/annotations.pir (from r48798, branches/gc_massacre/t/native_pbc/testdata/annotations.pir)
==============================================================================
--- branches/gc_massacre/t/native_pbc/testdata/annotations.pir	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/t/pmc/testlib/annotations.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,6 +1,8 @@
-# Copyright (C) 2009, Parrot Foundation.
+# 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"

Added: branches/gc_massacre/t/pmc/testlib/number.pasm
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/t/pmc/testlib/number.pasm	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/pmc/testlib/packfile_common.pir
==============================================================================
--- branches/gc_massacre/t/pmc/testlib/packfile_common.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/testlib/packfile_common.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/pmc/timer.t
==============================================================================
--- branches/gc_massacre/t/pmc/timer.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/pmc/timer.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/run/options.t
==============================================================================
--- branches/gc_massacre/t/run/options.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/run/options.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -20,7 +20,7 @@
 use warnings;
 use lib qw( lib . ../lib ../../lib );
 
-use Test::More tests => 27;
+use Test::More tests => 28;
 use Parrot::Config;
 use File::Temp 0.13 qw/tempfile/;
 use File::Spec;
@@ -119,6 +119,14 @@
     return $filename;
 }
 
+#make sure that VERSION matches the output of --version
+open(my $version_fh, "<", "VERSION") or die "couldn't open VERSION: $!";
+my $file_version = <$version_fh>;
+chomp($file_version);
+close($version_fh);
+like( qx{$PARROT --version}, qr/.*${file_version}.*/, "VERSION matches --version" );
+
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/gc_massacre/t/src/extend.t
==============================================================================
--- branches/gc_massacre/t/src/extend.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/src/extend.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -43,15 +43,13 @@
     Parrot_Int    new_value;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
+    if (interp) {
+        Parrot_set_intreg(interp, parrot_reg, value);
+        new_value = Parrot_get_intreg(interp, parrot_reg);
 
-    Parrot_set_intreg(interp, parrot_reg, value);
-    new_value = Parrot_get_intreg(interp, parrot_reg);
-
-    printf("%d\n", (int)new_value);
-
-    Parrot_exit(interp, 0);
+        printf("%d\n", (int)new_value);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -74,15 +72,14 @@
     Parrot_Float  new_value;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
+    if (interp) {
+        Parrot_set_numreg(interp, parrot_reg, value);
+        new_value = Parrot_get_numreg(interp, parrot_reg);
 
-    Parrot_set_numreg(interp, parrot_reg, value);
-    new_value = Parrot_get_numreg(interp, parrot_reg);
+        printf("%.1f\n", (double)new_value);
 
-    printf("%.1f\n", (double)new_value);
-
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -103,13 +100,12 @@
     Parrot_String output;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
-
-    output = Parrot_new_string(interp, "Test", 4, "iso-8859-1", 0);
-    Parrot_eprintf(interp, "%S\n", output);
+    if (interp) {
+        output = Parrot_new_string(interp, "Test", 4, "iso-8859-1", 0);
+        Parrot_eprintf(interp, "%S\n", output);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -131,16 +127,15 @@
     Parrot_String value, new_value;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
-
-    value = Parrot_new_string(interp, "Test", 4, "iso-8859-1", 0);
-    Parrot_set_strreg(interp, parrot_reg, value);
+    if (interp) {
+        value = Parrot_new_string(interp, "Test", 4, "iso-8859-1", 0);
+        Parrot_set_strreg(interp, parrot_reg, value);
 
-    new_value = Parrot_get_strreg(interp, parrot_reg);
-    Parrot_eprintf(interp, "%S\n", new_value);
+        new_value = Parrot_get_strreg(interp, parrot_reg);
+        Parrot_eprintf(interp, "%S\n", new_value);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -163,18 +158,17 @@
     Parrot_Int    type, new_value;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
+    if (interp) {
+        type    = Parrot_PMC_typenum(interp, "Integer");
+        testpmc = Parrot_PMC_new(interp, type);
 
-    type    = Parrot_PMC_typenum(interp, "Integer");
-    testpmc = Parrot_PMC_new(interp, type);
+        Parrot_PMC_set_integer_native(interp, testpmc, value);
+        new_value = Parrot_PMC_get_integer(interp, testpmc);
 
-    Parrot_PMC_set_integer_native(interp, testpmc, value);
-    new_value = Parrot_PMC_get_integer(interp, testpmc);
+        printf("%ld\n", (long)new_value);
 
-    printf("%ld\n", (long)new_value);
-
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -211,11 +205,11 @@
     Parrot_Interp interp = Parrot_new(NULL);
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
+    if (interp) {
+        Parrot_run_native(interp, the_test);
 
-    Parrot_run_native(interp, the_test);
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -238,23 +232,22 @@
     Parrot_PMC    testpmc, newpmc;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
-
-    type    = Parrot_PMC_typenum(interp, "Integer");
-    testpmc = Parrot_PMC_new(interp, type);
+    if (interp) {
+        type    = Parrot_PMC_typenum(interp, "Integer");
+        testpmc = Parrot_PMC_new(interp, type);
 
-    Parrot_PMC_set_integer_native(interp, testpmc, value);
+        Parrot_PMC_set_integer_native(interp, testpmc, value);
 
-    parrot_reg = 31;
-    Parrot_set_pmcreg(interp, parrot_reg, testpmc);
+        parrot_reg = 31;
+        Parrot_set_pmcreg(interp, parrot_reg, testpmc);
 
-    newpmc    = Parrot_get_pmcreg(interp, parrot_reg);
-    new_value = Parrot_PMC_get_integer(interp, newpmc);
+        newpmc    = Parrot_get_pmcreg(interp, parrot_reg);
+        new_value = Parrot_PMC_get_integer(interp, newpmc);
 
-    printf("%d\n", (int)new_value);
+        printf("%d\n", (int)new_value);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -277,18 +270,17 @@
     Parrot_PMC    testpmc;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
+    if (interp) {
+        type    = Parrot_PMC_typenum(interp, "Float");
+        testpmc = Parrot_PMC_new(interp, type);
 
-    type    = Parrot_PMC_typenum(interp, "Float");
-    testpmc = Parrot_PMC_new(interp, type);
+        Parrot_PMC_set_number_native(interp, testpmc, value);
+        new_value = Parrot_PMC_get_number(interp, testpmc);
 
-    Parrot_PMC_set_number_native(interp, testpmc, value);
-    new_value = Parrot_PMC_get_number(interp, testpmc);
+        printf("%.7f\n", (double)new_value);
 
-    printf("%.7f\n", (double)new_value);
-
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -310,19 +302,18 @@
     Parrot_PMC    testpmc;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
-
-    type    = Parrot_PMC_typenum(interp, "String");
-    testpmc = Parrot_PMC_new(interp, type);
+    if (interp) {
+        type    = Parrot_PMC_typenum(interp, "String");
+        testpmc = Parrot_PMC_new(interp, type);
 
-    value     = Parrot_new_string(interp, "Pumpking", 8, "iso-8859-1", 0);
-    Parrot_PMC_set_string_native(interp, testpmc, value);
-    new_value = Parrot_PMC_get_string(interp, testpmc);
+        value     = Parrot_new_string(interp, "Pumpking", 8, "iso-8859-1", 0);
+        Parrot_PMC_set_string_native(interp, testpmc, value);
+        new_value = Parrot_PMC_get_string(interp, testpmc);
 
-    Parrot_eprintf(interp, "%S\n", new_value);
+        Parrot_eprintf(interp, "%S\n", new_value);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -362,12 +353,12 @@
 main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp)
-        return 1;
+    if (interp) {
 
-    Parrot_run_native(interp, the_test);
+        Parrot_run_native(interp, the_test);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -420,12 +411,11 @@
 main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp)
-        return 1;
-
-    Parrot_run_native(interp, the_test);
+    if (interp) {
+        Parrot_run_native(interp, the_test);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -496,12 +486,11 @@
 main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp)
-        return 1;
-
-    Parrot_run_native(interp, the_test);
+    if (interp) {
+        Parrot_run_native(interp, the_test);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -541,7 +530,8 @@
   .pcc_sub _sub1:
   get_params ""
   print "in sub1\n"
-  find_lex P2, "no_such_var"
+  set I1, 0                             # Divide by 0 to force exception.
+  div I2, I1, 0
   print "never\n"
   returncc
 EOF
@@ -563,12 +553,11 @@
 main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp)
-        return 1;
-
-    Parrot_run_native(interp, the_test);
+    if (interp) {
+        Parrot_run_native(interp, the_test);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -661,24 +650,16 @@
     const char * code[] = { ".sub foo\\nsay \\"Hello from foo!\\"\\n.end\\n" };
 
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp) {
-        printf( "Hiss\\n" );
-        return 1;
-    }
+    if (interp) {
+        packfile = Parrot_pbc_read( interp, "$temp_pbc", 0 );
 
-    packfile = Parrot_pbc_read( interp, "$temp_pbc", 0 );
+        if (packfile) {
+            Parrot_pbc_load( interp, packfile );
+            Parrot_runcode( interp, 1, code );
+        }
 
-    if (!packfile) {
-        printf( "Boo\\n" );
-        return 1;
+        Parrot_destroy( interp );
     }
-
-    Parrot_pbc_load( interp, packfile );
-    Parrot_runcode( interp, 1, code );
-
-    Parrot_destroy( interp );
-
-    Parrot_exit(interp, 0);
     return 0;
 }
 CODE
@@ -700,25 +681,18 @@
     Parrot_PMC      sub;
     Parrot_String   code_type, error, foo_name;
 
-    if (!interp) {
-        printf( "Hiss\n" );
-        return 1;
+    if (interp) {
+        code_type = Parrot_str_new_constant( interp, "PIR" );
+        retval    = Parrot_compile_string( interp, code_type, code, &error );
+
+        if (retval) {
+            foo_name = Parrot_str_new_constant( interp, "foo" );
+            sub      = Parrot_ns_find_current_namespace_global( interp, foo_name );
+
+            Parrot_ext_call(interp, sub, "->");
+        }
+        Parrot_destroy(interp);
     }
-
-    code_type = Parrot_str_new_constant( interp, "PIR" );
-    retval    = Parrot_compile_string( interp, code_type, code, &error );
-
-    if (!retval) {
-        printf( "Boo\n" );
-        return 1;
-    }
-
-    foo_name = Parrot_str_new_constant( interp, "foo" );
-    sub      = Parrot_ns_find_current_namespace_global( interp, foo_name );
-
-    Parrot_ext_call(interp, sub, "->");
-
-    Parrot_exit(interp, 0);
     return 0;
 }
 CODE
@@ -738,19 +712,15 @@
     Parrot_PackFile pf;
     Parrot_Interp   interp = Parrot_new(NULL);
 
-    if (!interp) {
-        printf( "No interpreter\\n" );
-        return 1;
+    if (interp) {
+        pf = Parrot_pbc_read( interp, "$temp_pbc", 0 );
+        Parrot_pbc_load( interp, pf );
+
+        sub      = Parrot_ns_find_current_namespace_global( interp, Parrot_str_new_constant( interp, "add" ) );
+        Parrot_ext_call(interp, sub, "II->I", 100, 200, &result);
+        printf( "Result is %d.\\n", result );
+        Parrot_destroy(interp);
     }
-
-    pf = Parrot_pbc_read( interp, "$temp_pbc", 0 );
-    Parrot_pbc_load( interp, pf );
-
-    sub      = Parrot_ns_find_current_namespace_global( interp, Parrot_str_new_constant( interp, "add" ) );
-    Parrot_ext_call(interp, sub, "II->I", 100, 200, &result);
-    printf( "Result is %d.\\n", result );
-
-    Parrot_exit(interp, 0);
     return 0;
 }
 CODE
@@ -770,19 +740,15 @@
     Parrot_PackFile pf;
     Parrot_Interp   interp = Parrot_new(NULL);
 
-    if (!interp) {
-        printf( "No interpreter\\n" );
-        return 1;
+    if (interp) {
+        pf = Parrot_pbc_read( interp, "$temp_pbc", 0 );
+        Parrot_pbc_load( interp, pf );
+
+        sub      = Parrot_ns_find_current_namespace_global( interp, Parrot_str_new_constant( interp, "add" ) );
+        Parrot_ext_call( interp, sub, "II->I", 100, 200, &result );
+        printf( "Result is %d.\\n", result );
+        Parrot_destroy(interp);
     }
-
-    pf = Parrot_pbc_read( interp, "$temp_pbc", 0 );
-    Parrot_pbc_load( interp, pf );
-
-    sub      = Parrot_ns_find_current_namespace_global( interp, Parrot_str_new_constant( interp, "add" ) );
-    Parrot_ext_call( interp, sub, "II->I", 100, 200, &result );
-    printf( "Result is %d.\\n", result );
-
-    Parrot_exit(interp, 0);
     return 0;
 }
 CODE
@@ -825,14 +791,13 @@
         printf("Starting interp %d\n", i);
         fflush(stdout);
         interp = Parrot_new(NULL);
-        if (!interp)
-            return 1;
+        if (interp) {
+            Parrot_set_flag(interp, PARROT_DESTROY_FLAG);
 
-        Parrot_set_flag(interp, PARROT_DESTROY_FLAG);
-
-        printf("Destroying interp %d\n", i);
-        fflush(stdout);
-        interp_cleanup(interp, 0);
+            printf("Destroying interp %d\n", i);
+            fflush(stdout);
+            interp_cleanup(interp, 0);
+        }
     }
 
     return 0;

Modified: branches/gc_massacre/t/src/warnings.t
==============================================================================
--- branches/gc_massacre/t/src/warnings.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/src/warnings.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -39,12 +39,11 @@
     Parrot_Interp interp = Parrot_new(NULL);
     int error_val;
 
-    if (!interp)
-        return 1;
+    if (interp) {
+        print_pbc_location(interp);
 
-    print_pbc_location(interp);
-
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -62,35 +61,34 @@
     Parrot_Interp interp = Parrot_new(NULL);
     int error_val;
 
-    if (!interp)
-        return 1;
-
-    PARROT_WARNINGS_on(interp, PARROT_WARNINGS_ALL_FLAG);
+    if (interp) {
+        PARROT_WARNINGS_on(interp, PARROT_WARNINGS_ALL_FLAG);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_ALL_FLAG, "all");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_ALL_FLAG, "all");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    /* warnings are on, this should return an error */
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_NONE_FLAG, "none");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        /* warnings are on, this should return an error */
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_NONE_FLAG, "none");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG, "undef");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG, "undef");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_IO_FLAG, "io");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_IO_FLAG, "io");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_PLATFORM_FLAG, "platform");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_PLATFORM_FLAG, "platform");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG, "dynext");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG, "dynext");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, 0, "eek"); /* should return error */
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, 0, "eek"); /* should return error */
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    Parrot_exit(interp, 0);
-    return 0;
+        Parrot_destroy(interp);
+   }
+   return 0;
 }
 CODE
 all

Added: branches/gc_massacre/t/steps/auto/llvm-01.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/t/steps/auto/llvm-01.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -0,0 +1,418 @@
+#!perl
+# Copyright (C) 2001-2007, Parrot Foundation.
+# $Id$
+# auto/llvm-01.t
+
+use strict;
+use warnings;
+use File::Temp qw( tempdir );
+use Test::More tests =>  69;
+use Carp;
+use lib qw( lib t/configure/testlib );
+use_ok('config::init::defaults');
+use_ok('config::inter::progs');
+use_ok('config::auto::llvm');
+use Parrot::Configure;
+use Parrot::Configure::Options qw( process_options );
+use Parrot::Configure::Test qw(
+    test_step_thru_runstep
+    rerun_defaults_for_testing
+    test_step_constructor_and_description
+);
+use IO::CaptureOutput qw( capture );
+
+########## regular ##########
+
+my ($args, $step_list_ref) = process_options( {
+    argv => [ ],
+    mode => q{configure},
+} );
+
+my $conf = Parrot::Configure->new;
+
+my $serialized = $conf->pcfreeze();
+
+test_step_thru_runstep($conf, q{init::defaults}, $args);
+test_step_thru_runstep($conf, q{inter::progs},   $args);
+
+my $pkg = q{auto::llvm};
+
+$conf->add_steps($pkg);
+$conf->options->set( %{$args} );
+my $step = test_step_constructor_and_description($conf);
+my $ret = $step->runstep($conf);
+ok( $ret, "runstep() returned true value" );
+like( $step->result(), qr/yes|no/,
+  "Result was either 'yes' or 'no'" );
+
+$conf->replenish($serialized);
+
+########## --verbose ##########
+
+($args, $step_list_ref) = process_options( {
+    argv => [ q{--verbose} ],
+    mode => q{configure},
+} );
+rerun_defaults_for_testing($conf, $args );
+$conf->add_steps($pkg);
+$conf->options->set( %{$args} );
+$step = test_step_constructor_and_description($conf);
+{
+    my $stdout;
+    my $ret = capture(
+        sub { $step->runstep($conf) },
+        \$stdout
+    );
+    ok( $ret, "runstep() returned true value" );
+    like( $step->result(), qr/yes|no/,
+        "Result was either 'yes' or 'no'" );
+    SKIP: {
+        skip 'No sense testing for verbose output if LLVM not present',
+        2 unless ( $step->result() =~ /yes/ );
+        like( $stdout, qr/llvm-gcc/s,
+            "Got expected verbose output" );
+        like( $stdout, qr/Low Level Virtual Machine/s,
+            "Got expected verbose output" );
+    }
+}
+
+$step->set_result( undef );
+$conf->data->set( 'has_llvm' => undef );
+auto::llvm::_handle_result($step, $conf, 1);
+is( $step->result(), 'yes', "Got expected 'yes' result" );
+ok( $conf->data->get( 'has_llvm' ),
+    "'has_llvm' set to true value, as expected" );
+
+$step->set_result( undef );
+$conf->data->set( 'has_llvm' => undef );
+auto::llvm::_handle_result($step, $conf, 0);
+is( $step->result(), 'no', "Got expected 'no' result" );
+ok( ! $conf->data->get( 'has_llvm' ),
+    "'has_llvm' set to false  value, as expected" );
+
+##### _handle_component_version_output() #####
+
+my ($prog, $output, $llvm_lacking, $verbose);
+$prog = [ 'llvm-gcc'    => 'llvm-gcc' ];
+
+$verbose = 0;
+
+$output = 'llvm-gcc';
+$llvm_lacking = 0;
+$llvm_lacking = auto::llvm::_handle_component_version_output(
+    $prog, $output, $llvm_lacking, $verbose
+);
+ok( ! $llvm_lacking, "llvm reported as not lacking" );
+
+$output = 'foobar';
+$llvm_lacking = 0;
+$llvm_lacking = auto::llvm::_handle_component_version_output(
+    $prog, $output, $llvm_lacking, $verbose
+);
+ok( $llvm_lacking, "llvm reported as lacking: wrong output" );
+
+$output = undef;
+$llvm_lacking = 0;
+$llvm_lacking = auto::llvm::_handle_component_version_output(
+    $prog, $output, $llvm_lacking, $verbose
+);
+ok( $llvm_lacking, "llvm reported as lacking: output undefined" );
+
+$verbose = 1;
+
+my ($stdout, $stderr);
+my $exp = $prog->[0];
+
+$output = 'llvm-gcc';
+$llvm_lacking = 0;
+capture(
+    sub {
+        $llvm_lacking = auto::llvm::_handle_component_version_output(
+            $prog, $output, $llvm_lacking, $verbose
+        );
+    },
+    \$stdout,
+    \$stderr,
+);
+ok( ! $llvm_lacking, "llvm reported as not lacking" );
+like( $stdout, qr/$output/, "Got expected verbose output: llvm not lacking" );
+
+$output = 'foobar';
+$llvm_lacking = 0;
+capture(
+    sub {
+        $llvm_lacking = auto::llvm::_handle_component_version_output(
+            $prog, $output, $llvm_lacking, $verbose
+        );
+    },
+    \$stdout,
+    \$stderr,
+);
+ok( $llvm_lacking, "llvm reported as lacking: wrong output" );
+like(
+    $stdout,
+    qr/Could not get expected '--version' output for $exp/,
+    "Got expected verbose output: llvm lacking",
+);
+
+$output = undef;
+$llvm_lacking = 0;
+capture(
+    sub {
+        $llvm_lacking = auto::llvm::_handle_component_version_output(
+            $prog, $output, $llvm_lacking, $verbose
+        );
+    },
+    \$stdout,
+    \$stderr,
+);
+ok( $llvm_lacking, "llvm reported as lacking: output undefined" );
+like(
+    $stdout,
+    qr/Could not get expected '--version' output for $exp/,
+    "Got expected verbose output: llvm lacking",
+);
+
+##### _examine_llvm_gcc_version() #####
+
+$output = '';
+$llvm_lacking = 0;
+$verbose = 0;
+$llvm_lacking =
+    auto::llvm::_examine_llvm_gcc_version( $output, $llvm_lacking, $verbose );
+ok( $llvm_lacking, "_examine_llvm_gcc_version() reported LLVM lacking" );
+
+$output = 'foobar';
+$llvm_lacking = 0;
+$verbose = 0;
+$llvm_lacking =
+    auto::llvm::_examine_llvm_gcc_version( $output, $llvm_lacking, $verbose );
+ok( $llvm_lacking, "_examine_llvm_gcc_version() reported LLVM lacking" );
+
+$output = '3.2.1';
+$llvm_lacking = 0;
+$verbose = 0;
+$llvm_lacking =
+    auto::llvm::_examine_llvm_gcc_version( $output, $llvm_lacking, $verbose );
+ok( $llvm_lacking, "_examine_llvm_gcc_version() reported LLVM lacking" );
+
+$output = '4.2.1';
+$llvm_lacking = 0;
+$verbose = 0;
+$llvm_lacking =
+    auto::llvm::_examine_llvm_gcc_version( $output, $llvm_lacking, $verbose );
+ok( ! $llvm_lacking, "_examine_llvm_gcc_version() reported LLVM not lacking" );
+
+$output = 'foobar';
+$llvm_lacking = 0;
+$verbose = 1;
+capture(
+    sub { $llvm_lacking = auto::llvm::_examine_llvm_gcc_version(
+            $output, $llvm_lacking, $verbose ); },
+    \$stdout,
+    \$stderr,
+);
+ok( $llvm_lacking, "_examine_llvm_gcc_version() reported LLVM lacking" );
+like(
+    $stdout,
+    qr/Unable to extract llvm-gcc major, minor and patch versions/,
+    "Got expected verbose output from _examine_llvm_gcc_version()",
+);
+
+$output = '3.2.1';
+$llvm_lacking = 0;
+$verbose = 1;
+capture(
+    sub { $llvm_lacking = auto::llvm::_examine_llvm_gcc_version(
+            $output, $llvm_lacking, $verbose ); },
+    \$stdout,
+    \$stderr,
+);
+ok( $llvm_lacking, "_examine_llvm_gcc_version() reported LLVM lacking" );
+like(
+    $stdout,
+    qr/llvm-gcc must be at least major version 4/,
+    "Got expected verbose output from _examine_llvm_gcc_version()",
+);
+
+##### 4 methods #####
+$verbose = 0;
+
+$step->set_result( undef );
+$step->_handle_failure_to_compile_into_bitcode( $conf, $verbose );
+is( $step->result(), 'no', "Got expected result" );
+
+$step->set_result( undef );
+$step->_handle_failure_to_execute_bitcode( $conf, $verbose );
+is( $step->result(), 'no', "Got expected result" );
+
+$step->set_result( undef );
+$step->_handle_failure_to_compile_to_assembly( $conf, $verbose );
+is( $step->result(), 'no', "Got expected result" );
+
+$step->set_result( undef );
+$step->_handle_failure_to_assemble_assembly( $conf, $verbose );
+is( $step->result(), 'no', "Got expected result" );
+
+$verbose = 1;
+capture(
+    sub { $step->_handle_failure_to_compile_into_bitcode( $conf, $verbose ); },
+    \$stdout,
+    \$stderr,
+);
+like( $stdout,
+    qr/Unable to compile C file into LLVM bitcode file/,
+    "Got expected verbose output from _handle_failure_to_compile_into_bitcode()",
+);
+
+capture(
+    sub { $step->_handle_failure_to_execute_bitcode( $conf, $verbose ); },
+    \$stdout,
+    \$stderr,
+);
+like( $stdout,
+    qr/Unable to run LLVM bitcode file with 'lli'/,
+    "Got expected verbose output from _handle_failure_to_execute_bitcode()",
+);
+
+capture(
+    sub { $step->_handle_failure_to_compile_to_assembly( $conf, $verbose ); },
+    \$stdout,
+    \$stderr,
+);
+like( $stdout,
+    qr/Unable to compile program to native assembly using 'llc'/,
+    "Got expected verbose output from _handle_failure_to_compile_to_assembly()",
+);
+
+capture(
+    sub { $step->_handle_failure_to_assemble_assembly( $conf, $verbose ); },
+    \$stdout,
+    \$stderr,
+);
+like( $stdout,
+    qr/Unable to assemble native assembly into program/,
+    "Got expected verbose output from _handle_failure_to_assemble_assembly()",
+);
+
+##### _handle_native_assembly_output() #####
+
+{
+    local $@ = '';
+    $output = 'hello world';
+    $verbose = 0;
+    ok( $step->_handle_native_assembly_output( $conf, $output, $verbose ),
+        "_handle_native_assembly_output() returned true value" );
+    is( $step->result(), 'yes', "Got expected 'yes' result" );
+}
+
+{
+    local $@ = 'error';
+    $output = 'hello world';
+    $verbose = 0;
+    ok( $step->_handle_native_assembly_output( $conf, $output, $verbose ),
+        "_handle_native_assembly_output() returned true value" );
+    is( $step->result(), 'no', "Got expected 'no' result" );
+}
+
+{
+    local $@ = '';
+    $output = 'goodbye, cruel world';
+    $verbose = 0;
+    ok( $step->_handle_native_assembly_output( $conf, $output, $verbose ),
+        "_handle_native_assembly_output() returned true value" );
+    is( $step->result(), 'no', "Got expected 'no' result" );
+}
+
+{
+    local $@ = 'error';
+    $output = 'hello world';
+    $verbose = 1;
+    capture(
+        sub { $step->_handle_native_assembly_output(
+                $conf, $output, $verbose); },
+        \$stdout,
+        \$stderr,
+    );
+    is( $step->result(), 'no', "Got expected 'no' result" );
+    like(
+        $stdout,
+        qr/Unable to execute native assembly program successfully/,
+        "Got expected verbose output: native assembly program",
+    );
+}
+
+{
+    local $@ = '';
+    $output = 'goodbye, cruel world';
+    $verbose = 1;
+    capture(
+        sub { $step->_handle_native_assembly_output(
+                $conf, $output, $verbose); },
+        \$stdout,
+        \$stderr,
+    );
+    is( $step->result(), 'no', "Got expected 'no' result" );
+    like(
+        $stdout,
+        qr/Unable to execute native assembly program successfully/,
+        "Got expected verbose output: native assembly program",
+    );
+}
+
+##### _cleanup_llvm_files() #####
+
+my ( $bcfile, $sfile, $nativefile );
+my $count_unlinked;
+
+$count_unlinked =
+    auto::llvm::_cleanup_llvm_files( $bcfile, $sfile, $nativefile );
+is( $count_unlinked, 0, "no files existed, hence none unlinked" );
+
+( $bcfile, $sfile, $nativefile ) = ( '', '', '' );
+$count_unlinked =
+    auto::llvm::_cleanup_llvm_files( $bcfile, $sfile, $nativefile );
+is( $count_unlinked, 0, "no files existed, hence none unlinked" );
+
+{
+    my $tdir = tempdir( CLEANUP => 1 );
+    $bcfile = qq|$tdir/bcfile|;
+    open my $FH, '>', $bcfile
+        or die "Unable to open handle for writing: $!";
+    print $FH qq|bcfile hello world\n|;
+    close $FH or die "Unable to close handle after writing: $!";
+    $count_unlinked =
+        auto::llvm::_cleanup_llvm_files( $bcfile, $sfile, $nativefile );
+    is( $count_unlinked, 1, "one file existed, hence one unlinked" );
+}
+
+$conf->cc_clean();
+
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+t/steps/auto/llvm-01.t - tests Parrot::Configure step auto::llvm
+
+=head1 SYNOPSIS
+
+    prove t/steps/auto/llvm-01.t
+
+=head1 DESCRIPTION
+
+This file holds tests for auto::llvm.
+
+=head1 AUTHOR
+
+James E Keenan
+
+=cut
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/gc_massacre/t/steps/auto/pmc-01.t
==============================================================================
--- branches/gc_massacre/t/steps/auto/pmc-01.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/steps/auto/pmc-01.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/tools/dump_pbc.t
==============================================================================
--- branches/gc_massacre/t/tools/dump_pbc.t	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/t/tools/dump_pbc.t	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/t/tools/pgegrep.t
==============================================================================
--- branches/gc_massacre/t/tools/pgegrep.t	Sun Sep  5 13:20:27 2010	(r48798)
+++ /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:

Added: branches/gc_massacre/tools/build/README
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/tools/build/README	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/tools/build/addopstags.pl
==============================================================================
--- branches/gc_massacre/tools/build/addopstags.pl	Sun Sep  5 13:20:27 2010	(r48798)
+++ /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/gc_massacre/tools/build/headerizer.pl
==============================================================================
--- branches/gc_massacre/tools/build/headerizer.pl	Sun Sep  5 13:20:27 2010	(r48798)
+++ /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:

Added: branches/gc_massacre/tools/dev/README
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/tools/dev/README	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 and modified: branches/gc_massacre/tools/dev/addopstags.pl (from r48798, branches/gc_massacre/tools/build/addopstags.pl)
==============================================================================
--- branches/gc_massacre/tools/build/addopstags.pl	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/dev/addopstags.pl	Sun Sep  5 13:20:27 2010	(r48799)
@@ -8,11 +8,11 @@
 
 =head1 NAME
 
-tools/build/addopstags.pl - add src/ops/*.ops to tags
+tools/dev/addopstags.pl - add src/ops/*.ops to tags
 
 =head1 SYNOPSIS
 
- perl tools/build/addopstags.pl src/ops/*.ops
+ perl tools/dev/addopstags.pl src/ops/*.ops
 
 =head1 DESCRIPTION
 

Modified: branches/gc_massacre/tools/dev/as2c.pl
==============================================================================
--- branches/gc_massacre/tools/dev/as2c.pl	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/tools/dev/as2c.pl	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 and modified: branches/gc_massacre/tools/dev/dump_pbc.pl (from r48798, branches/gc_massacre/tools/util/dump_pbc.pl)
==============================================================================
--- branches/gc_massacre/tools/util/dump_pbc.pl	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/dev/dump_pbc.pl	Sun Sep  5 13:20:27 2010	(r48799)
@@ -5,11 +5,11 @@
 
 =head1 NAME
 
-tools/util/dump_pbc.pl - Weave together PBC disassembly with PIR source
+tools/dev/dump_pbc.pl - Weave together PBC disassembly with PIR source
 
 =head1 SYNOPSIS
 
- perl tools/util/dump_pbc.pl foo.pbc
+ perl tools/dev/dump_pbc.pl foo.pbc
 
 =head1 DESCRIPTION
 

Modified: branches/gc_massacre/tools/dev/faces.pl
==============================================================================
--- branches/gc_massacre/tools/dev/faces.pl	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/tools/dev/faces.pl	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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/gc_massacre/tools/dev/fetch_languages.pl
==============================================================================
--- branches/gc_massacre/tools/dev/fetch_languages.pl	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/tools/dev/fetch_languages.pl	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 and modified: branches/gc_massacre/tools/dev/headerizer.pl (from r48798, branches/gc_massacre/tools/build/headerizer.pl)
==============================================================================
--- branches/gc_massacre/tools/build/headerizer.pl	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/dev/headerizer.pl	Sun Sep  5 13:20:27 2010	(r48799)
@@ -4,51 +4,56 @@
 
 =head1 NAME
 
-tools/build/headerizer.pl - Generates the function header parts of .h
+tools/dev/headerizer.pl - Generates the function header parts of .h
 files from .c files
 
 =head1 SYNOPSIS
 
-    % perl tools/build/headerizer.pl OBJFILES
+  $ perl tools/dev/headerizer.pl [object files]
 
-=head1 DESCRIPTION
+Generates C function declarations based on the function definitions in
+the C source code.
 
-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 DESCRIPTION
 
-=head1 TODO
+The headerizer works off of directives in the source and header files.
 
-* Generate docs from funcs
+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.
 
-* Somehow handle static functions in the source file
+=over 4
 
-=head1 NOTES
+=item C<HEADERIZER BEGIN:> F<source-filename> / C<HEADERIZER END:> F<source-filename>
 
-* the .c files MUST have a /* HEADERIZER HFILE: foo/bar.h */ directive in them
+Marks the beginning and end of a block of declarations in a header file.
 
-* Support for multiple .c files pointing at the same .h file
+    # In file foo.h
+    /* HEADERIZER BEGIN: src/foo.c */
+    /* HEADERIZER END: src/foo.c */
 
-* Does NOT remove all blocks in the .h file, so if a .c file
-disappears, its block is "orphaned" and will remain there.
+    /* HEADERIZER BEGIN: src/bar.c */
+    /* HEADERIZER END: src/bar.c */
 
-=head1 COMMAND-LINE OPTIONS
+=item C<HEADERIZER HFILE:> F<header-filename>
 
-=over 4
+Tells the headerizer where the declarations for the functions should go
 
-=item C<--macro=X>
+    # In file foo.c
+    /* HEADERIZER HFILE: foo.h */
 
-Print a list of all functions that have macro X.  For example, --macro=PARROT_EXPORT.
+    # In file bar.c
+    /* HEADERIZER HFILE: foo.h */
 
 =back
 
-=head1 COMMAND-LINE ARGUMENTS
+=head1 COMMAND-LINE OPTIONS
 
 =over 4
 
-=item C<OBJFILES>
+=item C<--macro=X>
 
-One or more object file names.
+Print a list of all functions that have macro X.  For example, --macro=PARROT_EXPORT.
 
 =back
 
@@ -443,51 +448,13 @@
     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
+# 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

Copied and modified: branches/gc_massacre/tools/dev/mk_language_shell.in (from r48798, branches/gc_massacre/tools/dev/mk_language_shell.pl)
==============================================================================
--- branches/gc_massacre/tools/dev/mk_language_shell.pl	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/dev/mk_language_shell.in	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,4 +1,4 @@
-#! perl
+#!@perl@
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 

Deleted: branches/gc_massacre/tools/dev/mk_language_shell.pl
==============================================================================
--- branches/gc_massacre/tools/dev/mk_language_shell.pl	Sun Sep  5 13:20:27 2010	(r48798)
+++ /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/gc_massacre/tools/dev/mk_native_pbc
==============================================================================
--- branches/gc_massacre/tools/dev/mk_native_pbc	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/tools/dev/mk_native_pbc	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 and modified: branches/gc_massacre/tools/dev/ncidef2pasm.pl (from r48798, branches/gc_massacre/tools/util/ncidef2pasm.pl)
==============================================================================
--- branches/gc_massacre/tools/util/ncidef2pasm.pl	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/dev/ncidef2pasm.pl	Sun Sep  5 13:20:27 2010	(r48799)
@@ -5,11 +5,15 @@
 
 =head1 NAME
 
-F<tools/util/ncidef2asm.pl>
+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
 
-Take an NCI library definition file and turn it into PASM.
+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

Copied and modified: branches/gc_massacre/tools/dev/parrot-config.pir (from r48798, branches/gc_massacre/tools/util/parrot-config.pir)
==============================================================================

Modified: branches/gc_massacre/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/gc_massacre/tools/dev/pbc_to_exe.pir	Sun Sep  5 13:13:07 2010	(r48798)
+++ branches/gc_massacre/tools/dev/pbc_to_exe.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 and modified: branches/gc_massacre/tools/dev/perlcritic-cage.conf (from r48798, branches/gc_massacre/tools/util/perlcritic-cage.conf)
==============================================================================

Copied and modified: branches/gc_massacre/tools/dev/perlcritic.conf (from r48798, branches/gc_massacre/tools/util/perlcritic.conf)
==============================================================================
--- branches/gc_massacre/tools/util/perlcritic.conf	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/dev/perlcritic.conf	Sun Sep  5 13:20:27 2010	(r48799)
@@ -18,7 +18,7 @@
 add_themes = parrot
 
 [CodeLayout::RequireTidyCode]
-perltidyrc = tools/util/perltidy.conf
+perltidyrc = tools/dev/perltidy.conf
 add_themes = extra
 
 [CodeLayout::UseParrotCoda]

Copied and modified: branches/gc_massacre/tools/dev/perltidy.conf (from r48798, branches/gc_massacre/tools/util/perltidy.conf)
==============================================================================

Copied and modified: branches/gc_massacre/tools/dev/update_copyright.pl (from r48798, branches/gc_massacre/tools/util/update_copyright.pl)
==============================================================================
--- branches/gc_massacre/tools/util/update_copyright.pl	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/dev/update_copyright.pl	Sun Sep  5 13:20:27 2010	(r48799)
@@ -9,7 +9,7 @@
 
 =head1 NAME
 
-F<tools/util/update_copyright.pl>
+F<tools/dev/update_copyright.pl>
 
 =head1 DESCRIPTION
 

Added: branches/gc_massacre/tools/release/README
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/gc_massacre/tools/release/README	Sun Sep  5 13:20:27 2010	(r48799)
@@ -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 and modified: branches/gc_massacre/tools/release/crow.pir (from r48798, branches/gc_massacre/tools/util/crow.pir)
==============================================================================
--- branches/gc_massacre/tools/util/crow.pir	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/release/crow.pir	Sun Sep  5 13:20:27 2010	(r48799)
@@ -15,7 +15,7 @@
 =head1 SYNOPSIS
 
   # see
-  % parrot tools/util/crow.pir --help
+  % parrot tools/release/crow.pir --help
 
 =cut
 
@@ -39,7 +39,7 @@
   got_opts:
 
     .local pmc templates
-    templates = 'get_json'('tools/util/templates.json')
+    templates = 'get_json'('tools/release/templates.json')
 
     .local string template, type
     type = opts['type']
@@ -50,7 +50,7 @@
     template = 'get_template'(templates, type)
 
     .local pmc data
-    data = 'get_json'('tools/util/release.json')
+    data = 'get_json'('tools/release/release.json')
 
     .local string version
     version = data['release.version']

Copied and modified: branches/gc_massacre/tools/release/gen_release_info.pl (from r48798, branches/gc_massacre/tools/util/gen_release_info.pl)
==============================================================================
--- branches/gc_massacre/tools/util/gen_release_info.pl	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/release/gen_release_info.pl	Sun Sep  5 13:20:27 2010	(r48799)
@@ -7,7 +7,7 @@
 
 =head1 NAME
 
-tools/util/gen_release_info.pl - generate release info for graphs and charts
+tools/release/gen_release_info.pl - generate release info for graphs and charts
 
 =head1 DESCRIPTION
 

Copied and modified: branches/gc_massacre/tools/release/inc_ver.pir (from r48798, branches/gc_massacre/tools/util/inc_ver.pir)
==============================================================================

Copied and modified: branches/gc_massacre/tools/release/release.json (from r48798, branches/gc_massacre/tools/util/release.json)
==============================================================================
--- branches/gc_massacre/tools/util/release.json	Sun Sep  5 13:13:07 2010	(r48798, copy source)
+++ branches/gc_massacre/tools/release/release.json	Sun Sep  5 13:20:27 2010	(r48799)
@@ -1,9 +1,9 @@
 {
-    "release.version"  : "2.6.0",
-    "release.name"     : "Red-rumped",
+    "release.version"  : "2.7.0",
+    "release.name"     : "Australian King",
     "release.day"      : "Tuesday",
-    "release.date"     : "20 July 2010",
-    "release.nextdate" : "17 August 2010",
+    "release.date"     : "17 August 2010",
+    "release.nextdate" : "21 September 2010",
 
     "web.root"         : "http://parrot.org/",
     "web.source"       : "download",
@@ -11,11 +11,11 @@
     "web.repository"   : "https://svn.parrot.org/parrot/trunk/",
 
     "bugday.day"       : "Saturday",
-    "bugday.date"      : "14 August 2010",
+    "bugday.date"      : "18 September 2010",
 
     "wiki.root"        : "https://trac.parrot.org/parrot/wiki/",
-    "wiki.bugday"      : "bug_day_2010_08_14",
+    "wiki.bugday"      : "bug_day_2010_09_18",
 
-    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/supported/2.6.0/",
+    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/devel/2.7.0/",
     "subversion.root"  : "http://subversion.apache.org/"
 }

Copied and modified: branches/gc_massacre/tools/release/templates.json (from r48798, branches/gc_massacre/tools/util/templates.json)
==============================================================================

Deleted: branches/gc_massacre/tools/util/crow.pir
==============================================================================
--- branches/gc_massacre/tools/util/crow.pir	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,107 +0,0 @@
-#! ./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/util/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/util/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/util/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:

Deleted: branches/gc_massacre/tools/util/dump_pbc.pl
==============================================================================
--- branches/gc_massacre/tools/util/dump_pbc.pl	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,125 +0,0 @@
-#! perl
-
-# Copyright (C) 2008, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-tools/util/dump_pbc.pl - Weave together PBC disassembly with PIR source
-
-=head1 SYNOPSIS
-
- perl tools/util/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:

Deleted: branches/gc_massacre/tools/util/gen_release_info.pl
==============================================================================
--- branches/gc_massacre/tools/util/gen_release_info.pl	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,63 +0,0 @@
-#! perl
-# Copyright (C) 2008, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-
-=head1 NAME
-
-tools/util/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:

Deleted: branches/gc_massacre/tools/util/inc_ver.pir
==============================================================================
--- branches/gc_massacre/tools/util/inc_ver.pir	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,48 +0,0 @@
-#!/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:

Deleted: branches/gc_massacre/tools/util/ncidef2pasm.pl
==============================================================================
--- branches/gc_massacre/tools/util/ncidef2pasm.pl	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,233 +0,0 @@
-#! perl
-
-# Copyright (C) 2003-2007, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-F<tools/util/ncidef2asm.pl>
-
-=head1 DESCRIPTION
-
-Take an NCI library definition file and turn 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:

Deleted: branches/gc_massacre/tools/util/parrot-config.pir
==============================================================================
--- branches/gc_massacre/tools/util/parrot-config.pir	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,103 +0,0 @@
-#!/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:

Deleted: branches/gc_massacre/tools/util/perlcritic-cage.conf
==============================================================================
--- branches/gc_massacre/tools/util/perlcritic-cage.conf	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,37 +0,0 @@
-# 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]

Deleted: branches/gc_massacre/tools/util/perlcritic.conf
==============================================================================
--- branches/gc_massacre/tools/util/perlcritic.conf	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,75 +0,0 @@
-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/util/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

Deleted: branches/gc_massacre/tools/util/perltidy.conf
==============================================================================
--- branches/gc_massacre/tools/util/perltidy.conf	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,15 +0,0 @@
-# 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

Deleted: branches/gc_massacre/tools/util/pgegrep
==============================================================================
--- branches/gc_massacre/tools/util/pgegrep	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,308 +0,0 @@
-#! 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:

Deleted: branches/gc_massacre/tools/util/release.json
==============================================================================
--- branches/gc_massacre/tools/util/release.json	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,21 +0,0 @@
-{
-    "release.version"  : "2.6.0",
-    "release.name"     : "Red-rumped",
-    "release.day"      : "Tuesday",
-    "release.date"     : "20 July 2010",
-    "release.nextdate" : "17 August 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"      : "14 August 2010",
-
-    "wiki.root"        : "https://trac.parrot.org/parrot/wiki/",
-    "wiki.bugday"      : "bug_day_2010_08_14",
-
-    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/supported/2.6.0/",
-    "subversion.root"  : "http://subversion.apache.org/"
-}

Deleted: branches/gc_massacre/tools/util/templates.json
==============================================================================
--- branches/gc_massacre/tools/util/templates.json	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,83 +0,0 @@
-{
-    "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@
-"
-}

Deleted: branches/gc_massacre/tools/util/update_copyright.pl
==============================================================================
--- branches/gc_massacre/tools/util/update_copyright.pl	Sun Sep  5 13:20:27 2010	(r48798)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,63 +0,0 @@
-#! perl
-# $Id$
-
-# Copyright (C) 2008, Parrot Foundation.
-
-use strict;
-use warnings;
-use Fatal qw( open close );
-
-=head1 NAME
-
-F<tools/util/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:


More information about the parrot-commits mailing list