[svn:parrot] r45889 - in branches/avl_string_cache: . compilers/imcc compilers/pge/PGE config/auto config/auto/attributes config/auto/crypto config/auto/gdbm config/gen config/gen/config_pm config/gen/crypto config/gen/makefiles config/gen/platform/generic config/init config/init/hints docs docs/pdds docs/pdds/draft docs/project examples/languages/abc examples/pir/befunge ext/SQLite3 ext/SQLite3/DBDI/Driver ext/SQLite3/t ext/nqp-rx ext/nqp-rx/src/stage0 include/parrot lib/Parrot lib/Parrot/Configure/Options lib/Parrot/Configure/Options/Test lib/Parrot/Configure/Step lib/Parrot/Harness lib/Parrot/Ops2c lib/Parrot/Pmc2c ports/debian ports/fedora ports/fedora/2.3.0 ports/suse ports/suse/2.2.0 ports/ubuntu runtime/parrot/library runtime/parrot/library/ProfTest runtime/parrot/library/Stream runtime/parrot/library/TAP runtime/parrot/library/Test/Builder src src/call src/dynpmc src/gc src/interp src/io src/nci src/ops src/packfile src/pmc src/runcore src/string src/string/c harset src/string/encoding t t/codingstd t/compilers/imcc/syn t/distro t/dynpmc t/examples t/library t/native_pbc t/oo t/op t/pmc t/src t/steps/auto tools/build tools/dev tools/docs tools/util

bacek at svn.parrot.org bacek at svn.parrot.org
Thu Apr 22 09:55:40 UTC 2010


Author: bacek
Date: Thu Apr 22 09:55:26 2010
New Revision: 45889
URL: https://trac.parrot.org/parrot/changeset/45889

Log:
Sync branch with trunk.

Conflicts:
	include/parrot/string_funcs.h
	src/packfile/pf_items.c
	src/string/api.c

Added:
   branches/avl_string_cache/.gitignore
   branches/avl_string_cache/config/gen/config_pm/config_lib_pir.in
   branches/avl_string_cache/ports/fedora/2.3.0/
   branches/avl_string_cache/ports/fedora/2.3.0/parrot.desk.in.tar.gz
   branches/avl_string_cache/ports/fedora/2.3.0/parrot.patch
   branches/avl_string_cache/ports/fedora/2.3.0/parrot.spec
      - copied, changed from r45357, branches/avl_string_cache/ports/fedora/parrot.spec.fedora
   branches/avl_string_cache/ports/suse/2.2.0/
   branches/avl_string_cache/ports/suse/2.2.0/parrot.diff
   branches/avl_string_cache/ports/suse/2.2.0/parrot.spec
   branches/avl_string_cache/runtime/parrot/library/TAP/
   branches/avl_string_cache/runtime/parrot/library/TAP/Formatter.pir
   branches/avl_string_cache/runtime/parrot/library/TAP/Harness.pir
   branches/avl_string_cache/runtime/parrot/library/TAP/Parser.pir
   branches/avl_string_cache/runtime/parrot/library/osutils.pir
   branches/avl_string_cache/t/harness.pir
   branches/avl_string_cache/t/library/osutils.t
   branches/avl_string_cache/t/library/tap_parser.t
   branches/avl_string_cache/t/pmc/namespace-subs.t
   branches/avl_string_cache/tools/dev/tapir.pir
   branches/avl_string_cache/tools/docs/book-to-latex.pl
   branches/avl_string_cache/tools/docs/filename_and_chapter.pl
Deleted:
   branches/avl_string_cache/config/auto/crypto.pm
   branches/avl_string_cache/config/auto/crypto/crypto_c.in
   branches/avl_string_cache/config/auto/gdbm.pm
   branches/avl_string_cache/config/auto/gdbm/gdbm_c.in
   branches/avl_string_cache/config/gen/config_pm/config_lib_pasm.in
   branches/avl_string_cache/config/gen/crypto.pm
   branches/avl_string_cache/config/gen/crypto/digest_pmc.in
   branches/avl_string_cache/config/gen/crypto/digest_t.in
   branches/avl_string_cache/ext/SQLite3/DBDI.pm
   branches/avl_string_cache/ext/SQLite3/DBDI/Driver/SQLite3.pm
   branches/avl_string_cache/ext/SQLite3/Makefile.PL
   branches/avl_string_cache/ext/SQLite3/Makefile.in
   branches/avl_string_cache/ext/SQLite3/SQLite3.pir
   branches/avl_string_cache/ext/SQLite3/gen_sqlite3.pl
   branches/avl_string_cache/ext/SQLite3/t/test.p6
   branches/avl_string_cache/ext/SQLite3/test.pir
   branches/avl_string_cache/ext/nqp-rx/.gitignore
   branches/avl_string_cache/ports/fedora/parrot.patch
   branches/avl_string_cache/ports/fedora/parrot.spec.fedora
   branches/avl_string_cache/ports/suse/parrot.spec.suse
   branches/avl_string_cache/runtime/parrot/library/SQLite3.pir
   branches/avl_string_cache/src/dynpmc/gdbmhash.pmc
   branches/avl_string_cache/src/pmc/retcontinuation.pmc
   branches/avl_string_cache/t/dynpmc/gdbmhash.t
   branches/avl_string_cache/t/pmc/retcontinuation.t
   branches/avl_string_cache/t/steps/auto/crypto-01.t
   branches/avl_string_cache/t/steps/auto/gdbm-01.t
Modified:
   branches/avl_string_cache/CREDITS
   branches/avl_string_cache/ChangeLog
   branches/avl_string_cache/Configure.pl
   branches/avl_string_cache/DEPRECATED.pod
   branches/avl_string_cache/MANIFEST
   branches/avl_string_cache/MANIFEST.SKIP
   branches/avl_string_cache/MANIFEST.generated
   branches/avl_string_cache/META.yml
   branches/avl_string_cache/NEWS
   branches/avl_string_cache/PBC_COMPAT
   branches/avl_string_cache/README
   branches/avl_string_cache/README_cygwin.pod
   branches/avl_string_cache/README_win32.pod
   branches/avl_string_cache/RESPONSIBLE_PARTIES
   branches/avl_string_cache/VERSION
   branches/avl_string_cache/compilers/imcc/imcc.l
   branches/avl_string_cache/compilers/imcc/imcc.y
   branches/avl_string_cache/compilers/imcc/imclexer.c
   branches/avl_string_cache/compilers/imcc/imcparser.c
   branches/avl_string_cache/compilers/imcc/imcparser.h
   branches/avl_string_cache/compilers/imcc/instructions.c
   branches/avl_string_cache/compilers/imcc/main.c
   branches/avl_string_cache/compilers/imcc/optimizer.c
   branches/avl_string_cache/compilers/imcc/parser_util.c
   branches/avl_string_cache/compilers/imcc/pbc.c
   branches/avl_string_cache/compilers/imcc/symreg.h
   branches/avl_string_cache/compilers/pge/PGE/Exp.pir
   branches/avl_string_cache/compilers/pge/PGE/Regex.pir
   branches/avl_string_cache/config/auto/arch.pm
   branches/avl_string_cache/config/auto/attributes.pm
   branches/avl_string_cache/config/auto/attributes/test_c.in
   branches/avl_string_cache/config/auto/warnings.pm
   branches/avl_string_cache/config/gen/config_pm.pm
   branches/avl_string_cache/config/gen/config_pm/config_pir.in
   branches/avl_string_cache/config/gen/core_pmcs.pm
   branches/avl_string_cache/config/gen/makefiles/docs.in
   branches/avl_string_cache/config/gen/makefiles/dynpmc.in
   branches/avl_string_cache/config/gen/makefiles/root.in
   branches/avl_string_cache/config/gen/opengl.pm
   branches/avl_string_cache/config/gen/platform/generic/env.c
   branches/avl_string_cache/config/init/defaults.pm
   branches/avl_string_cache/config/init/hints/cygwin.pm
   branches/avl_string_cache/docs/embed.pod
   branches/avl_string_cache/docs/parrothist.pod
   branches/avl_string_cache/docs/pdds/draft/pdd01_overview.pod
   branches/avl_string_cache/docs/pdds/draft/pdd05_opfunc.pod
   branches/avl_string_cache/docs/pdds/draft/pdd06_pasm.pod
   branches/avl_string_cache/docs/pdds/draft/pdd08_keys.pod
   branches/avl_string_cache/docs/pdds/draft/pdd10_embedding.pod
   branches/avl_string_cache/docs/pdds/draft/pdd11_extending.pod
   branches/avl_string_cache/docs/pdds/draft/pdd14_numbers.pod
   branches/avl_string_cache/docs/pdds/draft/pdd16_native_call.pod
   branches/avl_string_cache/docs/pdds/draft/pdd29_compiler_tools.pod
   branches/avl_string_cache/docs/pdds/draft/pdd31_hll.pod
   branches/avl_string_cache/docs/pdds/draft/pdd31_hll_interop.pod
   branches/avl_string_cache/docs/pdds/pdd00_pdd.pod
   branches/avl_string_cache/docs/pdds/pdd03_calling_conventions.pod
   branches/avl_string_cache/docs/pdds/pdd07_codingstd.pod
   branches/avl_string_cache/docs/pdds/pdd09_gc.pod
   branches/avl_string_cache/docs/pdds/pdd15_objects.pod
   branches/avl_string_cache/docs/pdds/pdd17_pmc.pod
   branches/avl_string_cache/docs/pdds/pdd18_security.pod
   branches/avl_string_cache/docs/pdds/pdd19_pir.pod
   branches/avl_string_cache/docs/pdds/pdd20_lexical_vars.pod
   branches/avl_string_cache/docs/pdds/pdd21_namespaces.pod
   branches/avl_string_cache/docs/pdds/pdd22_io.pod
   branches/avl_string_cache/docs/pdds/pdd23_exceptions.pod
   branches/avl_string_cache/docs/pdds/pdd24_events.pod
   branches/avl_string_cache/docs/pdds/pdd25_concurrency.pod
   branches/avl_string_cache/docs/pdds/pdd26_ast.pod
   branches/avl_string_cache/docs/pdds/pdd27_multiple_dispatch.pod
   branches/avl_string_cache/docs/pdds/pdd28_strings.pod
   branches/avl_string_cache/docs/pdds/pdd30_install.pod
   branches/avl_string_cache/docs/pdds/pdd_template.pod
   branches/avl_string_cache/docs/project/release_manager_guide.pod
   branches/avl_string_cache/examples/languages/abc/setup.pir
   branches/avl_string_cache/examples/pir/befunge/setup.pir
   branches/avl_string_cache/ext/nqp-rx/src/stage0/HLL-s0.pir
   branches/avl_string_cache/ext/nqp-rx/src/stage0/NQP-s0.pir
   branches/avl_string_cache/ext/nqp-rx/src/stage0/P6Regex-s0.pir
   branches/avl_string_cache/include/parrot/call.h
   branches/avl_string_cache/include/parrot/charset.h
   branches/avl_string_cache/include/parrot/compiler.h
   branches/avl_string_cache/include/parrot/embed.h
   branches/avl_string_cache/include/parrot/encoding.h
   branches/avl_string_cache/include/parrot/exceptions.h
   branches/avl_string_cache/include/parrot/exit.h
   branches/avl_string_cache/include/parrot/extend.h
   branches/avl_string_cache/include/parrot/gc_api.h
   branches/avl_string_cache/include/parrot/global_setup.h
   branches/avl_string_cache/include/parrot/hash.h
   branches/avl_string_cache/include/parrot/imcc.h
   branches/avl_string_cache/include/parrot/interpreter.h
   branches/avl_string_cache/include/parrot/io.h
   branches/avl_string_cache/include/parrot/io_unix.h
   branches/avl_string_cache/include/parrot/key.h
   branches/avl_string_cache/include/parrot/misc.h
   branches/avl_string_cache/include/parrot/nci.h
   branches/avl_string_cache/include/parrot/oo.h
   branches/avl_string_cache/include/parrot/packfile.h
   branches/avl_string_cache/include/parrot/pmc.h
   branches/avl_string_cache/include/parrot/runcore_api.h
   branches/avl_string_cache/include/parrot/string_funcs.h
   branches/avl_string_cache/include/parrot/string_primitives.h
   branches/avl_string_cache/include/parrot/sub.h
   branches/avl_string_cache/include/parrot/vtables.h
   branches/avl_string_cache/lib/Parrot/Configure/Options/Conf.pm
   branches/avl_string_cache/lib/Parrot/Configure/Options/Test/Prepare.pm
   branches/avl_string_cache/lib/Parrot/Configure/Step/List.pm
   branches/avl_string_cache/lib/Parrot/Distribution.pm
   branches/avl_string_cache/lib/Parrot/Harness/Smoke.pm
   branches/avl_string_cache/lib/Parrot/Headerizer.pm
   branches/avl_string_cache/lib/Parrot/Manifest.pm
   branches/avl_string_cache/lib/Parrot/Ops2c/Utils.pm
   branches/avl_string_cache/lib/Parrot/Pmc2c/PCCMETHOD.pm
   branches/avl_string_cache/lib/Parrot/Pmc2c/PMCEmitter.pm
   branches/avl_string_cache/lib/Parrot/Pmc2c/Pmc2cMain.pm
   branches/avl_string_cache/ports/debian/control.in
   branches/avl_string_cache/ports/ubuntu/control.in
   branches/avl_string_cache/runtime/parrot/library/P6object.pir
   branches/avl_string_cache/runtime/parrot/library/ProfTest/Matcher.nqp
   branches/avl_string_cache/runtime/parrot/library/ProfTest/PIRProfile.nqp
   branches/avl_string_cache/runtime/parrot/library/ProfTest/Want.nqp
   branches/avl_string_cache/runtime/parrot/library/Stream/Base.pir
   branches/avl_string_cache/runtime/parrot/library/Test/Builder/Test.pir
   branches/avl_string_cache/runtime/parrot/library/distutils.pir
   branches/avl_string_cache/runtime/parrot/library/pcore.pir
   branches/avl_string_cache/src/call/args.c
   branches/avl_string_cache/src/call/context.c
   branches/avl_string_cache/src/call/ops.c
   branches/avl_string_cache/src/call/pcc.c
   branches/avl_string_cache/src/debug.c
   branches/avl_string_cache/src/dynext.c
   branches/avl_string_cache/src/embed.c
   branches/avl_string_cache/src/exceptions.c
   branches/avl_string_cache/src/exit.c
   branches/avl_string_cache/src/extend.c
   branches/avl_string_cache/src/gc/alloc_resources.c
   branches/avl_string_cache/src/gc/api.c
   branches/avl_string_cache/src/gc/gc_inf.c
   branches/avl_string_cache/src/gc/gc_ms.c
   branches/avl_string_cache/src/gc/gc_private.h
   branches/avl_string_cache/src/gc/mark_sweep.c
   branches/avl_string_cache/src/global.c
   branches/avl_string_cache/src/global_setup.c
   branches/avl_string_cache/src/hash.c
   branches/avl_string_cache/src/hll.c
   branches/avl_string_cache/src/interp/inter_create.c
   branches/avl_string_cache/src/interp/inter_misc.c
   branches/avl_string_cache/src/io/api.c
   branches/avl_string_cache/src/io/buffer.c
   branches/avl_string_cache/src/io/filehandle.c
   branches/avl_string_cache/src/io/unix.c
   branches/avl_string_cache/src/io/utf8.c
   branches/avl_string_cache/src/io/win32.c
   branches/avl_string_cache/src/key.c
   branches/avl_string_cache/src/library.c
   branches/avl_string_cache/src/main.c
   branches/avl_string_cache/src/multidispatch.c
   branches/avl_string_cache/src/nci/api.c
   branches/avl_string_cache/src/nci/core_thunks.c
   branches/avl_string_cache/src/nci/extra_thunks.c
   branches/avl_string_cache/src/oo.c
   branches/avl_string_cache/src/ops/bit.ops
   branches/avl_string_cache/src/ops/core.ops
   branches/avl_string_cache/src/ops/ops.num
   branches/avl_string_cache/src/ops/set.ops
   branches/avl_string_cache/src/ops/string.ops
   branches/avl_string_cache/src/ops/var.ops
   branches/avl_string_cache/src/packdump.c
   branches/avl_string_cache/src/packfile.c
   branches/avl_string_cache/src/packfile/pf_items.c
   branches/avl_string_cache/src/parrot_debugger.c
   branches/avl_string_cache/src/pbc_dump.c
   branches/avl_string_cache/src/pmc.c
   branches/avl_string_cache/src/pmc/bigint.pmc
   branches/avl_string_cache/src/pmc/bignum.pmc
   branches/avl_string_cache/src/pmc/callcontext.pmc
   branches/avl_string_cache/src/pmc/class.pmc
   branches/avl_string_cache/src/pmc/codestring.pmc
   branches/avl_string_cache/src/pmc/complex.pmc
   branches/avl_string_cache/src/pmc/continuation.pmc
   branches/avl_string_cache/src/pmc/coroutine.pmc
   branches/avl_string_cache/src/pmc/default.pmc
   branches/avl_string_cache/src/pmc/env.pmc
   branches/avl_string_cache/src/pmc/eventhandler.pmc
   branches/avl_string_cache/src/pmc/filehandle.pmc
   branches/avl_string_cache/src/pmc/fixedbooleanarray.pmc
   branches/avl_string_cache/src/pmc/fixedintegerarray.pmc
   branches/avl_string_cache/src/pmc/fixedpmcarray.pmc
   branches/avl_string_cache/src/pmc/fixedstringarray.pmc
   branches/avl_string_cache/src/pmc/hash.pmc
   branches/avl_string_cache/src/pmc/hashiterator.pmc
   branches/avl_string_cache/src/pmc/imageio.pmc
   branches/avl_string_cache/src/pmc/integer.pmc
   branches/avl_string_cache/src/pmc/key.pmc
   branches/avl_string_cache/src/pmc/lexinfo.pmc
   branches/avl_string_cache/src/pmc/namespace.pmc
   branches/avl_string_cache/src/pmc/object.pmc
   branches/avl_string_cache/src/pmc/opcode.pmc
   branches/avl_string_cache/src/pmc/orderedhash.pmc
   branches/avl_string_cache/src/pmc/packfile.pmc
   branches/avl_string_cache/src/pmc/packfileannotations.pmc
   branches/avl_string_cache/src/pmc/packfiledirectory.pmc
   branches/avl_string_cache/src/pmc/parrotinterpreter.pmc
   branches/avl_string_cache/src/pmc/pmcproxy.pmc
   branches/avl_string_cache/src/pmc/resizablepmcarray.pmc
   branches/avl_string_cache/src/pmc/resizablestringarray.pmc
   branches/avl_string_cache/src/pmc/role.pmc
   branches/avl_string_cache/src/pmc/scalar.pmc
   branches/avl_string_cache/src/pmc/schedulermessage.pmc
   branches/avl_string_cache/src/pmc/string.pmc
   branches/avl_string_cache/src/pmc/stringhandle.pmc
   branches/avl_string_cache/src/pmc/sub.pmc
   branches/avl_string_cache/src/pmc/unmanagedstruct.pmc
   branches/avl_string_cache/src/pmc_freeze.c
   branches/avl_string_cache/src/runcore/cores.c
   branches/avl_string_cache/src/runcore/main.c
   branches/avl_string_cache/src/runcore/profiling.c
   branches/avl_string_cache/src/runcore/trace.c
   branches/avl_string_cache/src/scheduler.c
   branches/avl_string_cache/src/spf_render.c
   branches/avl_string_cache/src/spf_vtable.c
   branches/avl_string_cache/src/string/api.c
   branches/avl_string_cache/src/string/charset.c
   branches/avl_string_cache/src/string/charset/ascii.c
   branches/avl_string_cache/src/string/charset/ascii.h
   branches/avl_string_cache/src/string/charset/binary.c
   branches/avl_string_cache/src/string/charset/binary.h
   branches/avl_string_cache/src/string/charset/iso-8859-1.c
   branches/avl_string_cache/src/string/charset/iso-8859-1.h
   branches/avl_string_cache/src/string/charset/unicode.c
   branches/avl_string_cache/src/string/charset/unicode.h
   branches/avl_string_cache/src/string/encoding.c
   branches/avl_string_cache/src/string/encoding/fixed_8.c
   branches/avl_string_cache/src/string/encoding/fixed_8.h
   branches/avl_string_cache/src/string/encoding/ucs2.c
   branches/avl_string_cache/src/string/encoding/ucs2.h
   branches/avl_string_cache/src/string/encoding/utf16.c
   branches/avl_string_cache/src/string/encoding/utf16.h
   branches/avl_string_cache/src/string/encoding/utf8.c
   branches/avl_string_cache/src/string/encoding/utf8.h
   branches/avl_string_cache/src/string/primitives.c
   branches/avl_string_cache/src/sub.c
   branches/avl_string_cache/src/thread.c
   branches/avl_string_cache/src/utils.c
   branches/avl_string_cache/src/vtables.c
   branches/avl_string_cache/t/codingstd/c_function_docs.t
   branches/avl_string_cache/t/compilers/imcc/syn/file.t
   branches/avl_string_cache/t/compilers/imcc/syn/subflags.t
   branches/avl_string_cache/t/distro/file_metadata.t
   branches/avl_string_cache/t/examples/tutorial.t
   branches/avl_string_cache/t/harness
   branches/avl_string_cache/t/library/p6object.t
   branches/avl_string_cache/t/library/test_builder_tester.t
   branches/avl_string_cache/t/library/test_more.t
   branches/avl_string_cache/t/native_pbc/annotations.pbc
   branches/avl_string_cache/t/native_pbc/integer_1.pbc
   branches/avl_string_cache/t/native_pbc/number_1.pbc
   branches/avl_string_cache/t/native_pbc/string_1.pbc
   branches/avl_string_cache/t/oo/composition.t
   branches/avl_string_cache/t/oo/mro-c3.t
   branches/avl_string_cache/t/oo/proxy.t
   branches/avl_string_cache/t/op/calling.t
   branches/avl_string_cache/t/op/fetch.t
   branches/avl_string_cache/t/op/gc.t
   branches/avl_string_cache/t/op/string.t
   branches/avl_string_cache/t/op/vivify.t
   branches/avl_string_cache/t/pmc/class.t
   branches/avl_string_cache/t/pmc/context.t
   branches/avl_string_cache/t/pmc/fixedpmcarray.t
   branches/avl_string_cache/t/pmc/freeze.t
   branches/avl_string_cache/t/pmc/namespace-old.t
   branches/avl_string_cache/t/pmc/pmcproxy.t
   branches/avl_string_cache/t/pmc/ro.t
   branches/avl_string_cache/t/pmc/string.t
   branches/avl_string_cache/t/src/basic.t
   branches/avl_string_cache/t/src/embed.t
   branches/avl_string_cache/t/src/extend.t
   branches/avl_string_cache/t/src/warnings.t
   branches/avl_string_cache/t/steps/auto/arch-01.t
   branches/avl_string_cache/tools/build/headerizer.pl
   branches/avl_string_cache/tools/dev/mk_inno.pl
   branches/avl_string_cache/tools/dev/mk_manifest_and_skip.pl
   branches/avl_string_cache/tools/dev/nci_thunk_gen.pir
   branches/avl_string_cache/tools/dev/pbc_to_exe.pir
   branches/avl_string_cache/tools/util/release.json

Added: branches/avl_string_cache/.gitignore
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/.gitignore	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,604 @@
+# ex: set ro:
+# $Id
+# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 21 10:28:38 2010 UT
+#
+# This file should contain a transcript of the svn:ignore properties
+# of the directories in the Parrot subversion repository. (Needed for
+# distributions or in general when svn is not available).
+# See docs/submissions.pod on how to recreate this file after SVN
+# has been told about new generated files.
+#
+# Ignore the SVN directories
+\B.svn\b
+
+# ports/ should not go into release tarballs
+ports
+# generated from svn:ignore of './'
+*.core
+*.def
+*.exe
+*.exp
+*.ilk
+*.lib
+*.manifest
+*.ncb
+*.o
+*.obj
+*.patch
+*.pdb
+*.sln
+*.sto
+*.suo
+*.tmp
+*.vcproj*
+.git
+.parrot_current_rev
+CFLAGS
+MANIFEST.configure.generated
+Makefile
+TAGS
+all_cstring.str
+blib
+config_lib.pir
+cover_db
+install_config.fpmc
+installable*
+libparrot.def
+libparrot.dll
+miniparrot
+myconfig
+parrot
+parrot-nqp
+parrot-nqp.c
+parrot-nqp.pbc
+parrot.ilk
+parrot.iss
+parrot.pc
+parrot.pdb
+parrot_config
+parrot_config.c
+parrot_config.pbc
+parrot_debugger
+parrot_nci_thunk_gen
+parrot_nci_thunk_gen.c
+parrot_nci_thunk_gen.pbc
+parrot_test_run.tar.gz
+pbc_disassemble
+pbc_dump
+pbc_info
+pbc_merge
+pbc_to_exe
+pbc_to_exe.*
+perl6
+pirc
+tags
+tapir
+tapir.*
+temp.file
+test
+test.c
+test.cco
+test.err
+test.ilk
+test.ldo
+test.out
+test.pdb
+vc60.pdb
+vc70.pdb
+vtable.dump
+# generated from svn:ignore of 'compilers/data_json/'
+compilers/data_json/data_json.pbc
+# generated from svn:ignore of 'compilers/data_json/data_json/'
+compilers/data_json/data_json/*.pbc
+compilers/data_json/data_json/*.pir
+# generated from svn:ignore of 'compilers/imcc/'
+compilers/imcc/*.flag
+compilers/imcc/*.o
+compilers/imcc/*.obj
+compilers/imcc/*.tmp
+compilers/imcc/Rules.mak
+compilers/imcc/imcc
+compilers/imcc/imclexer.c
+compilers/imcc/imcparser.c
+compilers/imcc/imcparser.h
+compilers/imcc/imcparser.output
+# generated from svn:ignore of 'compilers/json/'
+compilers/json/JSON.pbc
+# generated from svn:ignore of 'compilers/json/JSON/'
+compilers/json/JSON/*.pbc
+compilers/json/JSON/*.pir
+# generated from svn:ignore of 'compilers/ncigen/'
+compilers/ncigen/Makefile
+compilers/ncigen/ncigen.pbc
+# generated from svn:ignore of 'compilers/ncigen/src/'
+compilers/ncigen/src/gen_actions.pir
+compilers/ncigen/src/gen_builtins.pir
+compilers/ncigen/src/gen_grammar.pir
+# generated from svn:ignore of 'compilers/nqp/'
+compilers/nqp/nqp.pbc
+# generated from svn:ignore of 'compilers/nqp/bootstrap/'
+compilers/nqp/bootstrap/gen_actions.pir
+compilers/nqp/bootstrap/nqp.pbc
+# generated from svn:ignore of 'compilers/nqp/src/'
+compilers/nqp/src/Grammar_gen.pir
+# generated from svn:ignore of 'compilers/pct/src/PAST/'
+compilers/pct/src/PAST/*.pbc
+# generated from svn:ignore of 'compilers/pct/src/PCT/'
+compilers/pct/src/PCT/*.pbc
+# generated from svn:ignore of 'compilers/pct/src/POST/'
+compilers/pct/src/POST/*.pbc
+compilers/pct/src/POST/Grammar_gen.pir
+# generated from svn:ignore of 'compilers/pge/'
+compilers/pge/PGE.pbc
+# generated from svn:ignore of 'compilers/pge/PGE/'
+compilers/pge/PGE/*.dll
+compilers/pge/PGE/builtins_gen.pir
+# generated from svn:ignore of 'compilers/pirc/'
+compilers/pirc/*.o
+compilers/pirc/*.obj
+compilers/pirc/*.pbd
+compilers/pirc/pirc
+compilers/pirc/pirc.exe
+# generated from svn:ignore of 'compilers/pirc/t/'
+compilers/pirc/t/basic_?.pir
+compilers/pirc/t/basic_??.pir
+compilers/pirc/t/heredoc_?.pir
+compilers/pirc/t/macro_?.pir
+compilers/pirc/t/stmts_?.pir
+compilers/pirc/t/subflags_?.pir
+# generated from svn:ignore of 'compilers/tge/'
+compilers/tge/tgc.pbc
+# generated from svn:ignore of 'compilers/tge/TGE/'
+compilers/tge/TGE/Parser.pir
+# generated from svn:ignore of 'docs/'
+docs/*.tmp
+docs/Makefile
+docs/doc-prep
+docs/html
+docs/packfile-c.pod
+docs/packfile-perl.pod
+# generated from svn:ignore of 'docs/book/'
+docs/book/*.html
+# generated from svn:ignore of 'docs/ops/'
+docs/ops/*.pod
+# generated from svn:ignore of 'editor/'
+editor/Makefile
+editor/imc.vim
+editor/imcc.xml
+editor/pir.vim
+# generated from svn:ignore of 'examples/languages/abc/'
+examples/languages/abc/*.c
+examples/languages/abc/*.exe
+examples/languages/abc/*.iss
+examples/languages/abc/*.o
+examples/languages/abc/*.obj
+examples/languages/abc/*.pbc
+examples/languages/abc/MANIFEST
+examples/languages/abc/abc
+examples/languages/abc/installable_abc
+examples/languages/abc/man
+# generated from svn:ignore of 'examples/languages/abc/src/'
+examples/languages/abc/src/gen_actions.pir
+examples/languages/abc/src/gen_builtins.pir
+examples/languages/abc/src/gen_grammar.pir
+# generated from svn:ignore of 'examples/languages/abc/t/'
+examples/languages/abc/t/*_*.out
+examples/languages/abc/t/*_*.pir
+# generated from svn:ignore of 'examples/languages/squaak/'
+examples/languages/squaak/*.c
+examples/languages/squaak/*.exe
+examples/languages/squaak/*.iss
+examples/languages/squaak/*.o
+examples/languages/squaak/*.obj
+examples/languages/squaak/*.pbc
+examples/languages/squaak/MANIFEST
+examples/languages/squaak/installable_squaak
+examples/languages/squaak/squaak
+# generated from svn:ignore of 'examples/languages/squaak/src/'
+examples/languages/squaak/src/gen_*.pir
+# generated from svn:ignore of 'examples/mops/'
+examples/mops/*.o
+examples/mops/mops
+# generated from svn:ignore of 'examples/nci/'
+examples/nci/*.pbc
+# generated from svn:ignore of 'examples/pasm/'
+examples/pasm/hello
+examples/pasm/hello.o
+examples/pasm/hello.pbc
+# generated from svn:ignore of 'examples/pir/befunge/'
+examples/pir/befunge/*.c
+examples/pir/befunge/*.exe
+examples/pir/befunge/*.iss
+examples/pir/befunge/*.o
+examples/pir/befunge/*.obj
+examples/pir/befunge/*.pbc
+examples/pir/befunge/MANIFEST
+examples/pir/befunge/befunge
+examples/pir/befunge/installable_befunge
+# generated from svn:ignore of 'ext/'
+ext/Makefile
+# generated from svn:ignore of 'ext/Parrot-Embed/'
+ext/Parrot-Embed/*.bs
+ext/Parrot-Embed/*.bundle
+ext/Parrot-Embed/*.c
+ext/Parrot-Embed/*.def
+ext/Parrot-Embed/*.dll
+ext/Parrot-Embed/*.dump
+ext/Parrot-Embed/*.dylib
+ext/Parrot-Embed/*.exe
+ext/Parrot-Embed/*.exp
+ext/Parrot-Embed/*.h
+ext/Parrot-Embed/*.ilk
+ext/Parrot-Embed/*.lib
+ext/Parrot-Embed/*.manifest
+ext/Parrot-Embed/*.o
+ext/Parrot-Embed/*.obj
+ext/Parrot-Embed/*.old
+ext/Parrot-Embed/*.pdb
+ext/Parrot-Embed/*.pdb
+ext/Parrot-Embed/*.so
+ext/Parrot-Embed/*.tmp
+ext/Parrot-Embed/*.xs
+ext/Parrot-Embed/Build
+ext/Parrot-Embed/Build.bat
+ext/Parrot-Embed/Makefile
+ext/Parrot-Embed/Makefile.PL
+ext/Parrot-Embed/_build
+ext/Parrot-Embed/blib
+ext/Parrot-Embed/dll.base
+ext/Parrot-Embed/pm_to_blib
+# generated from svn:ignore of 'ext/Parrot-Embed/lib/Parrot/'
+ext/Parrot-Embed/lib/Parrot/*.c
+ext/Parrot-Embed/lib/Parrot/*.obj
+# generated from svn:ignore of 'ext/Parrot-Embed/t/'
+ext/Parrot-Embed/t/*.pbc
+# generated from svn:ignore of 'include/parrot/'
+include/parrot/*.tmp
+include/parrot/config.h
+include/parrot/core_pmcs.h
+include/parrot/extend_vtable.h
+include/parrot/feature.h
+include/parrot/has_header.h
+include/parrot/opsenum.h
+include/parrot/pbcversion.h
+include/parrot/platform.h
+include/parrot/platform_interface.h
+include/parrot/platform_limits.h
+include/parrot/vtable.h
+# generated from svn:ignore of 'include/parrot/oplib/'
+include/parrot/oplib/*_ops.h
+include/parrot/oplib/*_ops_cg*.h
+include/parrot/oplib/*_ops_switch.h
+include/parrot/oplib/ops.h
+# generated from svn:ignore of 'include/pmc/'
+include/pmc/*.h
+# generated from svn:ignore of 'lib/'
+lib/DumbLink.pm
+# generated from svn:ignore of 'lib/Parrot/'
+lib/Parrot/*.tmp
+lib/Parrot/Jit.pm
+lib/Parrot/Makefile
+lib/Parrot/OpLib
+lib/Parrot/PMC.pm
+lib/Parrot/PakFile2.bs
+lib/Parrot/PakFile2.c
+lib/Parrot/blib
+lib/Parrot/pm_to_blib
+# generated from svn:ignore of 'lib/Parrot/Config/'
+lib/Parrot/Config/Generated.pm
+# generated from svn:ignore of 'lib/Parrot/Pmc2c/'
+lib/Parrot/Pmc2c/PCCMETHOD_BITS.pm
+# generated from svn:ignore of 'runtime/parrot/dynext/'
+runtime/parrot/dynext/*.bundle
+runtime/parrot/dynext/*.def
+runtime/parrot/dynext/*.dll
+runtime/parrot/dynext/*.dylib
+runtime/parrot/dynext/*.exe
+runtime/parrot/dynext/*.exp
+runtime/parrot/dynext/*.ilk
+runtime/parrot/dynext/*.lib
+runtime/parrot/dynext/*.manifest
+runtime/parrot/dynext/*.obj
+runtime/parrot/dynext/*.pdb
+runtime/parrot/dynext/*.so
+runtime/parrot/dynext/libnci.*
+# generated from svn:ignore of 'runtime/parrot/include/'
+runtime/parrot/include/*.fpmc
+runtime/parrot/include/*.pasm
+runtime/parrot/include/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/'
+runtime/parrot/library/*.pbc
+runtime/parrot/library/OpenGL_funcs.pir
+runtime/parrot/library/PAST
+runtime/parrot/library/config.pir
+# generated from svn:ignore of 'runtime/parrot/library/CGI/'
+runtime/parrot/library/CGI/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Config/'
+runtime/parrot/library/Config/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Configure/'
+runtime/parrot/library/Configure/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Data/'
+runtime/parrot/library/Data/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Data/Dumper/'
+runtime/parrot/library/Data/Dumper/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Digest/'
+runtime/parrot/library/Digest/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Getopt/'
+runtime/parrot/library/Getopt/Obj.pbc
+# generated from svn:ignore of 'runtime/parrot/library/MIME/'
+runtime/parrot/library/MIME/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Math/'
+runtime/parrot/library/Math/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/NCI/'
+runtime/parrot/library/NCI/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/OpenGL/'
+runtime/parrot/library/OpenGL/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/PCT/'
+runtime/parrot/library/PCT/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/PGE/'
+runtime/parrot/library/PGE/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Parrot/'
+runtime/parrot/library/Parrot/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/ProfTest/'
+runtime/parrot/library/ProfTest/*.pbc
+runtime/parrot/library/ProfTest/*.pir
+# generated from svn:ignore of 'runtime/parrot/library/Stream/'
+runtime/parrot/library/Stream/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/String/'
+runtime/parrot/library/String/Utils.pbc
+# generated from svn:ignore of 'runtime/parrot/library/TAP/'
+runtime/parrot/library/TAP/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Tcl/'
+runtime/parrot/library/Tcl/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Test/'
+runtime/parrot/library/Test/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Test/Builder/'
+runtime/parrot/library/Test/Builder/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/YAML/'
+runtime/parrot/library/YAML/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/YAML/Dumper/'
+runtime/parrot/library/YAML/Dumper/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/YAML/Parser/'
+runtime/parrot/library/YAML/Parser/*.pbc
+# generated from svn:ignore of 'src/'
+src/*.o
+src/*.obj
+src/*.str
+src/asmfun.*
+src/core_pmcs.c
+src/exec_cpu.c
+src/exec_dep.c
+src/exec_dep.h
+src/extend_vtable.c
+src/extra_nci_thunks.c
+src/fingerprint.c
+src/glut_callbacks.c
+src/glut_nci_thunks.c
+src/glut_nci_thunks.nci
+src/install_config.c
+src/jit_cpu.c
+src/jit_defs.c
+src/jit_emit.h
+src/null_config.c
+src/parrot_config.c
+src/parrot_config.h
+src/platform.c
+src/platform_asm.s
+src/revision.c
+# generated from svn:ignore of 'src/atomic/'
+src/atomic/*.gcda
+src/atomic/*.o
+# generated from svn:ignore of 'src/call/'
+src/call/*.o
+src/call/*.obj
+src/call/*.str
+# generated from svn:ignore of 'src/dynoplibs/'
+src/dynoplibs/*.bundle
+src/dynoplibs/*.c
+src/dynoplibs/*.dll
+src/dynoplibs/*.exp
+src/dynoplibs/*.h
+src/dynoplibs/*.ilk
+src/dynoplibs/*.lib
+src/dynoplibs/*.manifest
+src/dynoplibs/*.o
+src/dynoplibs/*.obj
+src/dynoplibs/*.pdb
+src/dynoplibs/*.so
+src/dynoplibs/Defines.mak
+src/dynoplibs/Rules.mak
+# generated from svn:ignore of 'src/dynpmc/'
+src/dynpmc/*.bundle
+src/dynpmc/*.c
+src/dynpmc/*.def
+src/dynpmc/*.dll
+src/dynpmc/*.dump
+src/dynpmc/*.dylib
+src/dynpmc/*.exe
+src/dynpmc/*.exp
+src/dynpmc/*.h
+src/dynpmc/*.ilk
+src/dynpmc/*.lib
+src/dynpmc/*.manifest
+src/dynpmc/*.o
+src/dynpmc/*.obj
+src/dynpmc/*.pdb
+src/dynpmc/*.so
+src/dynpmc/Makefile
+src/dynpmc/md2.pmc
+src/dynpmc/md4.pmc
+src/dynpmc/md5.pmc
+src/dynpmc/ripemd160.pmc
+src/dynpmc/sha.pmc
+src/dynpmc/sha1.pmc
+src/dynpmc/sha256.pmc
+src/dynpmc/sha512.pmc
+# generated from svn:ignore of 'src/gc/'
+src/gc/*.bundle
+src/gc/*.c
+src/gc/*.def
+src/gc/*.dll
+src/gc/*.dump
+src/gc/*.dylib
+src/gc/*.exe
+src/gc/*.exp
+src/gc/*.h
+src/gc/*.ilk
+src/gc/*.lib
+src/gc/*.manifest
+src/gc/*.o
+src/gc/*.obj
+src/gc/*.pdb
+src/gc/*.so
+src/gc/Makefile
+# generated from svn:ignore of 'src/interp/'
+src/interp/*.o
+src/interp/*.str
+# generated from svn:ignore of 'src/io/'
+src/io/*.o
+src/io/*.obj
+src/io/*.str
+# generated from svn:ignore of 'src/nci/'
+src/nci/*.o
+src/nci/*.obj
+src/nci/*.str
+# generated from svn:ignore of 'src/ops/'
+src/ops/*.c
+src/ops/*.o
+src/ops/*.obj
+# generated from svn:ignore of 'src/packfile/'
+src/packfile/*.o
+src/packfile/*.obj
+# generated from svn:ignore of 'src/pmc/'
+src/pmc/*.c
+src/pmc/*.dump
+src/pmc/*.h
+src/pmc/*.o
+src/pmc/*.obj
+src/pmc/*.str
+src/pmc/*.tmp
+src/pmc/Makefile
+# generated from svn:ignore of 'src/runcore/'
+src/runcore/*.o
+src/runcore/*.obj
+src/runcore/*.str
+# generated from svn:ignore of 'src/string/'
+src/string/*.o
+src/string/*.obj
+src/string/*.str
+src/string/private_cstring.h
+# generated from svn:ignore of 'src/string/charset/'
+src/string/charset/*.o
+src/string/charset/*.obj
+# generated from svn:ignore of 'src/string/encoding/'
+src/string/encoding/*.o
+src/string/encoding/*.obj
+# generated from svn:ignore of 't/benchmark/'
+t/benchmark/*.pasm
+t/benchmark/*.pir
+# generated from svn:ignore of 't/compilers/imcc/'
+t/compilers/imcc/*.pbc
+# generated from svn:ignore of 't/compilers/imcc/imcpasm/'
+t/compilers/imcc/imcpasm/*.pasm
+t/compilers/imcc/imcpasm/*.pbc
+t/compilers/imcc/imcpasm/*.pir
+t/compilers/imcc/imcpasm/*_pbcexe
+# generated from svn:ignore of 't/compilers/imcc/reg/'
+t/compilers/imcc/reg/*.pasm
+t/compilers/imcc/reg/*.pbc
+t/compilers/imcc/reg/*.pir
+t/compilers/imcc/reg/*_pbcexe*
+# generated from svn:ignore of 't/compilers/imcc/syn/'
+t/compilers/imcc/syn/*.pasm
+t/compilers/imcc/syn/*.pbc
+t/compilers/imcc/syn/*.pir
+t/compilers/imcc/syn/*_pbcexe*
+# generated from svn:ignore of 't/compilers/json/'
+t/compilers/json/*.pbc
+t/compilers/json/*.pir
+t/compilers/json/*_pbcexe
+# generated from svn:ignore of 't/compilers/pct/'
+t/compilers/pct/*.pbc
+t/compilers/pct/*.pir
+# generated from svn:ignore of 't/compilers/pge/'
+t/compilers/pge/*.pasm
+t/compilers/pge/*.pbc
+t/compilers/pge/*.pir
+t/compilers/pge/*_pbcexe
+# generated from svn:ignore of 't/compilers/pge/p5regex/'
+t/compilers/pge/p5regex/*.pir
+# generated from svn:ignore of 't/compilers/pge/perl6regex/'
+t/compilers/pge/perl6regex/*.pbc
+t/compilers/pge/perl6regex/*.pir
+# generated from svn:ignore of 't/compilers/tge/'
+t/compilers/tge/*.pbc
+t/compilers/tge/*.pir
+t/compilers/tge/*_pbcexe
+# generated from svn:ignore of 't/dynoplibs/'
+t/dynoplibs/*.pasm
+t/dynoplibs/*.pbc
+t/dynoplibs/*.pir
+# generated from svn:ignore of 't/dynpmc/'
+t/dynpmc/*.pasm
+t/dynpmc/*.pbc
+t/dynpmc/*.pir
+t/dynpmc/*_pbcexe*
+t/dynpmc/md2.t
+t/dynpmc/md4.t
+t/dynpmc/md5.t
+t/dynpmc/ripemd160.t
+t/dynpmc/sha.t
+t/dynpmc/sha1.t
+t/dynpmc/sha256.t
+t/dynpmc/sha512.t
+# generated from svn:ignore of 't/examples/'
+t/examples/*.pasm
+t/examples/*.pbc
+t/examples/*.pir
+t/examples/*_pbcexe*
+# generated from svn:ignore of 't/library/'
+t/library/*.out
+t/library/*.pasm
+t/library/*.pbc
+t/library/*.pir
+t/library/*_pbcexe*
+# generated from svn:ignore of 't/native_pbc/'
+t/native_pbc/*_pbcexe*
+# generated from svn:ignore of 't/oo/'
+t/oo/*.pbc
+t/oo/*.pir
+# generated from svn:ignore of 't/op/'
+t/op/*.out
+t/op/*.pasm
+t/op/*.pbc
+t/op/*.pir
+t/op/*_pbcexe*
+# generated from svn:ignore of 't/perl/'
+t/perl/Parrot_Test_1.pasm
+t/perl/Parrot_Test_1.pir
+# generated from svn:ignore of 't/pmc/'
+t/pmc/*.out
+t/pmc/*.pasm
+t/pmc/*.pbc
+t/pmc/*.pir
+t/pmc/*_pbcexe*
+# generated from svn:ignore of 't/src/'
+t/src/*_*
+# generated from svn:ignore of 't/stress/'
+t/stress/*.out
+t/stress/*.pasm
+t/stress/*.pbc
+t/stress/*.pir
+t/stress/*_pbcexe*
+# generated from svn:ignore of 't/tools/'
+t/tools/*.pbc
+t/tools/*.pir
+t/tools/pdb.t.*
+t/tools/pmc2c.*.c
+t/tools/pmc2c.*.dump
+t/tools/pmc2c.*.h
+t/tools/pmc2c.*.pmc
+# Local variables:
+#   mode: text
+#   buffer-read-only: t
+# End:

Modified: branches/avl_string_cache/CREDITS
==============================================================================
--- branches/avl_string_cache/CREDITS	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/CREDITS	Thu Apr 22 09:55:26 2010	(r45889)
@@ -402,7 +402,7 @@
 
 N: Gerd Pokorra
 E: pokorra at uni-siegen.de
-D: Release manager for 1.9.0
+D: Release manager for 1.9.0 and 2.3.0
 
 N: Goplat
 D: Win98 and other fixes.

Modified: branches/avl_string_cache/ChangeLog
==============================================================================
--- branches/avl_string_cache/ChangeLog	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/ChangeLog	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,9 @@
 #1 $Id$
 
+2010.04.20     Gerd
+	* Released 2.3.0
+	See NEWS for more.
+
 2010.03.16     cotto
 	* Released 2.2.0
 	See NEWS for more.

Modified: branches/avl_string_cache/Configure.pl
==============================================================================
--- branches/avl_string_cache/Configure.pl	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/Configure.pl	Thu Apr 22 09:55:26 2010	(r45889)
@@ -632,10 +632,8 @@
     auto::env
     auto::gmp
     auto::readline
-    auto::gdbm
     auto::pcre
     auto::opengl
-    auto::crypto
     auto::gettext
     auto::snprintf
     # auto::perldoc
@@ -644,7 +642,6 @@
     auto::icu
     gen::config_h
     gen::core_pmcs
-    gen::crypto
     gen::opengl
     gen::makefiles
     gen::platform

Modified: branches/avl_string_cache/DEPRECATED.pod
==============================================================================
--- branches/avl_string_cache/DEPRECATED.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/DEPRECATED.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -7,8 +7,8 @@
 
 =head1 Experimental Status
 
-These features are not considered stable, even though they may
-have shipped in a stable release of parrot[2]. Use them at your own
+These features are not considered supported, even though they may
+have shipped in a supported release of parrot[2]. Use them at your own
 risk, as they can be removed or changed in any release. These
 items are marked below with C<[experimental]>.
 
@@ -66,21 +66,64 @@
 
 L<https://trac.parrot.org/parrot/ticket/103>
 
-=item Digest dynpmcs [eligible in 2.4]
+=item NCI without signature ("raw" pointers) [eligible in 2.4]
 
-The digest dynpmcs are, since the posting of this notice, available on
-http://gitorious.org/digest-dynpmcs and will no longer be distributed
-with parrot after 2.3.
+No equivalent functionality is promised. You shouldn't be using this. Here be
+segfaults.
 
-L<https://trac.parrot.org/parrot/ticket/1467>
+L<https://trac.parrot.org/parrot/ticket/1549>
 
-=item gdbmhash dynpmc [eligible in 2.4]
+=item UnManagedStruct handling nested structure [eligible in 2.4]
 
-The gdbmhash dynpmc is, since the posting of this notice, available on
-http://gitorious.org/dbm-dynpmcs and will no longer be distributed
-with parrot after 2.3.
+UnManagedStruct will be simplified to only support flat structures. This means
+that elements which themselves have structure - struct pointers and function
+pointers will be stored as C<void *> and C<void (*)(void)> respectively. To use
+these, they will need to be cast to the appropriate signature on access.
 
-L<https://trac.parrot.org/parrot/ticket/1469>
+L<https://trac.parrot.org/parrot/ticket/1551>
+
+=item UnManagedStruct initializer structure [eligible in 2.4]
+
+The initializer structure will cease to be an array of triples. In stead, an
+array of flags (no counts or offsets), or a string representation of the same
+information may be used.
+
+L<https://trac.parrot.org/parrot/ticket/1552>
+
+=item UnManagedStruct get_integer, set_integer_native [eligible in 2.4]
+
+These will no longer refer to the byte length of the buffer, but to the number
+of times the struct is repeated; emulating an array of structs.
+
+L<https://trac.parrot.org/parrot/ticket/1553>
+
+=item ManagedStruct reallocations based on shape changes [eligible in 2.4]
+
+Since shape changes may simply be used for re-interpreting data, and may also
+occur in several steps, re-allocating after any one shape change may be
+undesirable. In stead, an explicit allocate/reallocate method will be provided.
+
+L<https://trac.parrot.org/parrot/ticket/1554>
+
+=item Auto-vivification of nested aggregates [eligible in 2.4]
+
+Auto-vivifation of nested aggregated is deprecated.
+
+E.g.
+
+  $P0 = new ['Hash']
+  $S1 = $P0['foo';'bar';'baz']
+
+will not auto-vivify nested hashes and return PMCNULL early.
+
+L<https://trac.parrot.org/parrot/ticket/1561>
+
+=item PMC must use manual_attrs or auto_attrs flag [eligible in 2.4]
+
+PMCs must no longer use default value for manual/auto attribute allocation,
+manual_attrs or auto_attrs must be specified.
+
+L<http://trac.parrot.org/parrot/ticket/1506>
 
 =back
 
@@ -122,10 +165,6 @@
 
 =item get_results opcode order and features [eligible in 2.1]
 
-Move get_results to follow invoke.
-
-L<https://trac.parrot.org/parrot/ticket/1405>
-
 get_results no longer used to fetch exception object.
 
 L<https://trac.parrot.org/parrot/ticket/1406>
@@ -135,6 +174,10 @@
 Ability to get the string name of the current GC core from the interpinfo_s_i.
 See r43900 and r43904 for details.
 
+=item NCI_FB_CB and NCI_FB_UD in iglobals [experimental]
+
+Hooks allowing a runtime-loadable dynamic frame builder.
+
 =item loadlib_p_s_p [experimental]
 
 Ability to use non-default dynamic loading behaviour.
@@ -143,6 +186,62 @@
 
 L<https://trac.parrot.org/parrot/ticket/876>
 
+=item new_callback_p_p_p_s [eligible in 2.4]
+
+To be replaced with new_callback_p_p_p_p_s.
+
+L<https://trac.parrot.org/parrot/ticket/1548>
+
+=item dlfunc and new_callback signature string format [eligible in 2.4]
+
+These will be changed to allow more flexibility in types.
+
+L<https://trac.parrot.org/parrot/ticket/1565>
+
+=item find_lex [eligible in 2.4]
+
+find_lex will not throw exception for non-existing lexicals.
+
+L<https://trac.parrot.org/parrot/ticket/1207>
+
+=item substr_s_i_i_s [eligible in 2.4]
+
+This op will be replaced with replace_s_s_i_i_s op to clearly indicate
+semantic. Part of COW removal.
+
+L<https://trac.parrot.org/parrot/ticket/1540>
+
+=item substr_s_s_i_i_s [eligible in 2.4]
+
+This op is deprecated. Use replace_s_s_i_i_s or substr_s_s_i_i (or both)
+instead. Part of COW removal.
+
+L<https://trac.parrot.org/parrot/ticket/1540>
+
+=item inplace string updates. [eligible in 2.4]
+
+All "inplace" string update ops are deprecated. E.g. "chopn_s", etc.
+Part of COW removal.
+
+L<https://trac.parrot.org/parrot/ticket/1540>
+
+=back
+
+=head1 Runcores
+
+=over 4
+
+=item Unused Runcores [eligible in 2.4]
+
+The following Runcores do not appear to be used.  Accordingly they will
+be eligible for removal.
+
+CGoto
+CGP
+Switch
+
+L<https://trac.parrot.org/parrot/ticket/1563>
+
 =back
 
 =head1 Bytecode
@@ -193,14 +292,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/907>
 
-=item Subs marked with C<:vtable>/C<:method> aren't in namespace [eligible in 1.1]
-
-Subs marked with C<:vtable> or C<:method> flags are no longer given a
-namespace entry by default.  Use the C<:nsentry> flag to cause this
-to happen.
-
-L<https://trac.parrot.org/parrot/ticket/389>
-
 =item C API coding standards cleanup [eligible in 1.1]
 
 All C API functions that aren't currently named according to the
@@ -230,6 +321,13 @@
 
 rename Parrot_string_cstring to Parrot_str_cstring
 
+=item STRING COW [eligible in 2.4]
+
+COW strings are to be removed. All "inplace" string modification
+functions and all "inplace" string ops are deprecated.
+
+L<https://trac.parrot.org/parrot/ticket/1540>
+
 =item Parrot_PMC_* in src/extend.c [eligible in 2.4]
 
 These are duplicates of functions in src/extend_vtable.c. Exceptions:
@@ -353,7 +451,7 @@
 =item 2
 
 For an item to be considered experimental, it can B<never> have shipped in
-a stable release without the C<[experimental]> tag; otherwise, it must be
+a supported release without the C<[experimental]> tag; otherwise, it must be
 deprecated normally before removal or incompatible change.
 
 =back

Modified: branches/avl_string_cache/MANIFEST
==============================================================================
--- branches/avl_string_cache/MANIFEST	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/MANIFEST	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Tue Mar 30 15:58:20 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu Apr 22 00:02:51 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -235,8 +235,6 @@
 config/auto/cpu/sun4/auto.pm                                []
 config/auto/cpu/sun4/test_atomic_c.in                       []
 config/auto/cpu/x86_64/auto.pm                              []
-config/auto/crypto.pm                                       []
-config/auto/crypto/crypto_c.in                              []
 config/auto/ctags.pm                                        []
 config/auto/env.pm                                          []
 config/auto/env/test_setenv_c.in                            []
@@ -250,8 +248,6 @@
 config/auto/gc/test_c.in                                    []
 config/auto/gcc.pm                                          []
 config/auto/gcc/test_c.in                                   []
-config/auto/gdbm.pm                                         []
-config/auto/gdbm/gdbm_c.in                                  []
 config/auto/gettext.pm                                      []
 config/auto/gettext/gettext_c.in                            []
 config/auto/glibc.pm                                        []
@@ -309,13 +305,10 @@
 config/gen/config_h/has_header_h.in                         []
 config/gen/config_pm.pm                                     []
 config/gen/config_pm/Config_pm.in                           []
-config/gen/config_pm/config_lib_pasm.in                     []
+config/gen/config_pm/config_lib_pir.in                      []
 config/gen/config_pm/config_pir.in                          []
 config/gen/config_pm/myconfig.in                            []
 config/gen/core_pmcs.pm                                     []
-config/gen/crypto.pm                                        []
-config/gen/crypto/digest_pmc.in                             []
-config/gen/crypto/digest_t.in                               []
 config/gen/makefiles.pm                                     []
 config/gen/makefiles/docs.in                                []
 config/gen/makefiles/dynpmc.in                              []
@@ -925,15 +918,6 @@
 ext/Parrot-Embed/tools/check_embed_coverage.pl              []
 ext/Parrot-Embed/tools/write_typemap.pl                     []
 ext/Parrot-Embed/typemap                                    []
-ext/SQLite3/DBDI.pm                                         []
-ext/SQLite3/DBDI/Driver/SQLite3.pm                          []
-ext/SQLite3/Makefile.PL                                     []
-ext/SQLite3/Makefile.in                                     []
-ext/SQLite3/SQLite3.pir                                     []
-ext/SQLite3/gen_sqlite3.pl                                  []
-ext/SQLite3/t/test.p6                                       [test]
-ext/SQLite3/test.pir                                        []
-ext/nqp-rx/.gitignore                                       []
 ext/nqp-rx/CREDITS                                          []
 ext/nqp-rx/Defines.mak                                      []
 ext/nqp-rx/LICENSE                                          []
@@ -1262,7 +1246,6 @@
 runtime/parrot/library/SDL/Sprite.pir                       [library]
 runtime/parrot/library/SDL/StopWatch.pir                    [library]
 runtime/parrot/library/SDL/Surface.pir                      [library]
-runtime/parrot/library/SQLite3.pir                          [library]
 runtime/parrot/library/Stream/Base.pir                      [library]
 runtime/parrot/library/Stream/Combiner.pir                  [library]
 runtime/parrot/library/Stream/Coroutine.pir                 [library]
@@ -1273,6 +1256,9 @@
 runtime/parrot/library/Stream/Sub.pir                       [library]
 runtime/parrot/library/Stream/Writer.pir                    [library]
 runtime/parrot/library/String/Utils.pir                     [library]
+runtime/parrot/library/TAP/Formatter.pir                    [library]
+runtime/parrot/library/TAP/Harness.pir                      [library]
+runtime/parrot/library/TAP/Parser.pir                       [library]
 runtime/parrot/library/Tcl/Glob.pir                         [library]
 runtime/parrot/library/TclLibrary.pir                       [library]
 runtime/parrot/library/Test/Builder.pir                     [library]
@@ -1291,6 +1277,7 @@
 runtime/parrot/library/ncurses.declarations                 [library]
 runtime/parrot/library/ncurses.pasm                         [library]
 runtime/parrot/library/ncurses.pir                          [library]
+runtime/parrot/library/osutils.pir                          [library]
 runtime/parrot/library/parrotlib.pir                        [library]
 runtime/parrot/library/pcore.pir                            [library]
 runtime/parrot/library/pcre.pir                             [library]
@@ -1321,7 +1308,6 @@
 src/dynpmc/ext.pir                                          []
 src/dynpmc/foo.pmc                                          []
 src/dynpmc/foo2.pmc                                         []
-src/dynpmc/gdbmhash.pmc                                     []
 src/dynpmc/main.pasm                                        []
 src/dynpmc/pccmethod_test.pmc                               []
 src/dynpmc/rational.pmc                                     []
@@ -1470,7 +1456,6 @@
 src/pmc/resizableintegerarray.pmc                           []
 src/pmc/resizablepmcarray.pmc                               []
 src/pmc/resizablestringarray.pmc                            []
-src/pmc/retcontinuation.pmc                                 []
 src/pmc/role.pmc                                            []
 src/pmc/scalar.pmc                                          []
 src/pmc/scheduler.pmc                                       []
@@ -1699,7 +1684,6 @@
 t/dynpmc/dynlexpad.t                                        [test]
 t/dynpmc/foo.t                                              [test]
 t/dynpmc/foo2.t                                             [test]
-t/dynpmc/gdbmhash.t                                         [test]
 t/dynpmc/pccmethod_test.t                                   [test]
 t/dynpmc/rational.t                                         [test]
 t/dynpmc/rotest.t                                           [test]
@@ -1718,6 +1702,7 @@
 t/examples/subs.t                                           [test]
 t/examples/tutorial.t                                       [test]
 t/harness                                                   [test]
+t/harness.pir                                               [test]
 t/include/fp_equality.t                                     [test]
 t/library/cgi_query_hash.t                                  [test]
 t/library/configure.t                                       [test]
@@ -1728,6 +1713,7 @@
 t/library/iter.t                                            [test]
 t/library/md5.t                                             [test]
 t/library/mime_base64.t                                     [test]
+t/library/osutils.t                                         [test]
 t/library/p6object.t                                        [test]
 t/library/parrotlib.t                                       [test]
 t/library/pcre.t                                            [test]
@@ -1738,6 +1724,7 @@
 t/library/range.t                                           [test]
 t/library/streams.t                                         [test]
 t/library/string_utils.t                                    [test]
+t/library/tap_parser.t                                      [test]
 t/library/tcl_glob.t                                        [test]
 t/library/tcl_lib.t                                         [test]
 t/library/test_builder_tester.t                             [test]
@@ -1914,6 +1901,7 @@
 t/pmc/multidispatch.t                                       [test]
 t/pmc/multisub.t                                            [test]
 t/pmc/namespace-old.t                                       [test]
+t/pmc/namespace-subs.t                                      [test]
 t/pmc/namespace.t                                           [test]
 t/pmc/nci.t                                                 [test]
 t/pmc/null.t                                                [test]
@@ -1951,7 +1939,6 @@
 t/pmc/resizableintegerarray.t                               [test]
 t/pmc/resizablepmcarray.t                                   [test]
 t/pmc/resizablestringarray.t                                [test]
-t/pmc/retcontinuation.t                                     [test]
 t/pmc/ro.t                                                  [test]
 t/pmc/role.t                                                [test]
 t/pmc/scalar.t                                              [test]
@@ -1992,14 +1979,12 @@
 t/steps/auto/byteorder-01.t                                 [test]
 t/steps/auto/cgoto-01.t                                     [test]
 t/steps/auto/cpu-01.t                                       [test]
-t/steps/auto/crypto-01.t                                    [test]
 t/steps/auto/ctags-01.t                                     [test]
 t/steps/auto/env-01.t                                       [test]
 t/steps/auto/format-01.t                                    [test]
 t/steps/auto/frames-01.t                                    [test]
 t/steps/auto/gc-01.t                                        [test]
 t/steps/auto/gcc-01.t                                       [test]
-t/steps/auto/gdbm-01.t                                      [test]
 t/steps/auto/gettext-01.t                                   [test]
 t/steps/auto/glibc-01.t                                     [test]
 t/steps/auto/gmp-01.t                                       [test]
@@ -2195,10 +2180,13 @@
 tools/dev/search-ops.pl                                     []
 tools/dev/svnclobber.pl                                     []
 tools/dev/symlink.pl                                        []
+tools/dev/tapir.pir                                         []
 tools/dev/vgp                                               []
 tools/dev/vgp_darwin                                        []
 tools/dev/vms-patch                                         []
 tools/dev/vtablize.pl                                       []
+tools/docs/book-to-latex.pl                                 []
+tools/docs/filename_and_chapter.pl                          []
 tools/docs/mk_chm.pl                                        []
 tools/docs/ops_summary.pl                                   []
 tools/docs/write_docs.pl                                    []

Modified: branches/avl_string_cache/MANIFEST.SKIP
==============================================================================
--- branches/avl_string_cache/MANIFEST.SKIP	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/MANIFEST.SKIP	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Tue Mar 30 17:42:06 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 21 10:28:38 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -65,8 +65,8 @@
 ^all_cstring\.str/
 ^blib$
 ^blib/
-^config_lib\.pasm$
-^config_lib\.pasm/
+^config_lib\.pir$
+^config_lib\.pir/
 ^cover_db$
 ^cover_db/
 ^install_config\.fpmc$
@@ -131,6 +131,10 @@
 ^pirc/
 ^tags$
 ^tags/
+^tapir$
+^tapir/
+^tapir\..*$
+^tapir\..*/
 ^temp\.file$
 ^temp\.file/
 ^test$
@@ -601,12 +605,20 @@
 # generated from svn:ignore of 'runtime/parrot/library/Parrot/'
 ^runtime/parrot/library/Parrot/.*\.pbc$
 ^runtime/parrot/library/Parrot/.*\.pbc/
+# generated from svn:ignore of 'runtime/parrot/library/ProfTest/'
+^runtime/parrot/library/ProfTest/.*\.pbc$
+^runtime/parrot/library/ProfTest/.*\.pbc/
+^runtime/parrot/library/ProfTest/.*\.pir$
+^runtime/parrot/library/ProfTest/.*\.pir/
 # generated from svn:ignore of 'runtime/parrot/library/Stream/'
 ^runtime/parrot/library/Stream/.*\.pbc$
 ^runtime/parrot/library/Stream/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/String/'
 ^runtime/parrot/library/String/Utils\.pbc$
 ^runtime/parrot/library/String/Utils\.pbc/
+# generated from svn:ignore of 'runtime/parrot/library/TAP/'
+^runtime/parrot/library/TAP/.*\.pbc$
+^runtime/parrot/library/TAP/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/Tcl/'
 ^runtime/parrot/library/Tcl/.*\.pbc$
 ^runtime/parrot/library/Tcl/.*\.pbc/

Modified: branches/avl_string_cache/MANIFEST.generated
==============================================================================
--- branches/avl_string_cache/MANIFEST.generated	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/MANIFEST.generated	Thu Apr 22 09:55:26 2010	(r45889)
@@ -2,10 +2,10 @@
 # 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.2.0.dylib                    [main]lib
+blib/lib/libparrot.2.3.0.dylib                    [main]lib
 blib/lib/libparrot.a                              [main]lib
 blib/lib/libparrot.dylib                          [main]lib
-blib/lib/libparrot.so.2.2.0                       [main]lib
+blib/lib/libparrot.so.2.3.0                       [main]lib
 blib/lib/libparrot.so                             [main]lib
 compilers/data_json/data_json.pbc                 [data_json]
 compilers/json/JSON.pbc                           [json]
@@ -66,6 +66,8 @@
 installable_pbc_to_exe                            [main]bin
 installable_parrot-nqp.exe                        [main]bin
 installable_parrot-nqp                            [main]bin
+installable_tapir.exe                             [main]bin
+installable_tapir                                 [main]bin
 lib/Parrot/Config/Generated.pm                    [devel]lib
 libparrot.dll                                     [main]bin
 libparrot.lib                                     [main]bin
@@ -172,6 +174,7 @@
 runtime/parrot/library/OpenGL_funcs.pir           [main]
 runtime/parrot/library/OpenGL_funcs.pbc           [main]
 runtime/parrot/library/OpenGL.pbc                 [main]
+runtime/parrot/library/osutils.pbc                [main]
 runtime/parrot/library/P6object.pbc               [main]
 runtime/parrot/library/P6Regex.pbc                [main]
 runtime/parrot/library/Parrot/Capture_PIR.pbc     [main]
@@ -204,6 +207,9 @@
 runtime/parrot/library/Stream/Replay.pbc          [main]
 runtime/parrot/library/Stream/Sub.pbc             [main]
 runtime/parrot/library/Stream/Writer.pbc          [main]
+runtime/parrot/library/TAP/Formatter.pbc          [main]
+runtime/parrot/library/TAP/Harness.pbc            [main]
+runtime/parrot/library/TAP/Parser.pbc             [main]
 runtime/parrot/library/Tcl/Glob.pbc               [main]
 runtime/parrot/library/TclLibrary.pbc             [main]
 runtime/parrot/library/Test/Builder/Test.pbc      [main]

Modified: branches/avl_string_cache/META.yml
==============================================================================
--- branches/avl_string_cache/META.yml	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/META.yml	Thu Apr 22 09:55:26 2010	(r45889)
@@ -4,7 +4,7 @@
 # See http://module-build.sourceforge.net/META-spec-current.html for details.
 ---
 name: parrot
-version: 2.2.0
+version: 2.3.0
 author: parrot-dev at lists.parrot.org
 abstract: a virtual machine designed for dynamic languages
 license: artistic2

Modified: branches/avl_string_cache/NEWS
==============================================================================
--- branches/avl_string_cache/NEWS	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/NEWS	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,22 +1,25 @@
 # $Id$
 
 New in 2.3.0
-- Features
 - Core
   + Allow passing parameters to the dynamic linker ('dlopen' improved)
   + loadlib opcode added
-  + Merge of pcc_hackatron branch
+  + Calling conventions are now much more consistent, and follows natural
+    semantics of handling arguments and return values
   + Recursive make for src/dynpmc removed
-- Compilers
-- Deprecations
-- API
+  + Datatype STRINGNULL for a single Null STRING added
+  + config_lib.pasm replaced with config_lib.pir
 - Platforms
   + Improved handling of new compilers
-- Bugfix
-- Tests
+  + Cygwin packages will be updated again with Parrot releases
+  + Fedora packages add desktop files
+  + gzip and bzip2 compressed tar files for releases
 - Tools
-- Documentation
+  + tapir executable added; tapir is a TAP test harness
+  + Added TAP options --merge --ignore-exit
 - Miscellaneous
+  + 3 month cycle for supported releases
+  + Review and vote of GSoC applications
 
 New in 2.2.0
 - Core changes

Modified: branches/avl_string_cache/PBC_COMPAT
==============================================================================
--- branches/avl_string_cache/PBC_COMPAT	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/PBC_COMPAT	Thu Apr 22 09:55:26 2010	(r45889)
@@ -27,6 +27,8 @@
 
 # please insert tab separated entries at the top of the list
 
+6.7	2010.04.22	coke	remove RetContinuation PMC
+6.6	2010.04.17	bacek	add replace op
 6.5	2010.03.09	cotto	remove cpu_ret op
 6.4	2010.03.02	cotto	remove prederef__ and reserved
 6.3	2010.02.16	whiteknight	Add OpLib and Opcode PMCs

Modified: branches/avl_string_cache/README
==============================================================================
--- branches/avl_string_cache/README	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/README	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-This is Parrot, version 2.2.0
+This is Parrot, version 2.3.0
 ------------------------------
 
 Parrot is Copyright (C) 2001-2010, Parrot Foundation.

Modified: branches/avl_string_cache/README_cygwin.pod
==============================================================================
--- branches/avl_string_cache/README_cygwin.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/README_cygwin.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -25,22 +25,22 @@
 
 Runtime requirements:
 
-  libreadline6 ncurses libintl8 libgmp3 libgdbm4
+  libreadline6 ncurses libintl8 libgmp3
 
 Optional requirements:
 
-  libicu38 libpq5 openssl
+  libicu38 libpq5
 
   for opengl: w32api opengl or libglut3 xorg-x11-base xorg-x11-bin-dlls
 
 Build requirements:
 
   gcc make perl parrot readline libncurses-devel libgmp-devel
-  libgdbm-devel pcre-devel
+  pcre-devel
 
 Optional build requirements:
 
-  libicu-devel openssl-devel
+  libicu-devel
 
   for Cygwin/X opengl: freeglut libglut-devel xorg-x11-devel
 

Modified: branches/avl_string_cache/README_win32.pod
==============================================================================
--- branches/avl_string_cache/README_win32.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/README_win32.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -85,15 +85,9 @@
 
 The availability of these libraries is checked by Configure.pl.
 
-B<libcrypto> - a part of libssl / OpenSSL
-L<http://gnuwin32.sourceforge.net/>
-
 B<gettext> - library and tools for native language support
 L<http://gnuwin32.sourceforge.net/>
 
-B<gdbm> - GNU database manager
-L<http://gnuwin32.sourceforge.net/>
-
 B<GMP> - GNU multiple precision arithmetic library
 L<http://developer.berlios.de/projects/win32gmp/>
 

Modified: branches/avl_string_cache/RESPONSIBLE_PARTIES
==============================================================================
--- branches/avl_string_cache/RESPONSIBLE_PARTIES	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/RESPONSIBLE_PARTIES	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2009, Parrot Foundation.
+# Copyright (C) 2002-2010, Parrot Foundation.
 # $Id$
 
 This is a list of project roles, with a partial list of the folks who have
@@ -62,6 +62,7 @@
                                 Reini Urban (cygwin)
                                 Will Coleda (MacPorts)
                                 Jerry Gay (Windows)
+                                Gerd Pokorra (Fedora)
 
 
 Patch Monster                   chromatic

Modified: branches/avl_string_cache/VERSION
==============================================================================
--- branches/avl_string_cache/VERSION	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/VERSION	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1 +1 @@
-2.2.0
+2.3.0

Modified: branches/avl_string_cache/compilers/imcc/imcc.l
==============================================================================
--- branches/avl_string_cache/compilers/imcc/imcc.l	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/imcc.l	Thu Apr 22 09:55:26 2010	(r45889)
@@ -87,6 +87,8 @@
 
 static void include_file(PARROT_INTERP, char *file_name, ARGMOD(void *yyscanner));
 
+static int handle_identifier(PARROT_INTERP, YYSTYPE *valp, ARGIN(const char *id));
+
 #define YY_DECL int yylex(YYSTYPE *valp, yyscan_t yyscanner, PARROT_INTERP)
 
 #define YYCHOP() (yytext[--yyleng] = '\0')
@@ -133,7 +135,7 @@
 STRINGCONSTANT  {SQ_STRING}|{DQ_STRING}
 SQ_STRING       \'[^'\n]*\'
 RANKSPEC        \[[,]*\]
-EOL        \r?\n
+EOL             \r?\n
 WS              [\t\f\r\x1a ]
 SP              [ ]
 
@@ -167,7 +169,10 @@
             return 0;
         }
 
+<*>^{WS}*            { IMCC_INFO(interp)->line++; }
+
 <heredoc1>.*{EOL} {
+            IMCC_INFO(interp)->line++;
             IMCC_INFO(interp)->frames->heredoc_rest = mem_sys_strdup(yytext);
             BEGIN(heredoc2);
     }
@@ -177,7 +182,6 @@
          * arrange them before all wildcard state matches */
 
         /* Newline in the heredoc. Realloc and cat on. */
-        IMCC_INFO(interp)->line++;
         IMCC_INFO(interp)->heredoc_content =
             (char*)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
                             strlen(IMCC_INFO(interp)->heredoc_content) +
@@ -187,6 +191,7 @@
     }
 
 <heredoc2>.* {
+        IMCC_INFO(interp)->line++;
         /* Are we at the end of the heredoc? */
         if (STREQ(IMCC_INFO(interp)->heredoc_end, yytext)) {
             /* End of the heredoc. */
@@ -209,7 +214,7 @@
             yy_pop_state(yyscanner);
             yy_scan_string(IMCC_INFO(interp)->frames->heredoc_rest, yyscanner);
 
-            /* the EOF rule will increment the line number; decrement here */
+            /* not sure we need this decrement; more testing needed */
             IMCC_INFO(interp)->line--;
             return STRINGC;
         }
@@ -252,7 +257,6 @@
 
 <cmt4>.*{EOL} {
         yy_pop_state(yyscanner);
-        IMCC_INFO(interp)->line++;
     }
 
 <INITIAL,emit>{EOL} {
@@ -260,7 +264,6 @@
             BEGIN(INITIAL);
 
         IMCC_INFO(interp)->expect_pasm = 0;
-        IMCC_INFO(interp)->line++;
 
         return '\n';
     }
@@ -276,7 +279,6 @@
             yy_pop_state(yyscanner);
 
         IMCC_INFO(interp)->expect_pasm = 0;
-        IMCC_INFO(interp)->line++;
 
         return '\n';
     }
@@ -288,19 +290,20 @@
 }
 
 <INITIAL,emit,macro>^"=" {
+        IMCC_INFO(interp)->line++;
         IMCC_INFO(interp)->in_pod = 1;
         yy_push_state(pod, yyscanner);
     }
 
 <pod>^"=cut"{EOL} {
+        IMCC_INFO(interp)->line++;
         IMCC_INFO(interp)->in_pod = 0;
         yy_pop_state(yyscanner);
-        IMCC_INFO(interp)->line++;
     }
 
-<pod>.*         { /*ignore*/ }
+<pod>.* { IMCC_INFO(interp)->line++; }
 
-<pod>{EOL}      { IMCC_INFO(interp)->line++; }
+<pod>{EOL}      { /* ignore */ }
 
 <*>".line"               return TK_LINE;
 <*>".file"               return TK_FILE;
@@ -337,7 +340,7 @@
 ":instanceof"              return SUB_INSTANCE_OF;
 ":subid"                   return SUBID;
 
-".get_result"                  return RESULT;
+".get_result"              return RESULT;
 ".get_results"             return GET_RESULTS;
 ".yield"                   return YIELDT;
 ".set_yield"               return SET_YIELD;
@@ -447,6 +450,8 @@
     }
 
 <emit,INITIAL>".macro" {
+        /* the initial whitespace catcher misses this one */
+        IMCC_INFO(interp)->line++;
         return read_macro(valp, interp, yyscanner);
     }
 
@@ -485,7 +490,6 @@
     }
 
 <emit,INITIAL>{ID}"$" {
-
         if (valp) {
             char *label;
             size_t len;
@@ -635,34 +639,8 @@
         return REG;
     }
 
-<emit,INITIAL>{ID} {
-        if (!IMCC_INFO(interp)->is_def) {
-            SymReg *r = find_sym(interp, yytext);
-
-            if (r && (r->type & (VTIDENTIFIER|VT_CONSTP))) {
-                valp->sr = r;
-                return VAR;
-            }
-
-            if (IMCC_INFO(interp)->cur_unit
-            &&  IMCC_INFO(interp)->cur_unit->instructions
-            && (r = IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
-            &&  r->pcc_sub)
-            {
-                if (((r->pcc_sub->pragma & P_METHOD)
-                ||   (IMCC_INFO(interp)->cur_unit->is_vtable_method))
-                &&   !strcmp(yytext, "self")) {
-                    valp->sr = mk_ident(interp, "self", 'P');
-                    IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
-                    return VAR;
-                }
-            }
-        }
-
-        valp->s = mem_sys_strdup(yytext);
-        return (!IMCC_INFO(interp)->is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
-    }
 
+<emit,INITIAL>{ID} { return handle_identifier(interp, valp, yytext); }
 
 <emit,INITIAL>{WS}+ /* skip */;
 
@@ -684,10 +662,13 @@
 
 <INITIAL><<EOF>> yyterminate();
 
-<macro>".endm"         DUP_AND_RET(valp, ENDM);
+<macro>".endm"         {
+        /* the initial whitespace catcher misses this one */
+        IMCC_INFO(interp)->line++;
+        DUP_AND_RET(valp, ENDM);
+}
 
 <macro>{WS}*{EOL} {
-        IMCC_INFO(interp)->line++;
         DUP_AND_RET(valp, '\n');
     }
 
@@ -745,7 +726,6 @@
     return IDENTIFIER;
 }
 
-<macro>^{WS}+                       /* skip leading ws */;
 <macro>{WS}+                        DUP_AND_RET(valp, ' ');
 <macro>[SNIP]{DIGITS}               DUP_AND_RET(valp, REG);
 <macro>"$"[SNIP]{DIGITS}            DUP_AND_RET(valp, REG);
@@ -814,6 +794,9 @@
     frame->s.next             = (parser_state_t *)IMCC_INFO(interp)->frames;
     IMCC_INFO(interp)->frames = frame;
 
+    /* start at the effective *starting line* of the macro */
+    IMCC_INFO(interp)->line   = frame->s.line - 2;
+
     yy_scan_string(expansion, yyscanner);
 }
 
@@ -1069,9 +1052,6 @@
     IMCC_INFO(interp)->macro_buffer   = NULL;
     IMCC_INFO(interp)->cur_macro_name = NULL;
 
-    /* the ENDM rule doesn't set the line number */
-    IMCC_INFO(interp)->line--;
-
     return MACRO;
 }
 
@@ -1232,8 +1212,6 @@
             }
         }
 
-        /* let the normal EOF rules match line numbers */
-        IMCC_INFO(interp)->line = m->line - 1;
         scan_string(frame, m->expansion, yyscanner);
 
         return 1;
@@ -1288,7 +1266,8 @@
     IMCC_INFO(interp)->frames = frame;
     IMCC_INFO(interp)->state  = (parser_state_t *)IMCC_INFO(interp)->frames;
 
-    IMCC_INFO(interp)->line   = 1;
+    /* let the start of line rule increment this to 1 */
+    IMCC_INFO(interp)->line   = 0;
 
     yy_switch_to_buffer(yy_create_buffer(file, YY_BUF_SIZE, yyscanner),
         yyscanner);
@@ -1469,6 +1448,36 @@
     return yyg->yy_hold_char == '\0';
 }
 
+static int
+handle_identifier(PARROT_INTERP, YYSTYPE *valp, const char *text)
+{
+    if (!IMCC_INFO(interp)->is_def) {
+        SymReg *r = find_sym(interp, text);
+
+        if (r && (r->type & (VTIDENTIFIER|VT_CONSTP))) {
+            valp->sr = r;
+            return VAR;
+        }
+
+        if (IMCC_INFO(interp)->cur_unit
+        &&  IMCC_INFO(interp)->cur_unit->instructions
+        && (r = IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
+        &&  r->pcc_sub)
+        {
+            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');
+                IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
+                return VAR;
+            }
+        }
+    }
+
+    valp->s = mem_sys_strdup(text);
+    return (!IMCC_INFO(interp)->is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
+}
+
 /*
  * Local variables:
  *   c-file-style: "parrot"

Modified: branches/avl_string_cache/compilers/imcc/imcc.y
==============================================================================
--- branches/avl_string_cache/compilers/imcc/imcc.y	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/imcc.y	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1085,7 +1085,7 @@
 %nonassoc '\n'
 %nonassoc <t> PARAM
 
-%token <t> HLL TK_LINE TK_FILE
+%token <t> SOL HLL TK_LINE TK_FILE
 %token <t> GOTO ARG IF UNLESS PNULL SET_RETURN SET_YIELD
 %token <t> ADV_FLAT ADV_SLURPY ADV_OPTIONAL ADV_OPT_FLAG ADV_NAMED ADV_ARROW
 %token <t> NEW ADV_INVOCANT ADV_CALL_SIG
@@ -1494,13 +1494,13 @@
 ns_entry_name:
     NS_ENTRY
          {
-           $$ = 0;
+           $$ = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
          }
    | NS_ENTRY '(' any_string ')'
          {
-           $$ = 0;
+           $$ = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = $3;
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
          }
@@ -2510,26 +2510,19 @@
      * before the newline, and thus, line is the line *after* the
      * error. Instead of duplicating code for both cases (the 'newline' and
      * non-newline case, do the test twice; efficiency is not important when
-     * we have an error anyway.
-     */
+     * we have an error anyway. */
     if (!at_eof(yyscanner)) {
-        if (*chr == '\n') {
-            IMCC_INFO(interp)->line--;
-        }
-
         IMCC_warning(interp, "error:imcc:%s", s);
+
         /* don't print the current token if it is a newline */
-        if (*chr != '\n') {
+        if (*chr != '\n')
             IMCC_warning(interp, " ('%s')", chr);
-        }
-        IMCC_print_inc(interp);
-
-        if (*chr == '\n') {
-            IMCC_INFO(interp)->line++;
-        }
 
+        IMCC_print_inc(interp);
     }
-    else { /* scanner is at end of file; just to be sure, do not print "current" token. */
+
+    /* scanner is at EOF; just to be sure, don't print "current" token */
+    else {
         IMCC_warning(interp, "error:imcc:%s", s);
         IMCC_print_inc(interp);
     }

Modified: branches/avl_string_cache/compilers/imcc/imclexer.c
==============================================================================
--- branches/avl_string_cache/compilers/imcc/imclexer.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/imclexer.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -385,125 +385,127 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[1062] =
+static yyconst flex_int16_t yy_accept[1090] =
     {   0,
-        0,    0,    0,    0,    0,    0,   16,   16,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        3,    3,  149,  135,  134,   10,  134,  135,  135,   11,
-      135,  135,  135,  135,  135,  135,  115,  135,   95,  135,
-      119,  119,  135,   87,  135,   89,  133,  133,  133,  133,
-      133,  133,  133,  133,  135,  135,   14,  134,  134,  135,
-      135,  135,  135,  133,   14,  147,  142,  137,  142,  147,
-      147,  147,  147,  147,  119,  119,  147,  145,  145,  145,
-      141,  141,   14,   16,   17,   16,   16,   16,   16,   16,
-       16,   16,   16,   16,   16,   16,  148,  135,    8,    8,
-
-      135,  135,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    5,  135,    9,  135,  135,  135,  135,  135,
-      119,  119,  135,  135,  135,  135,   12,  135,  135,  135,
-      135,  135,  119,  119,  135,  135,  135,  148,    1,  148,
-      148,  148,  148,  148,  119,  119,  148,  148,  148,    3,
-        2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,  134,    0,   10,   92,    0,  124,    0,  131,  131,
-      131,  131,  131,  100,   84,  103,    0,   93,   98,    0,
-      119,   96,   97,  118,  109,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+        0,    1,    0,    1,    0,    1,   17,    1,    0,    1,
+        0,    1,    0,    1,    0,    1,    0,    1,    0,    1,
+        4,    1,  149,  136,  135,   11,  135,  136,  136,   12,
+      136,  136,  136,  136,  136,  136,  116,  136,   96,  136,
+      120,  120,  136,   88,  136,   90,  134,  134,  134,  134,
+      134,  134,  134,  134,  136,  136,    1,    1,   15,  135,
+      135,  136,  136,  136,  136,  134,    1,    1,   15,  147,
+      142,  138,  142,  147,  147,  147,  147,  147,  120,  120,
+      147,  145,  145,  145,    1,    1,   15,   17,   18,   17,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,    1,
+
+        1,   17,  148,  136,    9,    9,  136,  136,    1,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    1,
+        6,  136,   10,  136,  136,  136,  136,  136,  120,  120,
+      136,  136,  136,    1,    1,  136,   13,  136,  136,  136,
+      136,  136,  120,  120,  136,  136,  136,    1,    1,  148,
+        2,  148,  148,  148,  148,  148,  120,  120,  148,  148,
+      148,    1,    1,    4,    3,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    4,    1,    1,  135,    0,   11,
+       93,    0,  125,    0,  132,  132,  132,  132,  132,  101,
+       85,  104,    0,   94,   99,    0,  120,   97,   98,  119,
+
+      110,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  102,  100,
+      119,    0,    0,  124,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   82,   89,
+       92,   65,   91,   83,  115,    0,  134,  117,  133,  134,
+       75,  134,  134,  134,  134,  134,  134,  105,   86,  106,
+       87,    1,    0,  135,  118,  118,  118,  118,  118,  118,
+        0,    0,    0,    0,    1,  142,  138,  142,    0,    0,
+        0,  146,  146,  146,  146,  145,    0,  143,  145,    1,
+        1,   17,   18,   17,   17,   17,   17,   17,   17,   17,
 
-      117,  117,  101,   99,  118,    0,    0,  123,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   81,   88,   91,   64,   90,   82,  114,    0,
-      133,  116,  132,  133,   74,  133,  133,  133,  133,  133,
-      133,  104,   85,  105,   86,    0,  134,  117,  117,  117,
-      117,  117,  117,    0,    0,    0,    0,  142,  137,  142,
-        0,    0,    0,  146,  146,  146,  146,  145,    0,  143,
-      145,  141,  141,   16,   17,   16,   16,   16,   16,   16,
-       16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   16,   16,    0,    0,    8,    0,    4,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,    1,   17,    0,    0,    9,    0,    1,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    1,    0,   10,
+        0,    0,    0,  125,    0,    0,    0,    0,  120,  119,
+        0,    0,  119,    0,    0,  124,    0,    0,    0,    0,
+        0,    0,    1,    1,    0,   13,    0,    0,    0,  125,
+        0,    0,    0,    0,  120,  119,    0,    0,  119,    0,
+        0,  124,    0,    0,    0,    0,    0,    0,    1,    1,
+        0,    2,    0,    0,    0,  125,    0,    0,    0,    0,
 
+      120,  119,    0,    0,  119,    0,    0,  124,    0,    0,
+        0,    0,    0,    0,    1,    1,    4,    3,    4,    4,
         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    0,    9,    0,
-        0,    0,  124,    0,    0,    0,    0,  119,  118,    0,
-        0,  118,    0,    0,  123,    0,    0,    0,    0,    0,
-        0,    0,   12,    0,    0,    0,  124,    0,    0,    0,
-        0,  119,  118,    0,    0,  118,    0,    0,  123,    0,
-        0,    0,    0,    0,    0,    0,    1,    0,    0,    0,
-      124,    0,    0,    0,    0,  119,  118,    0,    0,  118,
-        0,    0,  123,    0,    0,    0,    0,    0,    0,    3,
-        2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-       94,  127,  128,  130,  129,    0,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  102,  118,  121,    0,  118,  122,  120,    0,    0,
+        4,    4,    4,    4,    4,    4,    4,    1,   95,  128,
+      129,  131,  130,    0,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  103,
+      119,  122,    0,  119,  123,  121,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  107,
-      106,   83,  113,    0,    0,  132,  133,   77,  133,   78,
-       79,  133,  133,  133,    0,  117,  117,    0,    0,  138,
-      144,  140,  146,  146,  146,  146,  146,  145,   16,   16,
-
-       16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,    0,    0,    0,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    4,    0,    0,
-        0,  118,  121,    0,  118,  122,  120,    0,    0,    0,
-        0,    0,    0,    0,    0,  118,  121,    0,  118,  122,
-      120,    0,    0,    0,    0,    0,    0,    0,    0,  118,
-      121,    0,  118,  122,  120,    0,    0,    0,    0,    0,
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    0,  118,   68,  117,  117,  117,
-      117,   24,  117,  117,  117,  117,  117,   21,  117,  117,
+        0,    0,    0,    0,    0,    0,    0,  108,  107,   84,
 
-      117,  117,  117,  117,  117,  117,  117,  117,  117,   23,
-      117,  117,    0,    0,    0,    0,    0,    0,    0,   45,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  125,    0,    0,  108,    0,  126,
-        0,    0,    0,   73,   76,  133,  133,  133,  133,    0,
-      140,  146,  146,  146,  146,  145,  145,   16,   16,   16,
-       16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,    0,    0,    0,    0,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    0,  118,    0,
-        0,    0,    0,  125,    0,    0,    0,    0,    0,  126,
-
-        0,    0,    0,    0,    0,    0,  118,    0,    0,    0,
-        0,  125,    0,    0,    0,    0,    0,  126,    0,    0,
-        0,    0,    0,    0,  118,    0,    0,    0,    0,  125,
-        0,    0,    0,    0,    0,  126,    0,    0,    0,    0,
-        0,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,  117,  117,   27,  117,
-      117,   19,  117,  117,  117,  117,   18,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,   43,
-        0,   59,    0,   40,    0,    0,   39,   38,    0,    0,
+      114,    0,    0,  133,  134,   78,  134,   79,   80,  134,
+      134,  134,    0,  118,  118,    0,    0,  139,  144,  141,
+      146,  146,  146,  146,  146,  145,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,    0,    0,    0,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    0,    0,    0,  119,
+      122,    0,  119,  123,  121,    0,    0,    0,    0,    0,
+        0,    0,    0,  119,  122,    0,  119,  123,  121,    0,
+        0,    0,    0,    0,    0,    0,    0,  119,  122,    0,
+      119,  123,  121,    0,    0,    0,    0,    0,    4,    4,
+
+        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+        4,    4,    0,  119,   69,  118,  118,  118,  118,   25,
+      118,  118,  118,  118,  118,   22,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,   24,  118,  118,
+        0,    0,    0,    0,    0,    0,    0,   46,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  126,    0,    0,  109,    0,  127,    0,    0,
+        0,   74,   77,  134,  134,  134,  134,    0,  141,  146,
+      146,  146,  146,  145,  145,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+
+       17,    0,    0,    0,    0,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    0,  119,    0,    0,    0,
+        0,  126,    0,    0,    0,    0,    0,  127,    0,    0,
+        0,    0,    0,    0,  119,    0,    0,    0,    0,  126,
+        0,    0,    0,    0,    0,  127,    0,    0,    0,    0,
+        0,    0,  119,    0,    0,    0,    0,  126,    0,    0,
+        0,    0,    0,  127,    0,    0,    0,    0,    0,    4,
+        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,  118,  118,   28,  118,  118,   20,
+      118,  118,  118,  118,   19,  118,  118,  118,  118,  118,
 
-      133,  133,  133,  133,   13,    0,  136,   19,  146,   18,
-      145,  145,   16,   16,   16,   16,   15,   16,   19,   18,
-        0,    0,    4,    4,    4,    4,   19,   18,    0,    0,
-       19,   18,    0,    0,   19,   18,    0,    0,    3,    3,
-        3,    3,  117,  117,   70,  117,  117,  117,  117,  117,
-      117,  117,  117,   69,  111,  117,  117,  117,   72,  117,
-      117,  117,  117,  117,  117,   53,    0,    0,    0,    0,
-        0,   37,   63,    0,    0,    0,   44,    0,    0,   50,
-        0,    0,  133,  133,   80,   75,  146,  145,  145,   16,
-       16,    0,    0,    4,    4,    0,    0,    0,    0,    0,
-
-        0,    3,    3,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,   55,  117,
-      117,  117,  117,    0,    0,    0,    0,   36,    0,    0,
-        0,    0,   60,    0,   46,  133,  133,  139,  145,  145,
-       16,   16,    0,    0,    4,    4,    0,    0,    0,    0,
-        0,    0,    3,    3,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  112,  117,   58,  117,  117,  117,  117,
-       31,   22,  117,  117,  117,    0,    0,    0,    0,   47,
-        0,    0,    0,    0,    0,    7,   16,    7,    4,    4,
-        0,    7,    0,    7,    0,    7,    3,    3,   20,  117,
-
-      117,  117,   26,  117,  117,  117,  117,   30,  117,  117,
-      117,   28,  117,  117,   57,   66,    0,    0,   65,   62,
-       61,   42,    0,    6,    6,    6,    6,    6,    3,  117,
-      117,  117,  117,   35,  117,  117,  117,   29,   67,  117,
-       54,   41,    0,    0,   25,  117,  117,   33,   51,  117,
-      117,   56,   49,   48,  117,   34,   52,   71,  110,   32,
-        0
+      118,  118,  118,  118,  118,  118,  118,   44,    0,   60,
+        0,   41,    0,    0,   40,   39,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  134,  134,
+      134,  134,   14,    0,  137,   20,  146,   19,  145,  145,
+       17,   17,   17,   17,   16,   17,   20,   19,    0,    0,
+        5,    5,    5,    5,   20,   19,    0,    0,   20,   19,
+        0,    0,   20,   19,    0,    0,    4,    4,    4,    4,
+      118,  118,   71,  118,  118,  118,  118,  118,  118,  118,
+      118,   70,  112,  118,  118,  118,   73,  118,  118,  118,
+      118,  118,  118,   54,    0,    0,    0,    0,    0,   38,
+
+       64,    0,    0,    0,   45,    0,    0,   51,    0,    0,
+      134,  134,   81,   76,  146,  145,  145,   17,   17,    0,
+        0,    5,    5,    0,    0,    0,    0,    0,    0,    4,
+        4,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,   56,  118,  118,  118,
+      118,    0,    0,    0,    0,   37,    0,    0,    0,    0,
+       61,    0,   47,  134,  134,  140,  145,  145,   17,   17,
+        0,    0,    5,    5,    0,    0,    0,    0,    0,    0,
+        4,    4,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  113,  118,   59,  118,  118,  118,  118,   32,   23,
+
+      118,  118,  118,    0,    0,    0,    0,   48,    0,    0,
+        0,    0,    0,    8,   17,    8,    5,    5,    0,    8,
+        0,    8,    0,    8,    4,    4,   21,  118,  118,  118,
+       27,  118,  118,  118,  118,   31,  118,  118,  118,   29,
+      118,  118,   58,   67,    0,    0,   66,   63,   62,   43,
+        0,    7,    7,    7,    7,    7,    4,  118,  118,  118,
+      118,   36,  118,  118,  118,   30,   68,  118,   55,   42,
+        0,    0,   26,  118,  118,   34,   52,  118,  118,   57,
+       50,   49,  118,   35,   53,   72,  111,   33,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -549,283 +551,287 @@
        10,   10,   10,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1213] =
+static yyconst flex_int16_t yy_base[1241] =
     {   0,
-        0, 4304,   64, 4303,  129,   81,  194, 4302,  259,    0,
-      324,    0,   72,   77,  389,    0,  454,    0,  519,    0,
-      584,    0, 4326, 6980,   98, 6980,  106, 4300,   64, 6980,
-       83, 4299,  102, 4311,   82,  633, 6980,  640,  647,  638,
-      694,  724,  729,   48,  100,  645,  703,  741,  711,  769,
-      709,  743,  777,  782,  704,  710,  771,  734,  799,  789,
-      812,  777, 4298,  798, 4277, 6980,  837, 6980,  843,  715,
-      816, 4308,  857,  863,    0,  869, 4291,  726,  885,  797,
-      890,  914, 4270,    0, 6980, 4310,  810, 4300,  903,  907,
-      942,  903, 4285, 1004, 1069, 4243, 6980,  928,  914, 1015,
-
-     4263,  641,    0,    0,  854,  970,  947, 1118,  941, 4261,
-     1180, 1245,  819,  821, 6980,  830,  934,  909, 1021, 1085,
-     1308, 1087,  927, 1370, 1435,  877, 6980,  893, 1050,  940,
-     1043, 1099, 1498, 1171,  996, 1560, 1625,  952, 6980,  979,
-     1156, 1047, 1209, 1273, 1688, 1180, 1093, 1750, 1815,    0,
-     6980, 4281,  933, 4271, 1091, 1123, 1864, 1236, 4258, 1926,
-     1991, 1151, 1096, 6980, 6980,  946, 6980,    0,    0, 1156,
-     1216, 1261, 1267, 6980, 6980, 6980, 4269, 6980, 6980, 1280,
-     1381, 6980, 6980, 1285, 6980,    0, 4246, 4226, 4232, 1013,
-     4224, 4223,  721, 4219,  947,   59,  709,  856, 4225,  671,
-
-     4228, 4219, 4239, 6980, 1313, 1105, 1336, 6980, 1108,    0,
-     4210, 4220, 4210, 1113,  977, 1006,  810,  739, 4206,   16,
-     4206, 4199, 1215, 6980, 6980, 6980, 6980, 1176, 4234, 4233,
-     1330, 4248, 1397, 1398, 1381, 1446, 1455, 1447, 1457, 1456,
-     1473, 6980, 6980, 6980, 6980, 4194, 1213, 4199, 4199, 1267,
-     4209, 4139, 4136, 1214, 4121, 4118,  995, 1361, 6980, 1420,
-     4154, 1409,    0,    0, 4123, 4125, 1049, 1010, 4167, 1526,
-     1451, 1481, 1490,    0, 6980, 1032,    0,    0, 4161, 1534,
-     1571, 1576, 4122, 4121, 1633, 1254, 1588,    0, 1348, 2038,
-     1155, 2085, 2150, 2215, 4110, 4119, 4118, 1639, 1099,    0,
-
-     1311,    0, 1560, 1682, 1750, 4117, 4116, 1762, 1277, 1599,
-        0, 1502, 2262, 1296, 2309, 2374, 2439, 1337, 6980, 1345,
-     1536, 1671, 1357, 1388, 1500, 1526, 1716, 2502, 1832, 1643,
-     1663, 1844, 1677, 1783, 1405, 1726, 2546, 1736, 2593, 2658,
-     2723, 1473, 6980, 1484, 1791, 1803, 1494, 1505, 1547, 1683,
-     1892, 2786, 1942, 1673, 1729, 1964, 1853, 1901, 1522, 1856,
-     2830, 1885, 2877, 2942, 3007, 1532, 6980, 1554, 1842, 1967,
-     1608, 1641, 1797, 1944, 1956, 3070, 2008, 1808, 1866, 2031,
-     1905, 2101, 1679, 2020, 3114, 2066, 3161, 3226, 3291,    0,
-     6980, 1192,    0,    0, 4153, 1960, 2107, 2215, 4114, 4113,
-
-     2227, 1695, 2124,    0, 1934, 3338, 1582, 3385, 3450, 3515,
-     1897, 1999, 2023, 2027, 2043, 2244,    0, 4128, 4108, 4112,
-     4108, 4104, 4111, 4104, 4095, 4099, 1070, 4090, 4098, 1014,
-     4106, 4090, 4096, 4097, 4089, 4101, 4081, 4080, 4095, 4087,
-     4088, 6980, 2232, 1706, 2111, 2248, 2055,    0, 4058, 4060,
-     4068, 4057, 1727, 4046, 4065, 4056, 4046, 4053, 4051, 4056,
-     4039, 4038, 4038, 4035, 4051, 4039, 4046, 1201, 4075, 6980,
-     6980, 4061, 6980, 1681, 4062, 2277, 2457, 2278, 2279, 2280,
-     2320, 2461, 2322, 2451, 4025, 4039, 4040, 4031, 4057, 6980,
-     2331,    0,    0, 4034, 4027, 4034, 4023, 2445, 2341, 3955,
-
-     3952, 2469, 1848, 2320, 2345, 2093, 3562, 1982, 3992, 2094,
-     3609, 3674, 3944, 3951, 3948, 1647, 2519, 3949, 3946, 2507,
-     1938, 2349, 2523, 2223, 3721, 2469, 3768, 3833, 2609, 2068,
-     2272, 2739, 2482, 2551, 2558, 2617, 3896, 2506, 2344, 2761,
-     3943, 4008, 2631, 2295, 2556, 2751, 2623, 2772, 2792, 2806,
-     4071, 2795, 2513, 2814, 4118, 4183, 2825, 2479, 2579, 2893,
-     2636, 2905, 2915, 2901, 4246, 2858, 2741, 3035, 4293, 4358,
-     3029, 3947, 3944, 3007, 2006, 2565, 2758, 2474, 4405, 2099,
-     3984, 2480, 4452, 4517, 2847, 2909,    0, 3941, 3944, 3942,
-     3934, 3950, 3944, 3948, 3945, 3936, 3932,    0, 3939, 3939,
-
-     3940, 3924, 3931, 3933, 3937, 3935, 3935, 3915, 3933,    0,
-     3922, 3921, 3918, 3919, 3906, 3918, 3904, 3903, 3905, 6980,
-     3892, 3883, 3886, 3875, 3887, 3879,  861, 3885, 3871, 3872,
-     3878, 3871, 3880, 2507, 6980,    0, 3910, 6980, 2511, 6980,
-        0, 3898, 3913, 2814, 2815, 3045, 3046, 3054, 2848, 2029,
-        0, 3867, 3868, 3867, 3866, 1821, 2484, 3037, 3059, 3865,
-     3864, 2524,    0,    0, 3897, 2574,    0,    0, 4582, 3901,
-     4647, 3857, 2132, 3860, 3859,  724, 1376, 3063, 3089, 3858,
-     3857, 2904,    0, 4712, 3895, 4777, 3851, 3102, 3109, 3094,
-     3099, 3143, 3148, 2144, 2268, 3032, 3177, 3321, 3323, 2355,
-
-     2455, 4842, 3134, 4907, 3790, 3187, 3191, 3150, 3307, 3329,
-     3331, 2553, 2645, 3211, 3309, 3336, 3338, 2747, 2753, 4972,
-     3195, 5037, 3781, 3200, 3401, 3316, 3319, 3545, 3547, 2763,
-     2780, 3403, 3414, 3553, 3555, 2839, 2852, 5102, 3344, 5167,
-     3780, 3353, 3408, 3783, 3782, 2779,    0,    0, 3815, 2808,
-        0,    0, 5232, 3819, 5297, 3775, 3765, 3770,    0, 3763,
-     3057,    0, 3764, 3778, 3759, 3774,    0, 3766, 3765, 3761,
-     3773, 3755, 3768, 3759, 3752, 3752, 3307, 3763, 3761, 6980,
-     3764, 6980, 3759, 6980, 3757, 3746, 6980, 6980, 3734, 3737,
-     3739, 3716, 3715, 3707, 3701, 3713, 3693, 3702, 3684, 3626,
-
-     3552, 3736, 3554, 3737, 6980, 3669,    0,    0, 3619,    0,
-     3396, 3519,    0,    0, 5362, 1118, 6980, 3661, 6980, 6980,
-     1128,  765,    0,    0, 5427, 1480, 2929, 3037, 3014, 1171,
-     3090, 3122, 3098, 1211, 3189, 3213, 3363, 1266,    0,    0,
-     3381, 1336, 3617, 3616,    0, 3614, 3608, 3602, 3604, 3596,
-     3600, 3596, 3581,    0, 3589, 3581, 3545, 3557,    0, 3534,
-     3535, 3529, 3527, 3519, 3523,    0, 3479, 3484, 3465, 3374,
-     3356, 6980, 6980, 3331, 3326, 3301, 6980, 3292, 3281, 6980,
-     3291, 3283, 3555, 3620, 3425, 3430, 3431, 2847, 3520, 1611,
-     1698, 1299, 1618, 2512, 2595, 1193, 1553, 1622, 1743, 1841,
-
-     1919, 2425, 2754, 3259, 3161, 3149, 3138, 3136, 3081, 3083,
-     3073, 3062, 3056, 3044, 3044, 3034, 3016, 3017,    0, 3004,
-     2987, 2988, 2972, 2860, 2794, 2730, 2709, 6980, 2689, 2697,
-     2612, 2592, 6980, 2511, 6980, 3632, 3635, 3438, 3623, 3637,
-     1400, 1463, 2254, 2817, 2564, 2848, 1937, 3127, 3302, 3374,
-     3526, 3539, 3548, 3562, 2432, 2427, 2409, 2396, 2293, 2277,
-     2277, 2256, 2243,    0, 2226,    0, 2202, 2199, 2187, 2167,
-        0,    0, 2082, 2056, 2037, 2031, 1977, 1967, 1914, 6980,
-     1881, 1868, 1851, 1793, 1609, 1837, 2111, 1829, 2617, 1808,
-     3658, 3542, 3664, 3751, 3793, 3798, 2933, 1786,    0, 1727,
-
-     1707, 1695,    0, 1649, 1655, 1633, 1570,    0, 1534, 1460,
-     1444,    0, 1397, 1388,    0, 6980, 1366, 1282, 6980, 6980,
-     6980, 6980, 1280, 6980,    0, 3434, 3441, 3593,    0, 1233,
-     1218, 1201, 1158,    0, 1128, 1115, 1027,    0,    0,  907,
-        0, 6980,  898,  839,    0,  816,  767,    0,  719,  662,
-      614,    0, 6980, 6980,  598,    0,    0,    0,    0,    0,
-     6980, 5492, 5498, 5508, 5516, 5520, 5528, 5535, 5546, 5557,
-     5568, 5579, 5586, 5597, 5608, 5619, 5630, 5641, 5652, 5663,
-     5674, 5685, 5696, 5707, 5718, 5729, 5740, 5751, 5762, 5773,
-     5784, 5795, 5801, 5811, 5817, 5823, 5828, 5836, 5845, 5851,
-
-     5855, 5861, 5868, 5879, 5890, 5901, 5912, 5923, 5934, 5945,
-     5956, 5967, 5978, 5989, 6000, 6011, 6022, 6033, 6044, 6055,
-     6066, 6077, 6088, 6099, 6110, 6121, 6127, 6132, 6138, 6147,
-     6158, 6169, 6176, 6184, 6190, 6196, 6202, 6209, 6220, 6231,
-     6242, 6253, 6264, 6271, 6282, 6293, 6304, 6315, 6326, 6337,
-     6348, 6359, 6370, 6381, 6392, 6403, 6414, 6425, 6436, 6447,
-     6458, 6469, 6480, 6491, 6502, 6513, 6524, 6530, 6541, 6552,
-     6563, 6570, 6578, 6584, 6590, 6597, 6608, 6619, 6630, 6641,
-     6652, 6659, 6670, 6681, 6692, 6703, 6714, 6725, 6736, 6747,
-     6758, 6769, 6780, 6791, 6802, 6813, 6824, 6835, 6846, 6857,
-
-     6868, 6879, 6890, 6901, 6912, 6918, 6926, 6932, 6939, 6950,
-     6957, 6968
+        0,   64,   88,   70,  153,   75,  218,   82,  283,  113,
+      348,  117,  109,  412,  434,  121,  499,  130,  564,  135,
+      629,  140, 4564, 7041,  693, 7041,  697, 4538,   63, 7041,
+      385, 4537,   56, 4549,   58,  686, 7041,  696,  703,   60,
+      750,  780,  785,   72,   83,  124,  703,  797,  767,  825,
+      765,  759,  769,  833,   63,  766,  848,  856,  837,  422,
+      864,  863,  862,  846, 4536,  848,  803,  872, 4515, 7041,
+      887, 7041,  924,   84,  897, 4546,  919,  924,    0,  930,
+     4533,  405,  946,  908,  953,  975, 4512,    0, 7041, 4552,
+      689, 4542,  964,  968, 1003,  964, 4528, 1065, 1130,  990,
+
+      994, 4507, 7041,  989, 1008, 1076, 4527,   87, 1000,    0,
+        0,  791, 1031, 1065, 1179, 1002, 4525, 1241, 1306, 1012,
+      815,  426, 7041,  820, 1110,  899, 1104, 1159, 1369, 1128,
+     1031, 1431, 1496, 1056, 1097,  919, 7041,  969, 1162, 1009,
+     1217, 1275, 1559, 1299, 1148, 1621, 1686, 1156, 1181, 1040,
+     7041, 1059, 1184, 1115, 1265, 1336, 1749, 1305, 1208, 1811,
+     1876, 1224, 1258,    0, 7041, 4545,  897, 4535, 1253, 1355,
+     1925, 1368, 4522, 1987, 2052, 1212, 1286, 1296, 1345, 7041,
+     7041,  902, 7041,    0,    0, 1343, 1359, 1373, 1397, 7041,
+     7041, 7041, 4533, 7041, 7041, 1405, 1442, 7041, 7041, 1447,
+
+     7041,    0, 4510, 4490, 4496, 1050, 4488, 4490,  658, 4482,
+     1143,  105,  851,  874, 4488,  727, 4491, 4482, 4504, 7041,
+     1504, 1154, 1459, 7041, 1184,    0, 4463, 4465, 4455, 1178,
+      907, 1291,  685,  946, 4451,   22, 4451, 4444, 1108, 7041,
+     7041, 7041, 7041, 1251, 4479, 4478, 1405, 4493, 1524, 1532,
+     1442, 1542, 1548, 1543, 1559, 1594, 1561, 7041, 7041, 7041,
+     7041, 1513, 4439, 1364, 4444, 4444, 1436, 4451, 4450, 4447,
+     1240, 4432, 4429, 1228, 1380, 1604, 7041, 1638, 4394, 1633,
+        0,    0, 4363, 4365,  932,  828, 4407, 1643, 1468, 1665,
+     1669,    0, 7041, 1264,    0,    0, 4401, 1656, 1697, 1703,
+
+     4362, 4361, 1715, 1283, 1743,    0, 1518, 2099, 1389, 2146,
+     2211, 2276, 1448, 4350, 4359, 4358, 1822, 1424, 1527,    0,
+     1482,    0, 1660, 1828, 1754, 4357, 4356, 1884, 1390, 1777,
+        0, 1553, 2323, 1480, 2370, 2435, 2500, 1581, 1550, 7041,
+     1593, 1737, 1798, 1611, 1616, 1645, 1703, 1850, 2563, 1904,
+     1680, 1717, 2003, 1735, 1917, 1725, 1892, 2607, 1945, 2654,
+     2719, 2784, 1804, 1828, 1743, 7041, 1777, 1857, 1925, 1783,
+     1786, 1906, 1963, 2015, 2847, 2025, 1959, 1966, 2069, 2011,
+     2081, 1862, 2090, 2891, 1969, 2938, 3003, 3068, 1980, 2036,
+     1974, 7041, 2017, 2127, 2133, 2039, 2076, 2101, 2120, 2162,
+
+     3131, 2292, 2083, 2135, 2304, 2171, 2173, 2078, 2300, 3175,
+     2193, 3222, 3287, 3352, 2199, 2204,    0, 7041, 1320,    0,
+        0, 4393, 2308, 2381, 2386, 4354, 4353, 2500, 2087, 2340,
+        0, 2159, 3399, 1604, 3446, 3511, 3576, 2313, 2344, 2370,
+     2398, 2402, 2409, 2513,    0, 4368, 4348, 4352, 4348, 4345,
+     4352, 4345, 4336, 4339,  786, 4330, 4338, 1067, 4346, 4330,
+     4336, 4337, 4329, 4341, 4325, 4324, 4339, 4331, 4330, 7041,
+     2517, 2106, 2522, 2529, 2312,    0, 4321, 4323, 4331, 4318,
+     2248, 4286, 4305, 4296, 4286, 4293, 4291, 4296, 4282, 4281,
+     4281, 4278, 4291, 4283, 4290, 1509, 4319, 7041, 7041, 4305,
+
+     7041, 1597, 4302, 2545, 2546, 2563, 2565, 2578, 2580, 2583,
+     2582, 2598, 4265, 4279, 4280, 4271, 4297, 7041, 2619,    0,
+        0, 4274, 4267, 4274, 4263, 2596, 2667, 4264, 4261, 2654,
+     2179, 2556, 2603, 2393, 3623, 1787, 4301, 1833, 3670, 3735,
+     4253, 4191, 4188, 2505, 2676, 4189, 4186, 2784, 2317, 2682,
+     2686, 2690, 3782, 2601, 3829, 3894, 2812, 2567, 2808, 2816,
+     2836, 2838, 2867, 2871, 3957, 2814, 2841, 2869, 4004, 4069,
+     2954, 2642, 2875, 3084, 2879, 2881, 2903, 2911, 4132, 3106,
+     2893, 3114, 4179, 4244, 2963, 2914, 3086, 3137, 2968, 2977,
+     3165, 3169, 4307, 3122, 2988, 3140, 4354, 4419, 3192, 4187,
+
+     4184, 3077, 2338, 2693, 3179, 2974, 4466, 1852, 4224, 1920,
+     4513, 4578, 3222, 3230,    0, 4181, 4184, 4182, 4174, 4190,
+     4184, 4188, 4185, 4176, 4172,    0, 4179, 4179, 4181, 4165,
+     4172, 4174, 4177, 4175, 4175, 4155, 4173,    0, 4162, 4161,
+     4158, 4159, 4150, 4162, 4148, 4147, 4147, 7041, 4155, 4146,
+     4149, 4136, 4127, 4119,  829, 4125, 4111, 4112, 4118, 4111,
+     4123, 1946, 7041,    0, 4153, 7041, 2010, 7041,    0, 4141,
+     4156, 3115, 3193, 3363, 3364, 3372, 3373, 2360,    0, 4107,
+     4112, 4111, 4110, 1031, 3099, 3234, 3238, 4109, 4104, 2128,
+        0,    0, 4137, 2550,    0,    0, 4643, 4141, 4708, 4097,
+
+     2422, 4100, 4099, 1169, 1544, 3244, 3248, 4098, 4097, 3163,
+        0, 4773, 4135, 4838, 4091, 3380, 3387, 2819, 2923, 3390,
+     3433, 2713, 2956, 3108, 3133, 3474, 3606, 2986, 3097, 4903,
+     3268, 4968, 4090, 3463, 3471, 3419, 3430, 3608, 3614, 3160,
+     3178, 3270, 3273, 3616, 3621, 3188, 3275, 5033, 3277, 5098,
+     4089, 3476, 3484, 3592, 3601, 3623, 3698, 3400, 3435, 3496,
+     3594, 3810, 3816, 3498, 3604, 5163, 3629, 5228, 4088, 3638,
+     3670, 4091, 4021, 2608,    0,    0, 4054, 2840,    0,    0,
+     5293, 4058, 5358, 4014, 4004, 4009,    0, 4001, 3405,    0,
+     4002, 4016, 3997, 4012,    0, 4004, 4003, 3999, 4011, 3993,
+
+     4006, 3997, 3990, 3990, 2628, 4002, 4000, 7041, 4002, 7041,
+     3997, 7041, 3999, 3996, 7041, 7041, 3985, 3987, 3991, 3976,
+     3987, 3979, 3975, 3982, 3968, 3951, 3934, 3938, 3850, 3972,
+     3842, 3799, 7041, 3889,    0,    0, 3835,    0, 3681, 3382,
+        0,    0, 5423, 1124, 7041, 3877, 7041, 7041,  940, 1719,
+        0,    0, 5488, 1292, 3646, 3695, 3656, 1096, 3705, 3708,
+     3663, 1230, 3712, 3714, 3669, 1652,    0,    0, 3671, 2567,
+     3822, 3821,    0, 3803, 3790, 3771, 3772, 3765, 3688, 3661,
+     3623,    0, 3623, 3618, 3584, 3592,    0, 3571, 3576, 3565,
+     3568, 3553, 3537,    0, 3451, 3457, 3441, 3447, 3387, 7041,
+
+     7041, 3369, 3373, 3362, 7041, 3358, 3347, 7041, 3339, 3328,
+     3974, 4015, 3851, 3852, 3721, 3946, 3947, 1662, 1905, 1489,
+     1546, 1957, 2246, 1424, 1710, 1817, 1869, 2062, 2779, 2858,
+     3678, 3312, 3819, 3317, 3224, 3215, 3157, 3166, 3161, 3118,
+     3117, 3111, 3100, 3086, 3068, 3073,    0, 2953, 2927, 2908,
+     2878, 2866, 2821, 2808, 2774, 7041, 2750, 2758, 2657, 2630,
+     7041, 2561, 7041, 3959, 3975, 3725, 2381, 3079, 1349, 1753,
+      772, 1912, 1975, 2063,  804, 1805, 1893, 2305, 3188, 3587,
+     3650, 3681, 2549, 2531, 2507, 2495, 2480, 2456, 2456, 2373,
+     2355,    0, 2340,    0, 2323, 2296, 2295, 2254,    0,    0,
+
+     2219, 2163, 2137, 2114, 2090, 2076, 2037, 7041, 2035, 2023,
+     1993, 1975, 1653, 1985, 2553, 1969, 2626, 1953, 3802, 3867,
+     3874, 3880, 3884, 3962, 3169, 1852,    0, 1795, 1723, 1702,
+        0, 1593, 1545, 1505, 1475,    0, 1407, 1378, 1374,    0,
+     1356, 1291,    0, 7041, 1279, 1245, 7041, 7041, 7041, 7041,
+     1211, 7041,    0, 3845, 3968, 3970,    0, 1197, 1163, 1156,
+     1115,    0, 1069, 1045, 1036,    0,    0, 1015,    0, 7041,
+      912,  900,    0,  776,  675,    0,  367,  356,   61,    0,
+     7041, 7041,   23,    0,    0,    0,    0,    0, 7041, 5553,
+     5559, 5569, 5577, 5581, 5589, 5596, 5607, 5618, 5629, 5640,
+
+     5647, 5658, 5669, 5680, 5691, 5702, 5713, 5724, 5735, 5746,
+     5757, 5768, 5779, 5790, 5801, 5812, 5823, 5834, 5845, 5856,
+     5862, 5872, 5878, 5884, 5889, 5897, 5906, 5912, 5916, 5922,
+     5929, 5940, 5951, 5962, 5973, 5984, 5995, 6006, 6017, 6028,
+     6039, 6050, 6061, 6072, 6083, 6094, 6105, 6116, 6127, 6138,
+     6149, 6160, 6171, 6182, 6188, 6193, 6199, 6208, 6219, 6230,
+     6237, 6245, 6251, 6257, 6263, 6270, 6281, 6292, 6303, 6314,
+     6325, 6332, 6343, 6354, 6365, 6376, 6387, 6398, 6409, 6420,
+     6431, 6442, 6453, 6464, 6475, 6486, 6497, 6508, 6519, 6530,
+     6541, 6552, 6563, 6574, 6585, 6591, 6602, 6613, 6624, 6631,
+
+     6639, 6645, 6651, 6658, 6669, 6680, 6691, 6702, 6713, 6720,
+     6731, 6742, 6753, 6764, 6775, 6786, 6797, 6808, 6819, 6830,
+     6841, 6852, 6863, 6874, 6885, 6896, 6907, 6918, 6929, 6940,
+     6951, 6962, 6973, 6979, 6987, 6993, 7000, 7011, 7018, 7029
     } ;
 
-static yyconst flex_int16_t yy_def[1213] =
+static yyconst flex_int16_t yy_def[1241] =
     {   0,
-     1061,    1,    1,    3, 1061,    5, 1061,    7, 1061,    9,
-     1061,   11,    9,    9, 1061,   15, 1061,   17, 1061,   19,
-     1061,   21, 1061, 1061, 1061, 1061, 1061, 1061, 1062, 1061,
-     1063, 1061, 1061, 1064, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1065, 1065, 1065, 1065,
-     1065, 1065, 1065, 1065, 1061, 1061, 1061, 1061, 1061, 1061,
-       39, 1061, 1061, 1065, 1061, 1061, 1061, 1061, 1061, 1062,
-     1066, 1064, 1061, 1067,   41, 1061, 1061, 1068, 1068, 1068,
-     1061, 1061, 1061, 1069, 1061, 1069, 1070, 1071, 1069, 1069,
-     1069,   91, 1069, 1072, 1072, 1069, 1061, 1061,   41, 1061,
-
-     1073, 1073, 1074, 1074, 1075, 1074, 1074, 1074,  108, 1074,
-     1076, 1076, 1062, 1077, 1061, 1077, 1078, 1079, 1077, 1077,
-     1077,  121, 1077, 1080, 1080, 1081, 1061, 1081, 1082, 1083,
-     1081, 1081, 1081,  133, 1081, 1084, 1084, 1085, 1061, 1085,
-     1086, 1087, 1085, 1085, 1085,  145, 1085, 1088, 1088, 1089,
-     1061, 1089, 1090, 1091, 1089, 1089, 1089,  157, 1089, 1092,
-     1092, 1061, 1061, 1061, 1061, 1062, 1061, 1062, 1093, 1093,
-     1093, 1093, 1093, 1061, 1061, 1061, 1094, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1095, 1095, 1095, 1095, 1095,
-     1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
-
-     1095, 1095, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1096,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1097,
-     1098, 1099, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
-     1098, 1061, 1061, 1061, 1061, 1061, 1061, 1095, 1095, 1095,
-     1095, 1095, 1095, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1100, 1100, 1101, 1102, 1102, 1102, 1102, 1103, 1099, 1103,
-     1103, 1061, 1061, 1104, 1061, 1105, 1104, 1105, 1106, 1104,
-     1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
-     1104, 1107, 1061, 1107, 1104, 1061, 1061, 1061, 1097, 1108,
-
-     1109, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
-     1108, 1108, 1108, 1108, 1110, 1061, 1110, 1111, 1061, 1111,
-     1112, 1112, 1111, 1112, 1113, 1113, 1111, 1111, 1111, 1111,
-     1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1114, 1061,
-     1114, 1115, 1061, 1115, 1116, 1116, 1115, 1116, 1117, 1117,
-     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
-     1115, 1115, 1118, 1061, 1118, 1119, 1061, 1119, 1120, 1120,
-     1119, 1120, 1121, 1121, 1119, 1119, 1119, 1119, 1119, 1119,
-     1119, 1119, 1119, 1119, 1119, 1119, 1122, 1061, 1122, 1123,
-     1061, 1124, 1123, 1124, 1125, 1123, 1123, 1123, 1123, 1123,
-
-     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1126, 1061, 1126,
-     1061, 1127, 1127, 1127, 1127, 1061, 1128, 1128, 1128, 1128,
-     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
-     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
-     1128, 1061, 1061, 1061, 1061, 1061, 1061, 1129, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1130, 1131, 1061,
-     1061, 1061, 1061, 1132, 1133, 1134, 1134, 1134, 1134, 1134,
-     1134, 1134, 1134, 1134, 1061, 1128, 1128, 1061, 1135, 1061,
-     1135, 1136, 1137, 1137, 1137, 1137, 1137, 1138, 1139, 1139,
-
-     1139, 1139, 1139, 1139, 1139, 1139, 1139, 1140, 1141, 1142,
-     1143, 1061, 1139, 1061, 1061, 1144, 1145, 1145, 1145, 1145,
-     1145, 1145, 1145, 1145, 1145, 1146, 1147, 1061, 1148, 1148,
-     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1149, 1150, 1151,
-     1152, 1061, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153,
-     1153, 1154, 1155, 1156, 1157, 1061, 1158, 1158, 1158, 1158,
-     1158, 1158, 1158, 1158, 1158, 1159, 1160, 1161, 1162, 1061,
-     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1164,
-     1165, 1166, 1167, 1061, 1061, 1061, 1168, 1168, 1168, 1168,
-     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
-
-     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
-     1168, 1168, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1169, 1061, 1169, 1170, 1061, 1171, 1061,
-     1171, 1172, 1061, 1173, 1173, 1173, 1173, 1173, 1173, 1061,
-     1174, 1175, 1175, 1175, 1175, 1176, 1176, 1177, 1177, 1177,
-     1177, 1178, 1177, 1178, 1179, 1180, 1177, 1180, 1181, 1177,
-     1061,  671, 1177, 1061, 1061, 1182, 1182, 1183, 1183, 1183,
-     1183, 1184, 1183, 1185, 1183, 1061,  686, 1186, 1186, 1186,
-     1186, 1187, 1187, 1186, 1187, 1188, 1188, 1189, 1189, 1186,
-
-     1189, 1190, 1186, 1061,  704, 1191, 1191, 1191, 1191, 1192,
-     1192, 1191, 1192, 1193, 1193, 1194, 1194, 1191, 1194, 1195,
-     1191, 1061,  722, 1196, 1196, 1196, 1196, 1197, 1197, 1196,
-     1197, 1198, 1198, 1199, 1199, 1196, 1199, 1200, 1196, 1061,
-      740, 1201, 1201, 1201, 1201, 1202, 1201, 1202, 1203, 1204,
-     1201, 1204, 1205, 1201, 1061,  755, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1207, 1207, 1207, 1207, 1061, 1061, 1208, 1208, 1208, 1208,
-     1209, 1209, 1210, 1210, 1061,  815, 1061, 1210, 1061, 1061,
-     1211, 1211, 1212, 1212, 1061,  825, 1186, 1186,  704,  704,
-     1191, 1191,  722,  722, 1196, 1196,  740,  740, 1201, 1201,
-      755,  755, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1207, 1207, 1207, 1207, 1208, 1209, 1209,  815,
-      815, 1211, 1211,  825,  825,  704,  704,  722,  722,  740,
-
-      740,  755,  755, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1207, 1207, 1061, 1209, 1209,
-      815,  815, 1211, 1211,  825,  825,  704,  704,  722,  722,
-      740,  740,  755,  755, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1210, 1210, 1212, 1212,
-     1186, 1186, 1191, 1191, 1196, 1196, 1201, 1201, 1206, 1206,
-
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1210, 1186, 1191, 1196, 1201, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1061, 1061, 1061, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1061, 1061, 1206, 1206, 1206, 1206, 1206, 1206,
-        0, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061
+     1089,    1,    1,    3, 1089,    5, 1089,    7, 1089,    9,
+     1089,   11,    9,    9, 1089,   15, 1089,   17, 1089,   19,
+     1089,   21, 1089, 1089, 1089, 1089, 1089, 1089, 1090, 1089,
+     1091, 1089, 1089, 1092, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089,   39, 1089, 1089, 1093, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1090, 1094, 1092, 1089, 1095,   41, 1089,
+     1089, 1096, 1096, 1096, 1089, 1089, 1089, 1097, 1089, 1097,
+     1098, 1099, 1097, 1097, 1097,   95, 1097, 1100, 1100, 1097,
+
+     1097, 1097, 1089, 1089,   41, 1089, 1101, 1101, 1089, 1102,
+     1102, 1103, 1102, 1102, 1102,  115, 1102, 1104, 1104, 1102,
+     1090, 1105, 1089, 1105, 1106, 1107, 1105, 1105, 1105,  129,
+     1105, 1108, 1108, 1105, 1105, 1109, 1089, 1109, 1110, 1111,
+     1109, 1109, 1109,  143, 1109, 1112, 1112, 1109, 1109, 1113,
+     1089, 1113, 1114, 1115, 1113, 1113, 1113,  157, 1113, 1116,
+     1116, 1113, 1113, 1117, 1089, 1117, 1118, 1119, 1117, 1117,
+     1117,  171, 1117, 1120, 1120, 1117, 1117, 1089, 1089, 1089,
+     1089, 1090, 1089, 1090, 1121, 1121, 1121, 1121, 1121, 1089,
+     1089, 1089, 1122, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+
+     1089, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1124, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1125, 1126, 1127, 1126, 1126,
+     1126, 1126, 1126, 1126, 1126, 1126, 1126, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1123, 1123, 1123, 1123, 1123, 1123,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1128, 1128,
+     1129, 1130, 1130, 1130, 1130, 1131, 1127, 1131, 1131, 1089,
+     1089, 1132, 1089, 1133, 1132, 1133, 1134, 1132, 1132, 1132,
+
+     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1135,
+     1089, 1135, 1132, 1132, 1089, 1089, 1089, 1125, 1089, 1136,
+     1137, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
+     1136, 1136, 1136, 1136, 1138, 1089, 1138, 1136, 1139, 1089,
+     1139, 1140, 1140, 1139, 1140, 1141, 1141, 1139, 1139, 1139,
+     1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1142,
+     1089, 1142, 1139, 1139, 1143, 1089, 1143, 1144, 1144, 1143,
+     1144, 1145, 1145, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1146, 1089, 1146, 1143, 1143,
+     1147, 1089, 1147, 1148, 1148, 1147, 1148, 1149, 1149, 1147,
+
+     1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
+     1147, 1150, 1089, 1150, 1147, 1147, 1151, 1089, 1152, 1151,
+     1152, 1153, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
+     1151, 1151, 1151, 1151, 1154, 1089, 1154, 1151, 1089, 1155,
+     1155, 1155, 1155, 1089, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1089,
+     1089, 1089, 1089, 1089, 1089, 1157, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1158, 1159, 1089, 1089, 1089,
+
+     1089, 1160, 1161, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+     1162, 1162, 1089, 1156, 1156, 1089, 1163, 1089, 1163, 1164,
+     1165, 1165, 1165, 1165, 1165, 1166, 1167, 1167, 1167, 1167,
+     1167, 1167, 1167, 1167, 1167, 1168, 1169, 1170, 1171, 1089,
+     1167, 1089, 1089, 1172, 1173, 1173, 1173, 1173, 1173, 1173,
+     1173, 1173, 1173, 1174, 1175, 1089, 1176, 1176, 1176, 1176,
+     1176, 1176, 1176, 1176, 1176, 1177, 1178, 1179, 1180, 1089,
+     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1182,
+     1183, 1184, 1185, 1089, 1186, 1186, 1186, 1186, 1186, 1186,
+     1186, 1186, 1186, 1187, 1188, 1189, 1190, 1089, 1191, 1191,
+
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1192, 1193, 1194,
+     1195, 1089, 1089, 1089, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1197, 1089, 1197, 1198, 1089, 1199, 1089, 1199, 1200,
+     1089, 1201, 1201, 1201, 1201, 1201, 1201, 1089, 1202, 1203,
+     1203, 1203, 1203, 1204, 1204, 1205, 1205, 1205, 1205, 1206,
+     1205, 1206, 1207, 1208, 1205, 1208, 1209, 1205, 1089,  699,
+
+     1205, 1089, 1089, 1210, 1210, 1211, 1211, 1211, 1211, 1212,
+     1211, 1213, 1211, 1089,  714, 1214, 1214, 1214, 1214, 1215,
+     1215, 1214, 1215, 1216, 1216, 1217, 1217, 1214, 1217, 1218,
+     1214, 1089,  732, 1219, 1219, 1219, 1219, 1220, 1220, 1219,
+     1220, 1221, 1221, 1222, 1222, 1219, 1222, 1223, 1219, 1089,
+      750, 1224, 1224, 1224, 1224, 1225, 1225, 1224, 1225, 1226,
+     1226, 1227, 1227, 1224, 1227, 1228, 1224, 1089,  768, 1229,
+     1229, 1229, 1229, 1230, 1229, 1230, 1231, 1232, 1229, 1232,
+     1233, 1229, 1089,  783, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1235, 1235,
+     1235, 1235, 1089, 1089, 1236, 1236, 1236, 1236, 1237, 1237,
+     1238, 1238, 1089,  843, 1089, 1238, 1089, 1089, 1239, 1239,
+     1240, 1240, 1089,  853, 1214, 1214,  732,  732, 1219, 1219,
+      750,  750, 1224, 1224,  768,  768, 1229, 1229,  783,  783,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1089, 1089, 1089, 1089, 1089, 1089,
+
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1235, 1235, 1235, 1235, 1236, 1237, 1237,  843,  843, 1239,
+     1239,  853,  853,  732,  732,  750,  750,  768,  768,  783,
+      783, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1235, 1235, 1089, 1237, 1237,  843,  843,
+     1239, 1239,  853,  853,  732,  732,  750,  750,  768,  768,
+      783,  783, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+
+     1234, 1234, 1234, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1238, 1238, 1240, 1240, 1214, 1214,
+     1219, 1219, 1224, 1224, 1229, 1229, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1238, 1214, 1219, 1224, 1229, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1089,
+     1089, 1089, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1089, 1089, 1234, 1234, 1234, 1234, 1234, 1234,    0, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089
     } ;
 
-static yyconst flex_int16_t yy_nxt[7046] =
+static yyconst flex_int16_t yy_nxt[7107] =
     {   0,
        24,   25,   26,   27,   25,   28,   29,   30,   31,   32,
        33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
@@ -833,778 +839,785 @@
        47,   47,   48,   47,   48,   47,   48,   48,   47,   24,
        47,   47,   47,   47,   47,   47,   47,   49,   47,   50,
        47,   47,   51,   47,   52,   47,   47,   53,   47,   54,
-       47,   47,   47,   55,   56,   58,  464,   59,   58,   24,
-      167,  223,  224,   24,   24,  465,   24,   60,  113,   60,
-       61,   24,   81,  113,   82,   81,   62,   63,   24,   24,
-       41,   42,   42,   42,  178,   41,   42,   42,   42,  162,
-
-      431,  162,  162,  168,  432,   83,  179,  162,  164,  162,
-      162,   47,  175,   47,  163,  170,   47,  171,   47,  172,
-      173,   64,  163,   47,  225,  226,  176,   24,   24,   66,
-       67,   68,   69,   67,   66,   70,   66,   71,   66,   66,
-       72,   66,   73,   66,   73,   74,   66,   75,   76,   76,
-       76,   66,   77,   66,   66,   78,   78,   78,   78,   78,
-       78,   79,   78,   79,   78,   79,   79,   78,   66,   78,
-       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
-       78,   78,   78,   78,   78,   78,   80,   78,   78,   78,
-       78,   78,   66,   66,   84,   84,   85,   86,   84,   84,
-
-       87,   84,   84,   84,   84,   88,   84,   89,   84,   89,
-       90,   84,   91,   92,   92,   92,   84,   93,   84,   84,
-       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
-       94,   94,   94,   84,   94,   94,   94,   94,   94,   94,
-       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
-       94,   95,   94,   94,   94,   94,   94,   84,   84,   24,
-       24,   97,   24,   24,   24,   29,   24,   24,   24,   24,
-       34,   24,   60,   24,   60,   98,   24,   99,  100,  100,
-      100,   24,   63,   24,   24,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,   24,  101,
-
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  102,  101,  101,  101,
-      101,  101,   24,   24,  103,  103,  104,  103,  103,  103,
-       29,  103,  103,  103,  103,  105,  103,  106,  103,  106,
-      107,  103,  108,  109,  109,  109,  103,  110,  103,  103,
-      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
-      111,  111,  111,  103,  111,  111,  111,  111,  111,  111,
-      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
-      111,  112,  111,  111,  111,  111,  111,  103,  103,  114,
-      114,  115,  116,  114,  114,  117,  114,  114,  114,  114,
-
-      118,  114,  119,  114,  119,  120,  114,  121,  122,  122,
-      122,  114,  123,  114,  114,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  124,  124,  124,  114,  124,
-      124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  124,  125,  124,  124,  124,
-      124,  124,  114,  114,  126,  126,  127,  128,  126,  126,
-      129,  126,  126,  126,  126,  130,  126,  131,  126,  131,
-      132,  126,  133,  134,  134,  134,  126,  135,  126,  126,
-      136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-      136,  136,  136,  126,  136,  136,  136,  136,  136,  136,
-
-      136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-      136,  137,  136,  136,  136,  136,  136,  126,  126,  138,
-      138,  139,  140,  138,  138,  141,  138,  138,  138,  138,
-      142,  138,  143,  138,  143,  144,  138,  145,  146,  146,
-      146,  138,  147,  138,  138,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  138,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  149,  148,  148,  148,
-      148,  148,  138,  138,  150,  150,  151,  152,  150,  150,
+       47,   47,   47,   55,   56,   57,  191,   58,   57,  183,
+      194,   67,  492,   68,   67, 1088,   85,  219,   86,   85,
+      192,  493,  195,  100,  220,  101,  100,  258,   59,   60,
+      183,   61,   60,   24,   69,  239,  240,   24,   24,   87,
+
+       24,   62,  184,   62,   63,   24,  102,  241,  242,  287,
+       64,   65,   24,   24,  109,  121,  109,  109,  120, 1087,
+      120,  120,  134,  184,  135,  134,  259,   41,   42,   42,
+       42,  148,  318,  149,  148,   47,  162,   47,  163,  162,
+       47,  176,   47,  177,  176,   66,  459,   47,  243,  244,
+      460,   24,   24,   70,   71,   72,   73,   71,   70,   74,
+       70,   75,   70,   70,   76,   70,   77,   70,   77,   78,
+       70,   79,   80,   80,   80,   70,   81,   70,   70,   82,
+       82,   82,   82,   82,   82,   83,   82,   83,   82,   83,
+       83,   82,   70,   82,   82,   82,   82,   82,   82,   82,
+
+       82,   82,   82,   82,   82,   82,   82,   82,   82,   82,
+       84,   82,   82,   82,   82,   82,   70,   70,   88,   88,
+       89,   90,   88,   88,   91,   88,   88,   88,   88,   92,
+       88,   93,   88,   93,   94,   88,   95,   96,   96,   96,
+       88,   97,   88,   88,   98,   98,   98,   98,   98,   98,
+       98,   98,   98,   98,   98,   98,   98,   88,   98,   98,
+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+       98,   98,   98,   98,   98,   99,   98,   98,   98,   98,
+       98,   88,   88,   24,   24,  103,   24,   24,   24,   29,
+       24,   24,   24,   24,   34,   24,   62,   24,   62,  104,
+
+       24,  105,  106,  106,  106,   24,   65,   24,   24,  107,
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
+      107,  107,   24,  107,  107,  107,  107,  107,  107,  107,
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
+      108,  107,  107,  107,  107,  107,   24,   24,  110,  110,
+      111,  110,  110,  110,   29,  110,  110,  110,  110,  112,
+      110,  113,  110,  113,  114,  110,  115,  116,  116,  116,
+      110,  117,  110,  110,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  110,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+
+      118,  118,  118,  118,  118,  119,  118,  118,  118,  118,
+      118,  110,  110,  109, 1086,  109,  109,  186,  121,  187,
+      246,  188,  189,  264, 1085,  264,  264,  287,  340,  341,
+       41,   42,   42,   42,  122,  122,  123,  124,  122,  122,
+      125,  122,  122,  122,  122,  126,  122,  127,  122,  127,
+      128,  122,  129,  130,  130,  130,  122,  131,  122,  122,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+      132,  132,  132,  122,  132,  132,  132,  132,  132,  132,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+      132,  133,  132,  132,  132,  132,  132,  122,  122,  136,
+
+      136,  137,  138,  136,  136,  139,  136,  136,  136,  136,
+      140,  136,  141,  136,  141,  142,  136,  143,  144,  144,
+      144,  136,  145,  136,  136,  146,  146,  146,  146,  146,
+      146,  146,  146,  146,  146,  146,  146,  146,  136,  146,
+      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
+      146,  146,  146,  146,  146,  146,  147,  146,  146,  146,
+      146,  146,  136,  136,  150,  150,  151,  152,  150,  150,
       153,  150,  150,  150,  150,  154,  150,  155,  150,  155,
-
       156,  150,  157,  158,  158,  158,  150,  159,  150,  150,
       160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+
       160,  160,  160,  150,  160,  160,  160,  160,  160,  160,
       160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  161,  160,  160,  160,  160,  160,  150,  150,  180,
-     1060,  181,  181,  181,  181,  203,  180,  182,  181,  181,
-      181,  181,  204,  269,  183,  184,  184,  184,  184,  227,
-      228,  185, 1059,  186,  186,  186,  186,  186,  187,  186,
-      186,  186,  186,  186,  186,  186,  299,  186,  188,  189,
-      190,  186,  191,  192,  193,  186,  194,  195,  196,  197,
-
-      186,  198,  186,  199,  200,  201,  186,  186,  186,  202,
-      205,  229,  181,  181,  181,  181,  438,  229,  230,  229,
-     1058,  167,  206,  207,  230,  232,  230,  208,  242,  209,
-      439,  232,  210,  232,  244,  247,  206,  247,  247,  207,
-      205,  230,  181,  181,  181,  181,  269,  209,  269,  229,
-      433,  229,  434,  207,  168,  210,  230,  208,  230,  233,
-      233,  233,  233,  232,  234,  232,  425,  243,  237,  207,
-      211,  426,  212,  821,  245,  213, 1057,  229,  214,  215,
-      216,  217,  218,  219,  230,  229,  220,  269,  221,  222,
-      229,  232,  230,  461,  238,  225,  226,  230,  462,  232,
-
-      247,  164,  247,  247,  232,  180,  229,  181,  181,  181,
-      181, 1056,  230,  230,  246,  235,  277,  893,  211,  269,
-      232,  236,  239,  319,  320,  167,  254,  215,  216,  255,
-      256,  219,  319,  320,  241,  240, 1061,  222,  258,  259,
-      260,  258,  271,  239,  258,  259,  260,  258,  262,  278,
-      262,  459,  262,  262,  186,  248,  300,  186,  168,  186,
-      177,  249,  250,  251,  252,  302,  253,  460,  186,  186,
-      186,  263, 1055,  180,  186,  181,  181,  181,  181,  343,
-      344,  184,  184,  184,  184,  205, 1054,  181,  181,  181,
-      181,  272,  259,  273,  272,  343,  344,  435,  207,  436,
-
-      230,  793,  208,  270,  270,  270,  270,  269,  265,  266,
-      794,  319,  326,  267,  207,  272,  259,  273,  272,  280,
-      323,  281,  281,  281,  281,  282,  282,  282,  282,  319,
-      320,  274,  298,  298,  298,  298,  319,  322,  274,  393,
-      323,  274,  343,  350, 1053,  274,  184,  184,  184,  184,
-      338,  347,  167,  283,  367,  368,  274,  284,  285, 1052,
-      281,  281,  281,  281,  274,  305,  305,  305,  305,  300,
-      286,  287,  394,  324,  296,  288,  300,  289,  297,  300,
-      290,  367,  368,  300,  286,  168,  303,  287,  304,  304,
-      304,  304,  428,  306,  300,  289,  429,  307,  343,  344,
-
-      430,  468,  300,  290,  274,  274,  469,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  362,
-      274,  274,  454,  319,  320,  230,  293,  274,  274,  274,
-      455,  205,  269,  298,  298,  298,  298,  327,  277,  328,
-      328,  328,  328,  274,  207,  343,  344,  456,  208,  367,
-      374,  457,  343,  346,  421,  600,  347,  601,  371,  351,
-      207,  352,  352,  352,  352,  458,  422,  274,  274,  274,
-      274,  278,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  274,  274,  274, 1051,  274,  274,  319,  320,  348,
-      496,  293,  274,  274,  274,  367,  368,  411,  497,  411,
-
-      411,  343,  344,  329,  329,  329,  329,  396,  274,  397,
-      397,  397,  397,  596,  294,  318,  386,  353,  353,  353,
-      353,  269,  318,  444,  444,  318,  447,  447,  447,  318,
-      597,  330,  274,  274,  308,  331,  304,  304,  304,  304,
-      318,  398,  398,  398,  398,  354,  309,  310,  318,  355,
-      269,  311,  162,  312,  162,  162,  313,  516,  367,  370,
-      309,  508,  371,  310,  452,  453,  509,  163,  292,  399,
-      891,  312, 1050,  400,  412,  412,  412,  412,  892,  313,
-      300,  300,  300,  300,  300,  300, 1049,  300,  300,  300,
-      300,  300,  300,  300,  300,  372,  300,  300,  393,  342,
-
-      471,  472,  316,  300,  300,  300,  342,  635,  366,  342,
-     1048,  367,  368,  342,  247,  366,  247,  247,  366,  300,
-      339,  468,  366,  897,  342,  375,  469,  376,  376,  376,
-      376,  394,  342,  366,  413,  413,  413,  413,  947,  470,
-      636,  366,  339,  300,  300,  300,  300,  300,  300,  300,
-      300, 1047,  300,  300,  300,  300,  300,  300,  300,  300,
-      363,  300,  300,  899,  390,  452,  488,  316,  300,  300,
-      300,  390,  503,  503,  390,  367,  368, 1046,  390,  414,
-      414,  414,  414, 1045,  300,  415,  415,  415,  415,  390,
-      317,  377,  377,  377,  377,  521,  521,  390,  184,  184,
-
-      184,  184,  468,  184,  184,  184,  184,  526,  300,  300,
-      319,  320,  428,  300,  416,  387,  429,  177,  901,  378,
-      487,  269,  302,  379,  332, 1044,  328,  328,  328,  328,
-      416,  443,  443,  443,  443, 1043,  333,  334,  229,  319,
-      320,  335,  416,  336,  943,  230,  337,  319,  320,  445,
-      333,  445,  232,  334,  446,  446,  446,  446,  416,  319,
-      320,  336,  258,  259,  260,  258,  506,  506,  506,  337,
-      318,  318,  319,  320,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  408,  318,  318,  903,  229,
-      319,  322,  340,  318,  318,  318,  230,  205,  269,  181,
-
-      181,  181,  181,  232,  987,  229,  229,  319,  320,  318,
-      207, 1042,  230,  230,  208,  476,  476,  476,  476,  232,
-      232,  258,  259,  260,  258,  822,  207,  491,  491,  491,
-      491,  490, 1041,  318,  318,  318,  318,  319,  320,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      292,  318,  318, 1040,  229,  229,  477,  340,  318,  318,
-      318,  230,  230,  229,  229,  229,  230,  988,  232,  232,
-      230,  230,  230,  269,  318,  343,  344,  232,  232,  232,
-      341,  229,  272,  259,  273,  272,  343,  344,  230, 1039,
-      481,  272,  259,  273,  272,  232,  343,  344,  318,  318,
-
-      343,  344,  319,  326,  478,  479,  480,  343,  346,  498,
-     1038,  323,  483,  292,  356,  482,  352,  352,  352,  352,
-      524,  524,  524,  484,  343,  344,  357,  358,  319,  326,
-      315,  359,  895,  360,  367,  368,  361,  323,  319,  322,
-      357,  230,  323,  358,  270,  270,  270,  270,  269,  343,
-      350,  360,  282,  282,  282,  282,  367,  368,  347,  361,
-      342,  342,  343,  344,  342,  342,  342,  342,  342,  342,
-      342,  342,  342,  342,  342,  324,  342,  342,  305,  305,
-      305,  305,  364,  342,  342,  342, 1037,  285,  580,  281,
-      281,  281,  281,  581,  282,  282,  282,  282,  948,  342,
-
-      287,  504,  339,  504,  288,  499,  505,  505,  505,  505,
-      367,  368,  522,  985,  522, 1024,  287,  523,  523,  523,
-      523,  499, 1036,  342,  342,  342,  342,  343,  344,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      269,  342,  342,  367,  370,  319,  320,  364,  342,  342,
-      342,  502,  502,  502,  502,  205,  941,  298,  298,  298,
-      298,  292,  499,  944,  342,  319,  320,  949,  207,  269,
-      365,  363,  208,  319,  322,  343,  344,  323,  499,  319,
-      320,  367,  368, 1035,  207,  343,  350,  640,  342,  342,
-      367,  368,  530,  676,  347,  533,  533,  677,  308, 1034,
-
-      304,  304,  304,  304,  380, 1033,  376,  376,  376,  376,
-      324,  310,  531,  575,  575,  311,  381,  382,  319,  320,
-      641,  383,  544,  384,  444,  444,  385,  310,  319,  320,
-      381,  343,  344,  382,  329,  329,  329,  329,  319,  320,
-     1032,  384,  538,  942,  536,  536,  536,  539,  292,  385,
-      366,  366,  367,  368,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366, 1031,  366,  366,  305,  305,
-      305,  305,  388,  366,  366,  366,  617, 1030,  545,  517,
-      520,  520,  520,  520,  618,  319,  320,  619,  950,  366,
-      998,  517,  363,  343,  346,  517,  534,  347,  534,  367,
-
-      374,  535,  535,  535,  535,  343,  346,  517,  371,  347,
-      367,  368,  990,  366,  366,  366,  366,  367,  368,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      348,  366,  366,  988,  319,  320,  230,  388,  366,  366,
-      366,  986,  348,  269,  367,  370,  319,  320,  371, 1023,
-      329,  329,  329,  329,  366,  343,  344,  558,  343,  344,
-      389,  529,  532,  532,  532,  532,  503,  503,  367,  368,
-      811,  547,  547,  529,  550,  550,  550,  529,  366,  366,
-      401,  372,  397,  397,  397,  397,  951,  343,  344,  529,
-      387,  552,  402,  403,  343,  344,  553,  404,  411,  405,
-
-      411,  411,  406,  343,  344, 1022,  402,  367,  368,  403,
-      353,  353,  353,  353,  548,  559,  548,  405, 1021,  549,
-      549,  549,  549,  561,  561,  406,  390,  390, 1020,  390,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  991,  390,  390,  343,  344,  367,  374,  409,  390,
-      390,  390,  578,  578,  578,  371,  521,  521,  367,  368,
-      353,  353,  353,  353,  952,  390,  343,  344,  387,  367,
-      370,  543, 1019,  371,  377,  377,  377,  377,  398,  398,
-      398,  398,  546,  546,  546,  546,  339,  543,  663,  390,
-      390,  390,  390,  543,  390,  390,  390,  390,  390,  390,
-
-      390,  390,  390,  390,  390,  390,  372,  390,  390,  543,
-      367,  368, 1018,  409,  390,  390,  390,  412,  412,  412,
-      412,  664,  367,  368,  575,  575,  377,  377,  377,  377,
-      390,  805,  806,  367,  368, 1017,  410,  557,  564,  564,
-      564,  413,  413,  413,  413,  414,  414,  414,  414,  560,
-      560,  560,  560,  557,  390,  390,  507,  507,  507,  507,
-      557,  415,  415,  415,  415,  507,  507,  507,  367,  368,
-      319,  320,  566,  447,  447,  447,  557,  567, 1016,  507,
-      507,  507,  507,  507,  507,  274,  274, 1015,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-
-      667,  274,  274,  367,  368,  747, 1014,  293,  274,  274,
-      274,  506,  506,  506,  562,  987,  562, 1025,  690,  563,
-      563,  563,  563,  401,  274,  397,  397,  397,  397,  446,
-      446,  446,  446,  668,  817,  818,  403,  576,  748,  576,
-      404, 1013,  577,  577,  577,  577,  319,  320,  274,  274,
-      274,  274,  403,  274,  274,  274,  510,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  511,  511,  511,  511,
-      511,  511,  511,  511,  511,  511,  511,  511,  511,  274,
-      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
-
-      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
-      511,  511,  511,  274,  274,  274,  274, 1012,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-     1011,  274,  274,  398,  398,  398,  398,  293,  274,  274,
-      274,  524,  524,  524,  571,  574,  574,  574,  574, 1010,
-      443,  443,  443,  443,  274, 1009,  571,  585,  985,  585,
-      571,  416,  586,  586,  586,  586,  446,  446,  446,  446,
-      319,  693,  571,  512,  319,  320,  269,  416,  274,  274,
-      525,  525,  525,  525, 1008,  229,  229,  229,  229,  525,
-      525,  525,  230,  230,  230,  230, 1007,  343,  344,  232,
-
-      232,  232,  232,  525,  525,  525,  525,  525,  525,  300,
-      300,  300,  300,  300,  300, 1006,  300,  300,  300,  300,
-      300,  300,  300,  300,  691,  300,  300, 1005,  229,  645,
-      229,  316,  300,  300,  300,  230, 1004,  230,  505,  505,
-      505,  505,  232, 1003,  232,  708,  319,  697,  300,  491,
-      491,  491,  491,  490,  658,  694,  658,  319,  320,  659,
-      659,  659,  659,  505,  505,  505,  505,  523,  523,  523,
-      523,  648,  300,  300,  300,  300,  300,  300,  300,  300,
-      474,  300,  300,  300,  300,  300,  300,  300,  300,  300,
-      300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
-
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  300,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  300,  300,  300,
-      300,  300,  300,  300,  300, 1002,  300,  300,  300,  300,
-      300,  300,  300,  300, 1001,  300,  300,  319,  699,  229,
-      230,  316,  300,  300,  300,  229,  230,  269, 1000,  229,
-      953,  300,  230,  232,  408,  637,  230,  999,  300,  232,
-      683,  367,  368,  232,  319,  320,  751,  502,  502,  502,
-      502,  656,  578,  578,  578,  657,  649,  528,  499,  230,
-
-      533,  533,  300,  300,  319,  320,  269,  646,  319,  693,
-      644,  647,  694,  635,  499,  343,  715,  640,  332,  752,
-      328,  328,  328,  328,  712,  520,  520,  520,  520,  726,
-      663,  334,  678,  812,  678,  335,  517,  679,  679,  679,
-      679,  523,  523,  523,  523,  695,  636,  334,  319,  320,
-      641,  984,  517,  319,  320,  343,  344,  945,  343,  344,
-      319,  320,  315,  664,  537,  537,  537,  537,  989,  535,
-      535,  535,  535,  537,  537,  537,  535,  535,  535,  535,
-      667,  367,  368,  577,  577,  577,  577,  537,  537,  537,
-      537,  537,  537,  318,  318,  319,  320,  318,  318,  318,
-
-      318,  318,  318,  318,  318,  318,  318,  318,  709,  318,
-      318,  319,  320,  668,  315,  340,  318,  318,  318,  319,
-      320,  989,  688, 1024,  688,  343,  344,  689,  689,  689,
-      689,  727,  318,  343,  344,  536,  536,  536,  367,  368,
-      946,  547,  547,  983,  706,  315,  706,  343,  711,  707,
-      707,  707,  707,  982,  561,  561,  318,  318,  318,  318,
-      319,  320,  318,  318,  540,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  541,  541,  541,  541,  541,  541,
-      541,  541,  541,  541,  541,  541,  541,  318,  541,  541,
-
-      541,  541,  541,  541,  541,  541,  541,  541,  541,  541,
-      541,  541,  541,  541,  541,  541,  541,  541,  541,  541,
-      541,  318,  318,  318,  318,  319,  320,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  981,  318,
-      318,  319,  320,  367,  733,  340,  318,  318,  318,  343,
-      344,  980,  730,  343,  344,  343,  717,  532,  532,  532,
-      532,  979,  318,  319,  699,  367,  368,  700,  529,  546,
-      546,  546,  546,  978,  343,  344,  577,  577,  577,  577,
-      543,  542,  367,  729,  529,  747,  318,  318,  343,  344,
-      549,  549,  549,  549,  343,  344,  543,  343,  711,  954,
-
-      701,  712,  356,  408,  352,  352,  352,  352,  343,  344,
-      549,  549,  549,  549,  751,  358,  343,  717,  748,  359,
-      718,  986,  229,  229,  550,  550,  550,  367,  368,  230,
-      230,  358,  343,  344,  713,  977,  232,  232,  724,  269,
-      724,  367,  368,  725,  725,  725,  725,  752,  551,  551,
-      551,  551,  990,  719,  367,  735,  229,  551,  551,  551,
-      367,  729,  230,  230,  730,  586,  586,  586,  586,  269,
-      232,  551,  551,  551,  551,  551,  551,  342,  342,  343,
-      344,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  939,  342,  342,  367,  368,  731,  315,  364,
-
-      342,  342,  342,  367,  368,  804,  300,  367,  368,  976,
-      637,  560,  560,  560,  560,  683,  342,  367,  368,  564,
-      564,  564,  557,  563,  563,  563,  563,  586,  586,  586,
-      586,  319,  320,  563,  563,  563,  563,  997,  557, 1029,
-      342,  342,  342,  342,  343,  344,  342,  342,  554,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  555,  555,
-      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
-      555,  342,  555,  555,  555,  555,  555,  555,  555,  555,
-      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+      160,  161,  160,  160,  160,  160,  160,  150,  150,  164,
+      164,  165,  166,  164,  164,  167,  164,  164,  164,  164,
+      168,  164,  169,  164,  169,  170,  164,  171,  172,  172,
+      172,  164,  173,  164,  164,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  164,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  175,  174,  174,  174,
+      174,  174,  164,  164,  178,  295,  178,  178,  178,  180,
+
+      178,  178,  196,  453,  197,  197,  197,  197,  454,  179,
+      198,  245,  196,  179,  197,  197,  197,  197,  246, 1084,
+      199,  200,  200,  200,  200,  248,  487,  201,  296,  202,
+      202,  202,  202,  202,  203,  202,  202,  202,  202,  202,
+      202,  202,  488,  202,  204,  205,  206,  202,  207,  208,
+      209,  202,  210,  211,  212,  213,  202,  214,  202,  215,
+      216,  217,  202,  202,  202,  218,  221,  245,  197,  197,
+      197,  197,  466,  245,  246,  245, 1013,  245,  222,  223,
+      246,  248,  246,  224,  246,  225,  467,  248,  226,  248,
+      260,  248,  222,  320,  287,  223,  221,  193,  197,  197,
+
+      197,  197,  322,  225,  275,  245,  275,  275, 1019,  223,
+      254,  226,  246,  224,  255,  249,  249,  249,  249,  248,
+      250,  183,  340,  341,  253,  223,  227,  256,  228,  624,
+      261,  229, 1083,  245,  230,  231,  232,  233,  234,  235,
+      246,  245,  236,  246,  237,  238,  625,  248,  246,  262,
+      287,  262,  262,  360,  184,  248,  245,  262,  180,  262,
+      262,  241,  242,  246,  179,  264,  180,  264,  264,  821,
+      248,  251,  179,  275,  180,  275,  275,  252,  822,  196,
+      263,  197,  197,  197,  197,  257, 1089,  227,  276,  277,
+      278,  276,  461,  255,  462,  271,  231,  232,  272,  273,
+
+      235,  340,  347,  420,  202,  265,  238,  202,  183,  202,
+      344,  266,  267,  268,  269,  463,  270,  464,  202,  202,
+      202,  366,  367,  246,  202,  276,  277,  278,  276,  280,
+      287,  280,  281,  280,  280,  196,  421,  197,  197,  197,
+      197,  184,  200,  200,  200,  200,  221, 1082,  197,  197,
+      197,  197,  482,  289,  290,  277,  291,  290, 1081,  223,
+      483,  246,  287,  224,  288,  288,  288,  288,  287,  283,
+      284,  366,  367,  524,  285,  223,  290,  277,  291,  290,
+      298,  525,  299,  299,  299,  299,  300,  300,  300,  300,
+      920,  313,  292,  313,  313,  313,  293,  313,  313,  292,
+
+      489,  319,  292,  319,  319,  490,  292,  200,  200,  200,
+      200,  366,  373,  338,  301,  338,  338,  292,  302,  303,
+      370,  299,  299,  299,  299,  292,  317,  317,  317,  317,
+      320,  304,  305,  340,  341,  315,  306,  320,  307,  316,
+      320,  308,  392,  393,  320,  304,  246,  323,  305,  324,
+      324,  324,  324,  287,  359,  320,  307,  363,  340,  364,
+      363,  392,  393,  320,  308,  292,  292, 1080,  292,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      839,  292,  292,  325,  325,  325,  325,  311,  292,  292,
+      292,  449,  221, 1079,  317,  317,  317,  317,  363,  340,
 
-      555,  555,  555,  555,  555,  342,  342,  342,  342,  343,
-      344,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  975,  342,  342,  574,  574,  574,  574,  364,
-      342,  342,  342,  974,  319,  697,  571,  367,  735,  319,
-      320,  736,  742,  694,  742,  973,  342,  743,  743,  743,
-      743,  972,  571,  229,  229,  659,  659,  659,  659,  971,
-      230,  230,  229,  339,  896,  556,  970,  232,  232,  230,
-      342,  342,  367,  368,  737,  969,  232,  659,  659,  659,
-      659,  679,  679,  679,  679,  968,  380,  967,  376,  376,
-      376,  376,  343,  344,  801,  802,  319,  320,  966,  382,
-
-      846,  319,  320,  383,  319,  320,  803,  679,  679,  679,
-      679,  319,  320,  847,  965,  382,  367,  368,  964,  848,
-      689,  689,  689,  689,  343,  344,  963,  689,  689,  689,
-      689,  992,  565,  565,  565,  565,  319,  320,  962,  827,
-      540,  565,  565,  565,  828,  319,  693,  363,  898,  694,
-      319,  693,  343,  344,  694,  565,  565,  565,  565,  565,
-      565,  366,  366,  367,  368,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  339,  366,  366,  319,
-      697,  961,  695,  388,  366,  366,  366,  695,  694,  343,
-      344,  367,  368,  343,  344,  831,  960,  343,  344,  959,
-
-      366,  554,  367,  368,  956,  707,  707,  707,  707,  707,
-      707,  707,  707,  343,  715,  367,  368,  957,  725,  725,
-      725,  725,  712,  958,  366,  366,  366,  366,  367,  368,
-      366,  366,  568,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  569,  569,  569,  569,  569,  569,  569,  569,
-      569,  569,  569,  569,  569,  366,  569,  569,  569,  569,
-      569,  569,  569,  569,  569,  569,  569,  569,  569,  569,
-      569,  569,  569,  569,  569,  569,  569,  569,  569,  366,
-      366,  366,  366,  367,  368,  366,  366,  366,  366,  366,
+      364,  363, 1078,  450,  292,  223,  340,  341,  628,  224,
+      629,  326,  340,  343,  496,  327,  344,  392,  399,  497,
+      348,  223,  349,  349,  349,  349,  396, 1077,  292,  292,
+      292,  292,  498,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,  360,  292,  292,  925,  345,
+      366,  367,  311,  292,  292,  292,  339,  389,  366,  390,
+      389,  340,  341,  339,  366,  369,  339, 1076,  370,  292,
+      339,  385,  472,  472,  310,  312,  919,  350,  350,  350,
+      350,  339,  389,  366,  390,  389,  392,  395,  456,  339,
+      396,  287,  457,  292,  292,  328,  458,  324,  324,  324,
+
+      324,  371,  475,  475,  475,  351, 1075,  329,  330,  352,
+      392,  393,  331,  438,  332,  438,  438,  333,  849,  366,
+      367,  329, 1074,  397,  330,  415,  392,  416,  415,  480,
+      481,  411,  332,  374,  496,  375,  375,  375,  375,  497,
+      333,  320,  320,  320,  320,  320,  320, 1073,  320,  320,
+      320,  320,  320,  320,  320,  320, 1072,  320,  320,  415,
+      392,  416,  415,  336,  320,  320,  320,  392,  393,  423,
+      295,  424,  424,  424,  424,  499,  500,  366,  367,  386,
+      320,  400,  927,  401,  401,  401,  401,  438,  418,  438,
+      438,  480,  516,  376,  376,  376,  376,  178, 1071,  178,
+
+      178,  531,  531,  296,  320,  320,  320,  320,  320,  320,
+      320,  320,  179,  320,  320,  320,  320,  320,  320,  320,
+      320,  377,  320,  320, 1070,  378,  420,  365,  336,  320,
+      320,  320,  484,  391,  365, 1069,  485,  365,  392,  393,
+      391,  365,  335,  391,  923,  320,  439,  391,  439,  439,
+      486,  337,  365, 1015,  402,  402,  402,  402,  391,  421,
+      365,  440,  440,  440,  440,  264,  391,  264,  264,  320,
+      320,  340,  341,  425,  425,  425,  425,  441,  441,  441,
+      441,  275,  403,  275,  275,  353,  404,  349,  349,  349,
+      349,  442,  442,  442,  442,  536,  417,  354,  355,  310,
+
+      537,  426,  356,  417,  357,  427,  417,  358,  549,  549,
+      417,  354, 1068,  245,  355,  443,  443,  443,  443, 1067,
+      246,  417,  357,  200,  200,  200,  200,  248, 1066,  417,
+      358,  339,  339,  340,  341,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  287,  339,  339,  313,
+      245,  313,  313,  361,  339,  339,  339,  246,  221, 1065,
+      197,  197,  197,  197,  248,  200,  200,  200,  200,  975,
+      339,  223,  473,  360,  473,  224,  444,  474,  474,  474,
+      474,  456,  544,  246,  320,  457,  496,  223,  193,  515,
+      287,  554,  444,  322,  339,  339,  339,  339,  340,  341,
 
-      366,  366,  366,  366,  366,  366,  993,  366,  366,  343,
-      344,  343,  715,  388,  366,  366,  366,  955,  367,  368,
-      712,  367,  368,  319,  699,  319,  699,  700,  935,  700,
-      366,  343,  711,  343,  711,  712,  934,  712,  343,  717,
-      343,  717,  718,  933,  718,  932,  367,  368,  862,  570,
-      568,  363,  832,  931,  366,  366,  579,  579,  579,  579,
-      701,  835,  701,  863,  836,  579,  579,  579,  713,  864,
-      713,  743,  743,  743,  743,  719,  930,  719,  994,  579,
-      579,  579,  579,  579,  579,  390,  390,  929,  390,  390,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-
-      928,  390,  390,  367,  368,  367,  733,  409,  390,  390,
-      390,  230,  387,  900,  730,  927,  367,  733,  269,  725,
-      725,  725,  725,  363,  390,  730,  743,  743,  743,  743,
-      408,  902,  938,  229,  938,  938,  319,  320,  229,  938,
-      230,  938,  938,  343,  344,  230,  888,  232,  390,  390,
-      390,  390,  232,  390,  390,  390,  582,  390,  390,  390,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  390,  390,  390,  390,  390,  583,  583,  583,  583,
-      583,  583,  583,  583,  583,  583,  583,  583,  583,  390,
-      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  287,  339,  339,  262,  663,  262,  262,  361,  339,
+      339,  339,  471,  471,  471,  471,  526, 1064,  319,  179,
+      319,  319,  245,  444,  971,  339,  534,  534,  534,  246,
+      245,  362,  504,  504,  504,  504,  248,  246,  664,  444,
+      245,  245,  340,  341,  248, 1063,  245,  246,  246,  339,
+      339,  366,  367,  246,  248,  248,  287,  245,  287,  245,
+      248,  552,  552,  552,  246,  379,  246,  375,  375,  375,
+      375,  248,  338,  248,  338,  338,  509,  380,  381, 1062,
+      505,  972,  382,  850,  383,  340,  341,  384,  507,  508,
+
+      506,  380,  245,  668,  381,  276,  277,  278,  276,  246,
+      608,  512,  383,  340,  341,  609,  248,  510,  340,  343,
+      384,  365,  365,  366,  367,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  669,  365,  365,  276,
+      277,  278,  276,  387,  365,  365,  365,  340,  347, 1061,
+      511,  519,  519,  519,  519,  518,  344, 1013,  246, 1052,
+      365,  288,  288,  288,  288,  287,  290,  277,  291,  290,
+      290,  277,  291,  290,  300,  300,  300,  300,  325,  325,
+      325,  325,  340,  341,  365,  365,  365,  365,  366,  367,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
 
-      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
-      583,  583,  583,  390,  390,  390,  390,  926,  390,  390,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      995,  390,  390,  925,  230,  230,  924,  409,  390,  390,
-      390,  269,  269,  996,  319,  320,  992,  367,  729,  367,
-      729,  730,  997,  730,  390,  367,  735,  367,  735,  736,
-      229,  736,  229,  229,  923,  940,  998,  230,  922,  230,
-      230,  889,  921,  584,  232,  387,  232,  232,  390,  390,
-      507,  507,  507,  507,  731,  920,  731,  919,  387,  507,
-      507,  507,  737,  918,  737,  367,  368,  408,  917,  916,
-
-      936,  885,  883,  507,  507,  507,  507,  507,  507,  274,
-      274,  408,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  274,  274,  274,  915,  274,  274,  985,  229,  914,
-      913,  670,  274,  274,  274,  230,  985,  912,  230,  986,
-      229,  986,  232,  229,  911,  269,  910,  230,  274,  909,
-      230,  908,  230,  907,  232,  906,  905,  232,  904,  269,
-      319,  320,  991,  817, 1026,  937,  343,  344,  993,  887,
-     1027,  805,  274,  274,  274,  274,  882,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  292,
-      274,  274,  292,  292,  292,  292,  293,  274,  274,  274,
+      365,  412,  365,  365,  929,  340,  347,  969,  387,  365,
+      365,  365,  310,  303,  344,  299,  299,  299,  299,  340,
+      341,  300,  300,  300,  300,  365,  305,  340,  341,  558,
+      306,  388,  527,  530,  530,  530,  530,  340,  341,  340,
+      343,  287,  305,  344,  527,  366,  367, 1060,  527,  365,
+      365,  392,  393,  561,  561,  976,  532, 1016,  532,  360,
+      527,  533,  533,  533,  533,  405,  559,  401,  401,  401,
+      401,  921,  325,  325,  325,  325,  345,  406,  407,  366,
+      367, 1059,  408,  545,  409,  366,  367,  410,  366,  369,
+      550,  406,  550,  691,  407,  551,  551,  551,  551,  545,
+
+      340,  343,  409,  310,  344,  363,  340,  364,  363, 1020,
+      410,  391,  391,  392,  393,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  692,  391,  391,  363,
+      340,  364,  363,  413,  391,  391,  391,  345,  221,  695,
+      317,  317,  317,  317,  328, 1058,  324,  324,  324,  324,
+      391,  223,  340,  341,  360,  224, 1026,  330,  775,  366,
+      369,  331,  977,  370,  366,  367,  386,  223,  350,  350,
+      350,  350,  696,  330,  391,  391,  391,  391,  392,  393,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  776,  391,  391,  340,  341,  371, 1021,  413,  391,
+
+      391,  391,  548,  548,  548,  548,  340,  341,  366,  373,
+      564,  564,  564,  545,  978,  391, 1014,  370,  386,  340,
+      341,  414,  350,  350,  350,  350,  779,  366,  369,  545,
+      562,  370,  562,  557,  287,  563,  563,  563,  563,  391,
+      391,  428,  386,  424,  424,  424,  424,  340,  341,  557,
+      970,  566,  663,  429,  430,  310,  567, 1018,  431,  780,
+      432,  366,  367,  433,  371,  366,  373,  429,  366,  367,
+      430,  366,  367, 1016,  370,  580,  392,  393,  432, 1017,
+      581,  389,  366,  390,  389,  664,  433,  417,  417, 1014,
+      417,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+
+      417,  417,  973,  417,  417,  340,  341,  335,  572,  436,
+      417,  417,  417,  366,  367,  573,  668,  366,  367,  392,
+      393,  560,  560,  560,  560,  335,  417,  366,  367,  575,
+      575, 1051,  557,  376,  376,  376,  376,  389,  366,  390,
+      389,  392,  393,  376,  376,  376,  376, 1050,  557,  669,
+      417,  417,  417,  417,  571,  417,  417,  417,  417,  417,
+      417,  417,  417,  417,  417,  417,  417, 1018,  417,  417,
+      571,  366,  367, 1049,  436,  417,  417,  417,  392,  395,
+      392,  393, 1048,  366,  367,  392,  393,  574,  574,  574,
+      574,  417,  366,  367,  576, 1047,  576,  437,  571,  577,
+
+      577,  577,  577,  392,  399,  603,  603,  979,  578,  578,
+      578,  412,  396,  335,  571,  417,  417,  535,  535,  535,
+      535, 1046,  392,  399,  472,  472,  535,  535,  535,  392,
+      395,  396,  586,  396,  691,  392,  395,  392,  393,  396,
+      535,  535,  535,  535,  535,  535,  292,  292, 1045,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      292, 1044,  292,  292,  392,  393,  397,  692,  311,  292,
+      292,  292,  397,  392,  393,  392,  393,  606,  606,  606,
+      402,  402,  402,  402,  587,  292,  590, 1043,  590,  589,
+      589,  591,  591,  591,  591,  392,  393,  531,  531,  594,
 
+      415,  392,  416,  415,  595,  415,  392,  416,  415,  292,
+      292,  292,  292, 1042,  292,  292,  292,  538,  292,  292,
       292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-      292,  292,  292,  274,  292,  292,  292,  292,  292,  292,
-      671,  292,  292,  292,  672,  292,  292,  292,  292,  292,
-      292,  292,  292,  292,  292,  292,  292,  274,  274,  525,
-      525,  525,  525,  881,  229,  229,  880,  879,  525,  525,
-      525,  230,  230,  343,  344,  994,  878,  877,  232,  232,
-      876,  875,  525,  525,  525,  525,  525,  525,  300,  300,
-      300,  300,  300,  300,  874,  300,  300,  300,  300,  300,
-      300,  300,  300,  873,  300,  300,  872,  871,  884,  870,
-      685,  300,  300,  300,  886,  367,  368,  995,  869, 1028,
-
-      367,  368,  996,  868,  867,  866,  865,  300,  861,  860,
-      859,  858,  857,  856,  855,  854,  853,  852,  851,  850,
-      849,  845,  844,  843,  842,  582,  747,  840,  839,  838,
-      834,  300,  300,  300,  300,  300,  300,  300,  300,  830,
-      300,  300,  300,  300,  300,  300,  300,  300,  315,  300,
-      300,  315,  315,  315,  315,  316,  300,  300,  300,  315,
-      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
-      315,  315,  300,  315,  315,  315,  315,  315,  315,  686,
-      315,  315,  315,  687,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  300,  300,  319,  320,
-
-      826,  474,  824,  823,  820,  819,  816,  510,  663,  814,
-      813,  810,  809,  808,  537,  537,  537,  537,  807,  474,
-      643,  635,  800,  537,  537,  537,  799,  798,  797,  796,
-      795,  792,  791,  790,  789,  788,  787,  537,  537,  537,
-      537,  537,  537,  318,  318,  319,  320,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  786,  318,
-      318,  785,  784,  783,  782,  703,  318,  318,  318,  781,
-      780,  779,  778,  777,  776,  775,  774,  773,  772,  771,
-      770,  769,  318,  768,  767,  766,  765,  764,  763,  762,
-      761,  760,  759,  758,  757,  747,  745,  744,  681,  680,
-
-      675,  674,  673,  663,  661,  660,  318,  318,  318,  318,
-      319,  320,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  339,  318,  318,  339,  339,  339,  339,
-      340,  318,  318,  318,  339,  339,  339,  339,  339,  339,
-      339,  339,  339,  339,  339,  339,  339,  318,  339,  339,
-      339,  339,  339,  339,  704,  339,  339,  339,  705,  339,
-      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
-      339,  318,  318,  343,  344,  655,  654,  653,  652,  490,
-      617,  600,  596,  650,  643,  638,  635,  633,  632,  551,
-      551,  551,  551,  631,  630,  629,  628,  627,  551,  551,
-
-      551,  626,  625,  624,  623,  622,  621,  620,  616,  615,
-      614,  613,  551,  551,  551,  551,  551,  551,  342,  342,
-      343,  344,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  342,  612,  342,  342,  611,  610,  609,  608,
-      721,  342,  342,  342,  607,  606,  605,  604,  603,  602,
-      599,  598,  595,  594,  593,  592,  591,  342,  590,  589,
-      588,  587,  573,  572,  393,  519,  518,  515,  514,  513,
-      501,  500,  277,  474,  495,  494,  490,  462,  460,  436,
-      433,  342,  342,  342,  342,  343,  344,  342,  342,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  363,  342,
-
-      342,  363,  363,  363,  363,  364,  342,  342,  342,  363,
-      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  342,  363,  363,  363,  363,  363,  363,  722,
-      363,  363,  363,  723,  363,  363,  363,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  342,  342,  367,  368,
-      431,  486,  422,  485,  474,  269,  473,  467,  466,  463,
-      451,  450,  449,  442,  565,  565,  565,  565,  441,  440,
-      437,  427,  424,  565,  565,  565,  423,  420,  419,  418,
-      167,  407,  393,  391,  314,  269,  295,  565,  565,  565,
-      565,  565,  565,  366,  366,  367,  368,  366,  366,  366,
-
-      366,  366,  366,  366,  366,  366,  366,  366,  291,  366,
-      366,  277,  275,  246,  257,  739,  366,  366,  366,  167,
-      246,  257,  167,  174,  165, 1061,   96,   65,   57, 1061,
-     1061, 1061,  366, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061,  366,  366,  366,  366,
-      367,  368,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  387,  366,  366,  387,  387,  387,  387,
-      388,  366,  366,  366,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  366,  387,  387,
+      292,  292,  292,  292,  292,  292,  292,  539,  539,  539,
+      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
+      292,  539,  539,  539,  539,  539,  539,  539,  539,  539,
+      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
+      539,  539,  539,  539,  292,  292,  292,  292, 1041,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      292,  974,  292,  292,  392,  393,  335,  645,  311,  292,
 
-      387,  387,  387,  387,  740,  387,  387,  387,  741,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  366,  366,  579,  579,  579,  579, 1061, 1061, 1061,
-     1061, 1061,  579,  579,  579, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061,  579,  579,  579,  579,
-      579,  579,  390,  390, 1061,  390,  390,  390,  390,  390,
-      390,  390,  390,  390,  390,  390,  390, 1061,  390,  390,
-     1061, 1061, 1061, 1061,  754,  390,  390,  390, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  390, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  390,  390,  390,  390, 1061,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  390,  408,  390,  390,  408,  408,  408,  408,  409,
-      390,  390,  390,  408,  408,  408,  408,  408,  408,  408,
-      408,  408,  408,  408,  408,  408,  390,  408,  408,  408,
-      408,  408,  408,  755,  408,  408,  408,  756,  408,  408,
-      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
-      390,  390,  274,  274, 1061,  274,  274,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274, 1061,  274,  274,
-
-     1061, 1061, 1061, 1061,  670,  274,  274,  274, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  274, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  274,  274,  274,  274, 1061,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  274,  292,  274,  274,  292,  292,  292,  292,  293,
-      274,  274,  274,  292,  292,  292,  292,  292,  292,  292,
-      292,  292,  292,  292,  292,  292,  274,  292,  292,  292,
-      292,  292,  292,  292,  292,  292,  815,  292,  292,  292,
+      292,  292,  392,  393, 1040,  646,  392,  393,  647, 1022,
+      402,  402,  402,  402,  438,  292,  438,  438,  592,  592,
+      592,  585,  588,  588,  588,  588,  425,  425,  425,  425,
+      475,  475,  475,  585,  540,  549,  549,  585, 1039,  292,
+      292,  553,  553,  553,  553,  439, 1038,  439,  439,  585,
+      553,  553,  553,  604,  386,  604,  603,  603,  605,  605,
+      605,  605,  833,  834,  553,  553,  553,  553,  553,  553,
+      320,  320,  320,  320,  320,  320, 1037,  320,  320,  320,
+      320,  320,  320,  320,  320, 1013,  320,  320,  440,  440,
+      440,  440,  336,  320,  320,  320,  246,  428, 1036,  424,
+
+      424,  424,  424,  287,  425,  425,  425,  425, 1035,  320,
+      430,  534,  534,  534,  431,  599,  441,  441,  441,  441,
+      442,  442,  442,  442,  845,  846,  430,  443,  443,  443,
+      443,  599, 1034,  320,  320,  320,  320,  320,  320,  320,
+      320,  502,  320,  320,  320,  320,  320,  320,  320,  320,
+      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
+      320,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+      555,  555,  555,  555,  320,  555,  555,  555,  555,  555,
+      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+      555,  555,  555,  555,  555,  555,  555,  555,  320,  320,
 
-      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-      274,  274,  300,  300,  300,  300,  300,  300, 1061,  300,
-      300,  300,  300,  300,  300,  300,  300, 1061,  300,  300,
-     1061, 1061, 1061, 1061,  685,  300,  300,  300, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  300, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  300,  300,  300,  300,  300,
-      300,  300,  300, 1061,  300,  300,  300,  300,  300,  300,
-      300,  300,  315,  300,  300,  315,  315,  315,  315,  316,
-
-      300,  300,  300,  315,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  300,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  825,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
-      300,  300,  318,  318,  319,  320,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318, 1061,  318,  318,
-     1061, 1061, 1061, 1061,  703,  318,  318,  318, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  318, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061,  318,  318,  318,  318,  319,
-      320,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  339,  318,  318,  339,  339,  339,  339,  340,
-      318,  318,  318,  339,  339,  339,  339,  339,  339,  339,
-      339,  339,  339,  339,  339,  339,  318,  339,  339,  339,
-      339,  339,  339,  339,  339,  339,  829,  339,  339,  339,
+      320,  320,  320,  320,  320,  320, 1033,  320,  320,  320,
+      320,  320,  320,  320,  320, 1032,  320,  320,  602,  602,
+      602,  602,  336,  320,  320,  320,  613,  287,  613,  599,
+     1031,  614,  614,  614,  614,  471,  471,  471,  471,  320,
+      474,  474,  474,  474, 1030,  599,  444,  474,  474,  474,
+      474,  704, 1029,  245,  245,  705,  695, 1015,  556, 1053,
+      246,  246,  444,  320,  320,  340,  341,  248,  248,  340,
+      341,  245, 1028,  245,  533,  533,  533,  533,  246,  353,
+      246,  349,  349,  349,  349,  248,  245,  248,  245,  696,
+      245,  245,  355,  246, 1027,  246,  356,  246,  246,  672,
+
+      248, 1012,  248,  320,  248,  248,  245,  665,  355,  340,
+      341,  246,  711,  246,  775,  673,  435,  718,  287,  931,
+      248,  533,  533,  533,  533,  565,  565,  565,  565,  674,
+     1017,  676, 1052,  675,  565,  565,  565,  519,  519,  519,
+      519,  518,  684,  677,  366,  367,  685,  776,  565,  565,
+      565,  565,  565,  565,  339,  339,  340,  341,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  890,
+      339,  339,  530,  530,  530,  530,  361,  339,  339,  339,
+      686, 1011,  686,  527,  891,  687,  687,  687,  687,  706,
+      892,  706,  736,  339,  707,  707,  707,  707, 1010,  527,
+
+      551,  551,  551,  551,  551,  551,  551,  551,  552,  552,
+      552,  605,  605,  605,  605,  340,  341,  339,  339,  339,
+      339,  340,  341,  339,  339,  568,  339,  339,  339,  339,
       339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
-      318,  318,  342,  342,  343,  344,  342,  342,  342,  342,
-      342,  342,  342,  342,  342,  342,  342, 1061,  342,  342,
-     1061, 1061, 1061, 1061,  721,  342,  342,  342, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  342, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  342,  342,  342,  342,  343,
-      344,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  363,  342,  342,  363,  363,  363,  363,  364,
-      342,  342,  342,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  342,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  833,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
-
-      342,  342,  366,  366,  367,  368,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366, 1061,  366,  366,
-     1061, 1061, 1061, 1061,  739,  366,  366,  366, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  366, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  366,  366,  366,  366,  367,
-      368,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  387,  366,  366,  387,  387,  387,  387,  388,
-      366,  366,  366,  387,  387,  387,  387,  387,  387,  387,
+      339,  339,  339,  339,  339,  569,  569,  569,  569,  569,
+      569,  569,  569,  569,  569,  569,  569,  569,  339,  569,
+      569,  569,  569,  569,  569,  569,  569,  569,  569,  569,
+      569,  569,  569,  569,  569,  569,  569,  569,  569,  569,
+      569,  569,  339,  339,  339,  339,  340,  341,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339, 1009,
 
-      387,  387,  387,  387,  387,  387,  366,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  837,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      366,  366,  390,  390, 1061,  390,  390,  390,  390,  390,
-      390,  390,  390,  390,  390,  390,  390, 1061,  390,  390,
-     1061, 1061, 1061, 1061,  754,  390,  390,  390, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  390, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  390,  390,  390,  390, 1061,
-
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  390,  408,  390,  390,  408,  408,  408,  408,  409,
-      390,  390,  390,  408,  408,  408,  408,  408,  408,  408,
-      408,  408,  408,  408,  408,  408,  390,  408,  408,  408,
-      408,  408,  408,  408,  408,  408,  841,  408,  408,  408,
-      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
-      390,  390,  274,  274, 1061,  274,  274,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  292,  274,  274,
-      292,  292,  292,  292,  293,  274,  274,  274,  292,  292,
-      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      339,  339,  548,  548,  548,  548,  361,  339,  339,  339,
+      340,  341, 1008,  545,  340,  341,  340,  721,  340,  341,
+      722,  340,  341,  339,  980,  716, 1007,  716,  412,  545,
+      717,  717,  717,  717,  560,  560,  560,  560,  340,  341,
+      340,  341,  570,  340,  725,  557,  779,  339,  339,  366,
+      367, 1006,  722,  723,  561,  561,  563,  563,  563,  563,
+      719,  557, 1005,  379,  855,  375,  375,  375,  375,  340,
+      341,  340,  727,  340,  341,  728,  381,  366,  367,  780,
+      382,  366,  367,  366,  367,  563,  563,  563,  563,  564,
+      564,  564,  381,  366,  367,  366,  743,  575,  575,  577,
+
+      577,  577,  577,  981,  740,  366,  367,  435,  729,  579,
+      579,  579,  579,  366,  367, 1004,  392,  393,  579,  579,
+      579,  577,  577,  577,  577,  340,  341,  737, 1003,  578,
+      578,  578,  579,  579,  579,  579,  579,  579,  365,  365,
+      366,  367,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365, 1002,  365,  365,  366,  367,  340,  721,
+      387,  365,  365,  365,  754,  392,  393,  734,  856,  734,
+      392,  393,  735,  735,  735,  735,  752,  365,  752,  392,
+      393,  753,  753,  753,  753, 1001,  589,  589,  340,  341,
+      392,  761,  606,  606,  606,  591,  591,  591,  591,  758,
 
-      292,  274,  292,  292,  292,  292,  292,  292,  292,  292,
-      292,  292,  890,  292,  292,  292,  292,  292,  292,  292,
-      292,  292,  292,  292,  292,  274,  274,  300,  300,  300,
-      300,  300,  300, 1061,  300,  300,  300,  300,  300,  300,
-      300,  300,  315,  300,  300,  315,  315,  315,  315,  316,
-      300,  300,  300,  315,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  300,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  315,  894,  315,  315,
-      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
-      300,  300,  166, 1061,  166,  166,  166,  166,  166,  166,
-
-      166,  166,  166,  169, 1061, 1061,  169,  169,  177, 1061,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  231,
-      231,  231,  231,  231,  231,  231,  231,  261,  261,  261,
-      261,  264, 1061,  264, 1061,  264,  264,  264,  264,  268,
-      268,  268,  268,  268,  268,  268,  274, 1061,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  276, 1061,  276,
-      276,  276,  276,  276,  276,  276,  276,  276,  279, 1061,
-      279,  279,  279,  279,  279,  279,  279,  279,  279,  292,
-     1061,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-      230,  230,  230,  230,  230,  230,  230,  300,  300, 1061,
-
-      300,  300,  300,  300,  300,  300,  300,  300,  301,  301,
-      301,  301,  301,  301,  301,  301,  301,  301,  301,  315,
-      315, 1061,  315,  315,  315,  315,  315,  315,  315,  315,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  321,  321,  321,  321,  321,  321,  321,  321,  321,
-      321,  321,  325,  325,  325,  325,  325,  325,  325,  325,
-      325,  325,  325,  339,  339,  339,  339,  339,  339,  339,
-      339,  339,  339,  339,  342,  342,  342,  342,  342,  342,
-      342,  342,  342,  342,  342,  345,  345,  345,  345,  345,
-      345,  345,  345,  345,  345,  345,  349,  349,  349,  349,
-
-      349,  349,  349,  349,  349,  349,  349,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  363,  363,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  369,
-      369,  369,  369,  369,  369,  369,  369,  369,  369,  369,
-      373,  373,  373,  373,  373,  373,  373,  373,  373,  373,
-      373,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  390, 1061,  390,  390,  390,  390,  390,  390,
-      390,  390,  390,  392, 1061,  392,  392,  392,  392,  392,
-      392,  392,  392,  392,  395, 1061,  395,  395,  395,  395,
-      395,  395,  395,  395,  395,  408, 1061,  408,  408,  408,
-
-      408,  408,  408,  408,  408,  408,  169, 1061, 1061,  169,
-      169,  177, 1061,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  417, 1061, 1061,  417,  417,  417,  448, 1061,
-     1061,  448,  230,  230,  230,  230,  230,  230,  230,  231,
-      231,  231,  231,  231,  231,  231,  231,  475, 1061, 1061,
-     1061, 1061,  475,  475,  475,  475,  489,  489,  489,  489,
-      489,  489,  492,  492,  492,  492,  493, 1061,  493,  493,
-      493,  493,  268,  268,  268,  268,  268,  268,  268,  274,
-     1061,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-      276, 1061,  276,  276,  276,  276,  276,  276,  276,  276,
-
-      276,  279, 1061,  279,  279,  279,  279,  279,  279,  279,
-      279,  279,  292, 1061,  292,  292,  292,  292,  292,  292,
-      292,  292,  292,  300,  300, 1061,  300,  300,  300,  300,
-      300,  300,  300,  300,  301,  301,  301,  301,  301,  301,
-      301,  301,  301,  301,  301,  315,  315, 1061,  315,  315,
-      315,  315,  315,  315,  315,  315,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  321,  321,  321,
-      321,  321,  321,  321,  321,  321,  321,  321,  325,  325,
-      325,  325,  325,  325,  325,  325,  325,  325,  325,  339,
-      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+     1000,  365,  365,  365,  365,  366,  367,  365,  365,  582,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  583,
+      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
+      583,  583,  365,  583,  583,  583,  583,  583,  583,  583,
+      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
+      583,  583,  583,  583,  583,  583,  365,  365,  365,  365,
+      366,  367,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365, 1014,  365,  365,  366,  367,  392,  393,
+      387,  365,  365,  365,  246,  602,  602,  602,  602,  340,
+
+      727,  287,  574,  574,  574,  574,  599,  365,  366,  739,
+      340,  725,  740,  571,  246,  999,  366,  745,  998,  722,
+      746,  287,  599,  245,  392,  757,  584,  997,  758,  571,
+      246,  365,  365,  392,  393,  340,  725,  248,  755,  392,
+      393,  996,  392,  763,  722,  741,  764,  405,  840,  401,
+      401,  401,  401,  747,  995,  588,  588,  588,  588,  994,
+      407,  759,  366,  367,  408,  320,  585,  392,  393,  665,
+      993,  392,  393, 1025,  711, 1057,  407,  392,  393,  765,
+      366,  739,  585,  591,  591,  591,  591,  592,  592,  592,
+      366,  367, 1023,  593,  593,  593,  593,  605,  605,  605,
+
+      605,  245,  593,  593,  593,  770,  992,  770,  246,  991,
+      771,  771,  771,  771,  990,  248,  593,  593,  593,  593,
+      593,  593,  391,  391,  392,  393,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  412,  391,  391,
+      614,  614,  614,  614,  413,  391,  391,  391,  614,  614,
+      614,  614,  687,  687,  687,  687,  687,  687,  687,  687,
+      989,  391,  707,  707,  707,  707,  707,  707,  707,  707,
+      340,  341,  366,  743,  568,  366,  743,  366,  745,  366,
+      367,  740,  988,  582,  740,  391,  391,  391,  391,  392,
+      393,  391,  391,  596,  391,  391,  391,  391,  391,  391,
+
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  597,  597,  597,  597,  597,  597,  597,
+      597,  597,  597,  597,  597,  597,  391,  597,  597,  597,
+      597,  597,  597,  597,  597,  597,  597,  597,  597,  597,
+      597,  597,  597,  597,  597,  597,  597,  597,  597,  597,
+      391,  391,  391,  391,  392,  393,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  987,  391,  391,
+      983,  245,  245,  963,  413,  391,  391,  391,  246,  246,
+      245,  245,  340,  341,  962,  248,  248,  246,  246,  340,
+      341,  391,  340,  721,  248,  248,  722,  246,  717,  717,
+
+      717,  717,  392,  393,  287,  717,  717,  717,  717,  961,
+      598,  960,  829,  830,  959,  391,  391,  607,  607,  607,
+      607,  366,  367,  958,  831,  957,  607,  607,  607,  723,
+      832,  956,  366,  367,  917,  340,  721,  392,  757,  722,
+      607,  607,  607,  607,  607,  607,  417,  417,  874,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      417,  875,  417,  417,  859,  366,  367,  876,  436,  417,
+      417,  417,  723,  366,  367,  860,  340,  727,  392,  393,
+      728,  735,  735,  735,  735,  417,  392,  393,  955,  735,
+      735,  735,  735,  954,  753,  753,  753,  753,  392,  761,
+
+      392,  393,  753,  753,  753,  753,  953,  758,  952,  417,
+      417,  417,  417,  729,  417,  417,  417,  610,  417,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      417,  417,  417,  417,  417,  417,  417,  611,  611,  611,
+      611,  611,  611,  611,  611,  611,  611,  611,  611,  611,
+      417,  611,  611,  611,  611,  611,  611,  611,  611,  611,
+      611,  611,  611,  611,  611,  611,  611,  611,  611,  611,
+      611,  611,  611,  611,  417,  417,  417,  417,  951,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      417, 1024,  417,  417,  392,  393,  392,  761,  436,  417,
+
+      417,  417,  950,  392,  393,  758,  392,  763,  340,  727,
+      366,  739,  728,  949,  740,  417,  366,  739,  366,  745,
+      740,  948,  746,  366,  745,  392,  757,  746,  947,  758,
+      946,  392,  393,  945,  612,  596,  412,  863,  944,  417,
+      417,  535,  535,  535,  535,  729,  864,  741,  340,  341,
+      535,  535,  535,  741, 1025,  747,  771,  771,  771,  771,
+      747,  943,  759,  942,  535,  535,  535,  535,  535,  535,
+      292,  292,  941,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  292,  292,  292, 1026,  292,  292,  771,  771,
+      771,  771,  698,  292,  292,  292,  246,  340,  341,  435,
+
+      392,  757,  940,  287,  758,  360,  924,  366,  367,  292,
+      366,  367,  386,  926,  392,  393,  392,  393,  412,  928,
+      435,  930,  966,  982,  966,  966,  966,  435,  966,  966,
+      435,  916,  939,  292,  292,  292,  292,  759,  292,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      310,  292,  292,  310,  310,  310,  310,  311,  292,  292,
+      292,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  292,  310,  310,  310,  310,  310,
+      310,  699,  310,  310,  310,  700,  310,  310,  310,  310,
+      310,  310,  310,  310,  310,  310,  310,  310,  292,  292,
+
+      553,  553,  553,  553,  340,  341, 1019,  245, 1054,  553,
+      553,  553,  392,  763,  246,  938,  764,  937,  392,  763,
+      936,  248,  764,  553,  553,  553,  553,  553,  553,  320,
+      320,  320,  320,  320,  320,  935,  320,  320,  320,  320,
+      320,  320,  320,  320,  934,  320,  320,  340,  341,  765,
+      245,  713,  320,  320,  320,  765,  914,  246,  245,  245,
+      245,  933,  984,  932,  248,  246,  246,  246,  320,  340,
+      341, 1020,  248,  248,  248,  985,  366,  367, 1021,  845,
+     1055,  986,  366,  367, 1022,  915,  392,  393, 1023,  913,
+     1056,  833,  320,  320,  320,  320,  320,  320,  320,  320,
+
+      911,  320,  320,  320,  320,  320,  320,  320,  320,  335,
+      320,  320,  335,  335,  335,  335,  336,  320,  320,  320,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  320,  335,  335,  335,  335,  335,  335,
+      714,  335,  335,  335,  715,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  320,  320,  340,
+      341,  246,  246, 1013,  392,  393, 1024,  245,  287,  287,
+      366,  367,  392,  393,  246,  565,  565,  565,  565, 1014,
+      245,  248,  245,  245,  565,  565,  565,  246,  910,  246,
+      246,  967,  968,  909,  248,  908,  248,  248,  565,  565,
+
+      565,  565,  565,  565,  339,  339,  340,  341,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  964,
+      339,  339,  907,  245,  912,  906,  731,  339,  339,  339,
+      246,  905,  904,  903,  902,  901,  900,  248,  899,  898,
+      897,  896,  895,  339,  894,  893,  889,  888,  887,  886,
+      885,  884,  883,  882,  881,  880,  879,  878,  877,  873,
+      965,  872,  871,  870,  610,  775,  868,  339,  339,  339,
+      339,  340,  341,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  360,  339,  339,  360,  360,  360,
+      360,  361,  339,  339,  339,  360,  360,  360,  360,  360,
+
+      360,  360,  360,  360,  360,  360,  360,  360,  339,  360,
+      360,  360,  360,  360,  360,  732,  360,  360,  360,  733,
+      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
+      360,  360,  339,  339,  366,  367,  867,  866,  862,  858,
+      854,  502,  852,  851,  848,  847,  844,  538,  691,  842,
+      579,  579,  579,  579,  841,  838,  837,  836,  835,  579,
+      579,  579,  502,  671,  663,  828,  827,  826,  825,  824,
+      823,  820,  819,  579,  579,  579,  579,  579,  579,  365,
+      365,  366,  367,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  818,  365,  365,  817,  816,  815,
+
+      814,  749,  365,  365,  365,  813,  812,  811,  810,  809,
+      808,  807,  806,  805,  804,  803,  802,  801,  365,  800,
+      799,  798,  797,  796,  795,  794,  793,  792,  791,  790,
+      789,  788,  787,  786,  785,  775,  773,  772,  709,  708,
+      703,  702,  365,  365,  365,  365,  366,  367,  365,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  386,
+      365,  365,  386,  386,  386,  386,  387,  365,  365,  365,
+      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  386,  365,  386,  386,  386,  386,  386,  386,
+      750,  386,  386,  386,  751,  386,  386,  386,  386,  386,
+
+      386,  386,  386,  386,  386,  386,  386,  365,  365,  392,
+      393,  701,  691,  689,  688,  683,  682,  681,  680,  518,
+      645,  628,  624,  678,  671,  593,  593,  593,  593,  666,
+      663,  661,  660,  659,  593,  593,  593,  658,  657,  656,
+      655,  654,  653,  652,  651,  650,  649,  648,  593,  593,
+      593,  593,  593,  593,  391,  391,  392,  393,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  644,
+      391,  391,  643,  642,  641,  640,  767,  391,  391,  391,
+      639,  638,  637,  636,  635,  634,  633,  632,  631,  630,
+      627,  626,  623,  391,  622,  621,  620,  619,  618,  617,
+
+      616,  615,  601,  600,  420,  547,  546,  543,  542,  541,
+      529,  528,  295,  502,  523,  522,  518,  391,  391,  391,
+      391,  392,  393,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  412,  391,  391,  412,  412,  412,
+      412,  413,  391,  391,  391,  412,  412,  412,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  412,  391,  412,
+      412,  412,  412,  412,  412,  768,  412,  412,  412,  769,
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      412,  412,  391,  391,  607,  607,  607,  607,  490,  488,
+      464,  461,  459,  607,  607,  607,  514,  450,  513,  502,
+
+      287,  501,  495,  494,  491,  479,  478,  607,  607,  607,
+      607,  607,  607,  417,  417,  477,  417,  417,  417,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  470,  417,
+      417,  469,  468,  465,  455,  782,  417,  417,  417,  452,
+      451,  448,  447,  446,  183,  434,  420,  418,  334,  287,
+      314,  309,  417,  295,  293,  263,  274,  183,  263,  274,
+      183,  190,  181, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089,  417,  417,  417,  417,
+     1089,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      417,  417,  417,  435,  417,  417,  435,  435,  435,  435,
+
+      436,  417,  417,  417,  435,  435,  435,  435,  435,  435,
+      435,  435,  435,  435,  435,  435,  435,  417,  435,  435,
+      435,  435,  435,  435,  783,  435,  435,  435,  784,  435,
+      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
+      435,  417,  417,  292,  292, 1089,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,  292,  292,  292, 1089,  292,
+      292, 1089, 1089, 1089, 1089,  698,  292,  292,  292, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089,  292, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+
+     1089, 1089, 1089, 1089, 1089, 1089,  292,  292,  292,  292,
+     1089,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  292,  310,  292,  292,  310,  310,  310,  310,
+      311,  292,  292,  292,  310,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  310,  310,  310,  292,  310,  310,
+      310,  310,  310,  310,  310,  310,  310,  843,  310,  310,
+      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  292,  292,  320,  320,  320,  320,  320,  320, 1089,
+      320,  320,  320,  320,  320,  320,  320,  320, 1089,  320,
+      320, 1089, 1089, 1089, 1089,  713,  320,  320,  320, 1089,
+
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089,  320, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089,  320,  320,  320,  320,
+      320,  320,  320,  320, 1089,  320,  320,  320,  320,  320,
+      320,  320,  320,  335,  320,  320,  335,  335,  335,  335,
+      336,  320,  320,  320,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  320,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  853,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+
+      335,  320,  320,  339,  339,  340,  341,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339, 1089,  339,
+      339, 1089, 1089, 1089, 1089,  731,  339,  339,  339, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089,  339, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089,  339,  339,  339,  339,
+      340,  341,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  360,  339,  339,  360,  360,  360,  360,
+      361,  339,  339,  339,  360,  360,  360,  360,  360,  360,
+
+      360,  360,  360,  360,  360,  360,  360,  339,  360,  360,
+      360,  360,  360,  360,  360,  360,  360,  857,  360,  360,
+      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
+      360,  339,  339,  365,  365,  366,  367,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  365,  365, 1089,  365,
+      365, 1089, 1089, 1089, 1089,  749,  365,  365,  365, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089,  365, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089,  365,  365,  365,  365,
+
+      366,  367,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  386,  365,  365,  386,  386,  386,  386,
+      387,  365,  365,  365,  386,  386,  386,  386,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  365,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  861,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
+      386,  365,  365,  391,  391,  392,  393,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391, 1089,  391,
+      391, 1089, 1089, 1089, 1089,  767,  391,  391,  391, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+
+     1089, 1089,  391, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089,  391,  391,  391,  391,
+      392,  393,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  412,  391,  391,  412,  412,  412,  412,
+      413,  391,  391,  391,  412,  412,  412,  412,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  391,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  865,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  412,
+      412,  391,  391,  417,  417, 1089,  417,  417,  417,  417,
+
+      417,  417,  417,  417,  417,  417,  417,  417, 1089,  417,
+      417, 1089, 1089, 1089, 1089,  782,  417,  417,  417, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089,  417, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089,  417,  417,  417,  417,
+     1089,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      417,  417,  417,  435,  417,  417,  435,  435,  435,  435,
+      436,  417,  417,  417,  435,  435,  435,  435,  435,  435,
+      435,  435,  435,  435,  435,  435,  435,  417,  435,  435,
+
+      435,  435,  435,  435,  435,  435,  435,  869,  435,  435,
+      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
+      435,  417,  417,  292,  292, 1089,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  310,  292,
+      292,  310,  310,  310,  310,  311,  292,  292,  292,  310,
+      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  310,  292,  310,  310,  310,  310,  310,  310,  310,
+      310,  310,  310,  918,  310,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  310,  310,  292,  292,  320,  320,
+      320,  320,  320,  320, 1089,  320,  320,  320,  320,  320,
+
+      320,  320,  320,  335,  320,  320,  335,  335,  335,  335,
+      336,  320,  320,  320,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  320,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  922,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  320,  320,  182, 1089,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  185, 1089, 1089,  185,  185,  193,
+     1089,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      247,  247,  247,  247,  247,  247,  247,  247,  279,  279,
+      279,  279,  282, 1089,  282, 1089,  282,  282,  282,  282,
+
+      286,  286,  286,  286,  286,  286,  286,  292, 1089,  292,
+      292,  292,  292,  292,  292,  292,  292,  292,  294, 1089,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  297,
+     1089,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      310, 1089,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  246,  246,  246,  246,  246,  246,  246,  320,  320,
+     1089,  320,  320,  320,  320,  320,  320,  320,  320,  321,
+      321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
+      335,  335, 1089,  335,  335,  335,  335,  335,  335,  335,
+      335,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+
+      339,  339,  342,  342,  342,  342,  342,  342,  342,  342,
+      342,  342,  342,  346,  346,  346,  346,  346,  346,  346,
+      346,  346,  346,  346,  360,  360,  360,  360,  360,  360,
+      360,  360,  360,  360,  360,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  368,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  386,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
+
+      394,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  412,  412,  412,  412,  412,  412,  412,  412,
+      412,  412,  412,  417, 1089,  417,  417,  417,  417,  417,
+      417,  417,  417,  417,  419, 1089,  419,  419,  419,  419,
+      419,  419,  419,  419,  419,  422, 1089,  422,  422,  422,
+      422,  422,  422,  422,  422,  422,  435, 1089,  435,  435,
+      435,  435,  435,  435,  435,  435,  435,  185, 1089, 1089,
+      185,  185,  193, 1089,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  445, 1089, 1089,  445,  445,  445,  476,
+     1089, 1089,  476,  246,  246,  246,  246,  246,  246,  246,
+
+      247,  247,  247,  247,  247,  247,  247,  247,  503, 1089,
+     1089, 1089, 1089,  503,  503,  503,  503,  517,  517,  517,
+      517,  517,  517,  520,  520,  520,  520,  521, 1089,  521,
+      521,  521,  521,  286,  286,  286,  286,  286,  286,  286,
+      292, 1089,  292,  292,  292,  292,  292,  292,  292,  292,
+      292,  294, 1089,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  297, 1089,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  310, 1089,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  320,  320, 1089,  320,  320,  320,
+      320,  320,  320,  320,  320,  321,  321,  321,  321,  321,
+
+      321,  321,  321,  321,  321,  321,  335,  335, 1089,  335,
+      335,  335,  335,  335,  335,  335,  335,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  342,  342,
+      342,  342,  342,  342,  342,  342,  342,  342,  342,  346,
+      346,  346,  346,  346,  346,  346,  346,  346,  346,  346,
+      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
+      360,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  386,  386,  386,  386,  386,  386,
+
+      386,  386,  386,  386,  386,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  394,  394,  394,  394,
+      394,  394,  394,  394,  394,  394,  394,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  412,  412,  417,
+     1089,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      419, 1089,  419,  419,  419,  419,  419,  419,  419,  419,
+      419,  422, 1089,  422,  422,  422,  422,  422,  422,  422,
+      422,  422,  435, 1089,  435,  435,  435,  435,  435,  435,
+      435,  435,  435,  185, 1089, 1089,  185,  185,  445, 1089,
+
+     1089,  445,  445,  445,  476, 1089, 1089,  476,  662, 1089,
+      662,  662,  662,  662,  662,  662,  662,  662,  662,  665,
+     1089,  665,  665,  665,  665,  665,  665,  665,  665,  665,
+      667, 1089,  667,  667,  667,  667,  667,  667,  667,  667,
+      667,  670,  670,  670,  670,  670,  670,  670,  247,  247,
+      247,  247,  247,  247,  247,  247,  517,  517,  517,  517,
+      517,  517,  679, 1089,  679,  679,  679,  679,  521, 1089,
+      521,  521,  521,  521,  286,  286,  286,  286,  286,  286,
+      286,  292, 1089,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  690, 1089,  690,  690,  690,  690,  690,  690,
+
+      690,  690,  690,  693, 1089,  693,  693,  693,  693,  693,
+      693,  693,  693,  693,  694, 1089,  694,  694,  694,  694,
+      694,  694,  694,  694,  694,  697, 1089,  697,  697,  697,
+      697,  697,  697,  697,  697,  697,  246,  246,  246,  246,
+      246,  246,  246,  320,  320, 1089,  320,  320,  320,  320,
+      320,  320,  320,  320,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  710,  710,  712,  712, 1089,  712,  712,
+      712,  712,  712,  712,  712,  712,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  724,  724,
+
+      724,  724,  724,  724,  724,  724,  724,  724,  724,  726,
+      726,  726,  726,  726,  726,  726,  726,  726,  726,  726,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  738,  738,  738,  738,  738,  738,  738,  738,
+      738,  738,  738,  742,  742,  742,  742,  742,  742,  742,
+      742,  742,  742,  742,  744,  744,  744,  744,  744,  744,
+      744,  744,  744,  744,  744,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  748,  748,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  756,  756,  756,
+
+      756,  756,  756,  756,  756,  756,  756,  756,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
+      766,  417, 1089,  417,  417,  417,  417,  417,  417,  417,
+      417,  417,  774, 1089,  774,  774,  774,  774,  774,  774,
+      774,  774,  774,  777, 1089,  777,  777,  777,  777,  777,
+      777,  777,  777,  777,  778, 1089,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  781, 1089,  781,  781,  781,
+      781,  781,  781,  781,  781,  781,  445, 1089, 1089,  445,
+
+      445,  445,  662, 1089,  662,  662,  662,  662,  662,  662,
+      662,  662,  662,  665, 1089,  665,  665,  665,  665,  665,
+      665,  665,  665,  665,  667, 1089,  667,  667,  667,  667,
+      667,  667,  667,  667,  667,  670,  670,  670,  670,  670,
+      670,  670,  247,  247,  247,  247,  247,  247,  247,  247,
+      679, 1089,  679,  679,  679,  679,  521, 1089,  521,  521,
+      521,  521,  286,  286,  286,  286,  286,  286,  286,  292,
+     1089,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+      690, 1089,  690,  690,  690,  690,  690,  690,  690,  690,
+      690,  693, 1089,  693,  693,  693,  693,  693,  693,  693,
+
+      693,  693,  694, 1089,  694,  694,  694,  694,  694,  694,
+      694,  694,  694,  697, 1089,  697,  697,  697,  697,  697,
+      697,  697,  697,  697,  246,  246,  246,  246,  246,  246,
+      246,  320,  320, 1089,  320,  320,  320,  320,  320,  320,
+      320,  320,  710,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  712,  712, 1089,  712,  712,  712,  712,
+      712,  712,  712,  712,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  724,  724,  724,  724,
+      724,  724,  724,  724,  724,  724,  724,  726,  726,  726,
 
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  345,  345,  345,  345,  345,  345,  345,  345,  345,
-      345,  345,  349,  349,  349,  349,  349,  349,  349,  349,
-      349,  349,  349,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  363,  363,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  369,  369,  369,  369,  369,
-      369,  369,  369,  369,  369,  369,  373,  373,  373,  373,
-      373,  373,  373,  373,  373,  373,  373,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  390, 1061,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  392,
-
-     1061,  392,  392,  392,  392,  392,  392,  392,  392,  392,
-      395, 1061,  395,  395,  395,  395,  395,  395,  395,  395,
-      395,  408, 1061,  408,  408,  408,  408,  408,  408,  408,
-      408,  408,  169, 1061, 1061,  169,  169,  417, 1061, 1061,
-      417,  417,  417,  448, 1061, 1061,  448,  634, 1061,  634,
-      634,  634,  634,  634,  634,  634,  634,  634,  637, 1061,
-      637,  637,  637,  637,  637,  637,  637,  637,  637,  639,
-     1061,  639,  639,  639,  639,  639,  639,  639,  639,  639,
-      642,  642,  642,  642,  642,  642,  642,  231,  231,  231,
-      231,  231,  231,  231,  231,  489,  489,  489,  489,  489,
-
-      489,  651, 1061,  651,  651,  651,  651,  493, 1061,  493,
-      493,  493,  493,  268,  268,  268,  268,  268,  268,  268,
-      274, 1061,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  662, 1061,  662,  662,  662,  662,  662,  662,  662,
-      662,  662,  665, 1061,  665,  665,  665,  665,  665,  665,
-      665,  665,  665,  666, 1061,  666,  666,  666,  666,  666,
-      666,  666,  666,  666,  669, 1061,  669,  669,  669,  669,
-      669,  669,  669,  669,  669,  230,  230,  230,  230,  230,
-      230,  230,  300,  300, 1061,  300,  300,  300,  300,  300,
-      300,  300,  300,  682,  682,  682,  682,  682,  682,  682,
-
-      682,  682,  682,  682,  684,  684, 1061,  684,  684,  684,
-      684,  684,  684,  684,  684,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  692,  692,  692,  692,
-      692,  692,  692,  692,  692,  692,  692,  696,  696,  696,
-      696,  696,  696,  696,  696,  696,  696,  696,  698,  698,
-      698,  698,  698,  698,  698,  698,  698,  698,  698,  702,
-      702,  702,  702,  702,  702,  702,  702,  702,  702,  702,
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  714,  714,  714,  714,  714,  714,  714,  714,
-
-      714,  714,  714,  716,  716,  716,  716,  716,  716,  716,
-      716,  716,  716,  716,  720,  720,  720,  720,  720,  720,
-      720,  720,  720,  720,  720,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  728,  728,  728,  728,
-      728,  728,  728,  728,  728,  728,  728,  732,  732,  732,
-      732,  732,  732,  732,  732,  732,  732,  732,  734,  734,
-      734,  734,  734,  734,  734,  734,  734,  734,  734,  738,
+      726,  726,  726,  726,  726,  726,  726,  726,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
       738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
-      390, 1061,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  746, 1061,  746,  746,  746,  746,  746,  746,  746,
+      738,  742,  742,  742,  742,  742,  742,  742,  742,  742,
+      742,  742,  744,  744,  744,  744,  744,  744,  744,  744,
+      744,  744,  744,  748,  748,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  756,  756,  760,  760,  760,  760,
+
+      760,  760,  760,  760,  760,  760,  760,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  766,  766,
+      766,  766,  766,  766,  766,  766,  766,  766,  766,  417,
+     1089,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      774, 1089,  774,  774,  774,  774,  774,  774,  774,  774,
+      774,  777, 1089,  777,  777,  777,  777,  777,  777,  777,
+      777,  777,  778, 1089,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  781, 1089,  781,  781,  781,  781,  781,
+      781,  781,  781,  781,  445, 1089, 1089,  445,  445,  445,
+      247,  247,  247,  247,  247,  247,  247,  247,  521, 1089,
+
+      521,  521,  521,  521,  286,  286,  286,  286,  286,  286,
+      286,  292, 1089,  292,  292,  292,  292,  292,  292,  292,
+      292,  292,  246,  246,  246,  246,  246,  246,  246,  320,
+      320, 1089,  320,  320,  320,  320,  320,  320,  320,  320,
+       23, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
 
-      746,  746,  749, 1061,  749,  749,  749,  749,  749,  749,
-      749,  749,  749,  750, 1061,  750,  750,  750,  750,  750,
-      750,  750,  750,  750,  753, 1061,  753,  753,  753,  753,
-      753,  753,  753,  753,  753,  417, 1061, 1061,  417,  417,
-      417,  634, 1061,  634,  634,  634,  634,  634,  634,  634,
-      634,  634,  637, 1061,  637,  637,  637,  637,  637,  637,
-      637,  637,  637,  639, 1061,  639,  639,  639,  639,  639,
-      639,  639,  639,  639,  642,  642,  642,  642,  642,  642,
-      642,  231,  231,  231,  231,  231,  231,  231,  231,  651,
-     1061,  651,  651,  651,  651,  493, 1061,  493,  493,  493,
-
-      493,  268,  268,  268,  268,  268,  268,  268,  274, 1061,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  662,
-     1061,  662,  662,  662,  662,  662,  662,  662,  662,  662,
-      665, 1061,  665,  665,  665,  665,  665,  665,  665,  665,
-      665,  666, 1061,  666,  666,  666,  666,  666,  666,  666,
-      666,  666,  669, 1061,  669,  669,  669,  669,  669,  669,
-      669,  669,  669,  230,  230,  230,  230,  230,  230,  230,
-      300,  300, 1061,  300,  300,  300,  300,  300,  300,  300,
-      300,  682,  682,  682,  682,  682,  682,  682,  682,  682,
-      682,  682,  684,  684, 1061,  684,  684,  684,  684,  684,
-
-      684,  684,  684,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  692,  692,  692,  692,  692,  692,
-      692,  692,  692,  692,  692,  696,  696,  696,  696,  696,
-      696,  696,  696,  696,  696,  696,  698,  698,  698,  698,
-      698,  698,  698,  698,  698,  698,  698,  702,  702,  702,
-      702,  702,  702,  702,  702,  702,  702,  702,  342,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
-      714,  716,  716,  716,  716,  716,  716,  716,  716,  716,
-
-      716,  716,  720,  720,  720,  720,  720,  720,  720,  720,
-      720,  720,  720,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  728,  728,  728,  728,  728,  728,
-      728,  728,  728,  728,  728,  732,  732,  732,  732,  732,
-      732,  732,  732,  732,  732,  732,  734,  734,  734,  734,
-      734,  734,  734,  734,  734,  734,  734,  738,  738,  738,
-      738,  738,  738,  738,  738,  738,  738,  738,  390, 1061,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  746,
-     1061,  746,  746,  746,  746,  746,  746,  746,  746,  746,
-      749, 1061,  749,  749,  749,  749,  749,  749,  749,  749,
-
-      749,  750, 1061,  750,  750,  750,  750,  750,  750,  750,
-      750,  750,  753, 1061,  753,  753,  753,  753,  753,  753,
-      753,  753,  753,  417, 1061, 1061,  417,  417,  417,  231,
-      231,  231,  231,  231,  231,  231,  231,  493, 1061,  493,
-      493,  493,  493,  268,  268,  268,  268,  268,  268,  268,
-      274, 1061,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  230,  230,  230,  230,  230,  230,  230,  300,  300,
-     1061,  300,  300,  300,  300,  300,  300,  300,  300,   23,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061
+     1089, 1089, 1089, 1089, 1089, 1089
     } ;
 
-static yyconst flex_int16_t yy_chk[7046] =
+static yyconst flex_int16_t yy_chk[7107] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1612,775 +1625,782 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    3,  220,    3,    3,    3,
-       29,   44,   44,    3,    3,  220,    3,    3,   13,    3,
-        3,    3,    6,   14,    6,    6,    3,    3,    3,    3,
-       13,   13,   13,   13,   35,   14,   14,   14,   14,   25,
-
-      196,   25,   25,   29,  196,    6,   35,   27,   27,   27,
-       27,    3,   33,    3,   25,   31,    3,   31,    3,   31,
-       31,    3,   27,    3,   45,   45,   33,    3,    3,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        1,    1,    1,    1,    1,    2,   33,    2,    2,   29,
+       35,    4,  236,    4,    4, 1083,    6,   40,    6,    6,
+       33,  236,   35,    8,   40,    8,    8,   55,    2,    3,
+       74,    3,    3,    3,    4,   44,   44,    3,    3,    6,
+
+        3,    3,   29,    3,    3,    3,    8,   45,   45,  108,
+        3,    3,    3,    3,   10,   13,   10,   10,   12, 1079,
+       12,   12,   16,   74,   16,   16,   55,   13,   13,   13,
+       13,   18,  108,   18,   18,    3,   20,    3,   20,   20,
+        3,   22,    3,   22,   22,    3,  212,    3,   46,   46,
+      212,    3,    3,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    7,    7,    7,    7,    7,    7,
 
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    9,
-        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        7,    7,    7,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,   11,   11,   11,   11,   11,   11,
+        9,    9,    9,    9,    9,    9,    9,    9,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
 
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   14, 1078,   14,   14,   31,   14,   31,
+       82,   31,   31,   60, 1077,   60,   60,   82,  122,  122,
+       14,   14,   14,   14,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   17,   17,   17,   17,   17,   17,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   17,
+
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-       17,   17,   17,   17,   17,   17,   17,   17,   17,   19,
-       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
+
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
-       19,   19,   19,   19,   21,   21,   21,   21,   21,   21,
+       19,   19,   19,   19,   19,   19,   19,   19,   19,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
-
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
-       21,   21,   21,   21,   21,   21,   21,   21,   21,   36,
-     1055,   36,   36,   36,   36,   40,   38,   36,   38,   38,
-       38,   38,   40,  102,   38,   39,   39,   39,   39,   46,
-       46,   39, 1051,   39,   39,   39,   39,   39,   39,   39,
-       39,   39,   39,   39,   39,   39,  102,   39,   39,   39,
-       39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
+       21,   21,   21,   21,   25,   91,   25,   25,   27,   27,
 
+       27,   27,   36,  209,   36,   36,   36,   36,  209,   25,
+       36,   47,   38,   27,   38,   38,   38,   38,   47, 1075,
+       38,   39,   39,   39,   39,   47,  233,   39,   91,   39,
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
-       41,   47,   41,   41,   41,   41,  200,   51,   47,   49,
-     1050,   70,   41,   41,   51,   47,   49,   41,   55,   41,
-      200,   51,   41,   49,   56,   58,   41,   58,   58,   41,
-       42,   78,   42,   42,   42,   42,  676,   41,   78,   48,
-      197,   52,  197,   42,   70,   41,   48,   42,   52,   48,
-       48,   48,   48,   48,   49,   52,  193,   55,   51,   42,
-       43,  193,   43,  676,   56,   43, 1049,   50,   43,   43,
-       43,   43,   43,   43,   50,   53,   43,  822,   43,   43,
-       54,   50,   53,  218,   52,   57,   57,   54,  218,   53,
-
-       59,   59,   59,   59,   54,   60,   64,   60,   60,   60,
-       60, 1047,   80,   64,   57,   50,   87,  822,   62,   80,
-       64,   50,   53,  114,  114,  113,   62,   62,   62,   62,
-       62,   62,  116,  116,   54,   53,   61,   62,   67,   67,
-       67,   67,   80,   64,   69,   69,   69,   69,   71,   87,
-       71,  217,   71,   71,   61,   61,  105,   61,  113,   61,
-      105,   61,   61,   61,   61,  105,   61,  217,   61,   61,
-       61,   74, 1046,   73,   61,   73,   73,   73,   73,  126,
-      126,   74,   74,   74,   74,   76, 1044,   76,   76,   76,
-       76,   81,   81,   81,   81,  128,  128,  198,   76,  198,
-
-       79,  627,   76,   79,   79,   79,   79,   79,   74,   74,
-      627,  118,  118,   74,   76,   82,   82,   82,   82,   89,
-      118,   89,   89,   89,   89,   90,   90,   90,   90,  123,
-      123,   92,   99,   99,   99,   99,  117,  117,   92,  153,
-      117,   92,  130,  130, 1043,   92,   98,   98,   98,   98,
-      123,  130,  166,   90,  138,  138,   92,   90,   91, 1040,
-       91,   91,   91,   91,   92,  107,  107,  107,  107,  109,
-       91,   91,  153,  117,   98,   91,  109,   91,   98,  109,
-       91,  140,  140,  109,   91,  166,  106,   91,  106,  106,
-      106,  106,  195,  107,  109,   91,  195,  107,  135,  135,
-
-      195,  257,  109,   91,   94,   94,  257,   94,   94,   94,
-       94,   94,   94,   94,   94,   94,   94,   94,   94,  135,
-       94,   94,  215,  119,  119,  268,   94,   94,   94,   94,
-      215,  100,  268,  100,  100,  100,  100,  119,  276,  119,
-      119,  119,  119,   94,  100,  131,  131,  216,  100,  142,
-      142,  216,  129,  129,  190,  430,  129,  430,  142,  131,
-      100,  131,  131,  131,  131,  216,  190,   94,   94,   95,
-       95,  276,   95,   95,   95,   95,   95,   95,   95,   95,
-       95,   95,   95,   95, 1037,   95,   95,  120,  120,  129,
-      267,   95,   95,   95,   95,  147,  147,  163,  267,  163,
-
-      163,  132,  132,  120,  120,  120,  120,  155,   95,  155,
-      155,  155,  155,  427,   95,  122,  147,  132,  132,  132,
-      132,  299,  122,  206,  206,  122,  209,  209,  209,  122,
-      427,  120,   95,   95,  108,  120,  108,  108,  108,  108,
-      122,  156,  156,  156,  156,  132,  108,  108,  122,  132,
-      821,  108,  162,  108,  162,  162,  108,  299,  141,  141,
-      108,  291,  141,  108,  214,  214,  291,  162,  816,  156,
-      816,  108, 1036,  156,  170,  170,  170,  170,  821,  108,
-      111,  111,  111,  111,  111,  111, 1035,  111,  111,  111,
-      111,  111,  111,  111,  111,  141,  111,  111,  392,  134,
-
-      228,  228,  111,  111,  111,  111,  134,  468,  146,  134,
-     1033,  143,  143,  134,  247,  146,  247,  247,  146,  111,
-      830,  223,  146,  830,  134,  143,  223,  143,  143,  143,
-      143,  392,  134,  146,  171,  171,  171,  171,  896,  223,
-      468,  146,  896,  111,  111,  112,  112,  112,  112,  112,
-      112, 1032,  112,  112,  112,  112,  112,  112,  112,  112,
-      834,  112,  112,  834,  158,  254,  254,  112,  112,  112,
-      112,  158,  286,  286,  158,  144,  144, 1031,  158,  172,
-      172,  172,  172, 1030,  112,  173,  173,  173,  173,  158,
-      112,  144,  144,  144,  144,  309,  309,  158,  180,  180,
-
-      180,  180,  314,  184,  184,  184,  184,  314,  112,  112,
-      121,  121,  250,  301,  184,  838,  250,  301,  838,  144,
-      250,  892,  301,  144,  121, 1023,  121,  121,  121,  121,
-      184,  205,  205,  205,  205, 1018,  121,  121,  231,  318,
-      318,  121,  205,  121,  892,  231,  121,  320,  320,  207,
-      121,  207,  231,  121,  207,  207,  207,  207,  205,  323,
-      323,  121,  258,  258,  258,  258,  289,  289,  289,  121,
-      124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  842,  124,  124,  842,  235,
-      324,  324,  124,  124,  124,  124,  235,  181,  677,  181,
-
-      181,  181,  181,  235,  941,  233,  234,  335,  335,  124,
-      181, 1017,  233,  234,  181,  233,  233,  233,  233,  233,
-      234,  260,  260,  260,  260,  677,  181,  262,  262,  262,
-      262,  262, 1014,  124,  124,  125,  125,  125,  125,  125,
-      125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
-      941,  125,  125, 1013,  236,  238,  234,  125,  125,  125,
-      125,  236,  238,  237,  240,  239,  271,  942,  236,  238,
-      237,  240,  239,  271,  125,  342,  342,  237,  240,  239,
-      125,  241,  272,  272,  272,  272,  344,  344,  241, 1011,
-      238,  273,  273,  273,  273,  241,  347,  347,  125,  125,
-
-      133,  133,  325,  325,  236,  237,  237,  348,  348,  271,
-     1010,  325,  240,  942,  133,  239,  133,  133,  133,  133,
-      312,  312,  312,  241,  359,  359,  133,  133,  326,  326,
-      826,  133,  826,  133,  366,  366,  133,  326,  321,  321,
-      133,  270,  321,  133,  270,  270,  270,  270,  270,  349,
-      349,  133,  280,  280,  280,  280,  368,  368,  349,  133,
-      136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-      136,  136,  136,  136,  136,  321,  136,  136,  303,  303,
-      303,  303,  136,  136,  136,  136, 1009,  281,  407,  281,
-      281,  281,  281,  407,  282,  282,  282,  282,  897,  136,
-
-      281,  287,  897,  287,  281,  282,  287,  287,  287,  287,
-      371,  371,  310,  985,  310,  985,  281,  310,  310,  310,
-      310,  282, 1007,  136,  136,  137,  137,  137,  137,  137,
-      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
-      893,  137,  137,  372,  372,  330,  330,  137,  137,  137,
-      137,  285,  285,  285,  285,  298,  890,  298,  298,  298,
-      298,  890,  285,  893,  137,  331,  331,  898,  298,  516,
-      137,  898,  298,  322,  322,  354,  354,  322,  285,  333,
-      333,  383,  383, 1006,  298,  350,  350,  474,  137,  137,
-      145,  145,  330,  516,  350,  333,  333,  516,  304, 1005,
-
-      304,  304,  304,  304,  145, 1004,  145,  145,  145,  145,
-      322,  304,  331,  402,  402,  304,  145,  145,  327,  327,
-      474,  145,  354,  145,  444,  444,  145,  304,  336,  336,
-      145,  355,  355,  145,  327,  327,  327,  327,  338,  338,
-     1002,  145,  338,  891,  336,  336,  336,  338,  891,  145,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148, 1001,  148,  148,  305,  305,
-      305,  305,  148,  148,  148,  148,  453, 1000,  355,  305,
-      308,  308,  308,  308,  453,  334,  334,  453,  899,  148,
-      998,  308,  899,  345,  345,  305,  334,  345,  334,  373,
-
-      373,  334,  334,  334,  334,  346,  346,  308,  373,  346,
-      378,  378,  990,  148,  148,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      345,  149,  149,  988,  329,  329,  656,  149,  149,  149,
-      149,  986,  346,  656,  369,  369,  332,  332,  369,  984,
-      329,  329,  329,  329,  149,  357,  357,  378,  360,  360,
-      149,  329,  332,  332,  332,  332,  503,  503,  379,  379,
-      656,  357,  357,  332,  360,  360,  360,  329,  149,  149,
-      157,  369,  157,  157,  157,  157,  900,  362,  362,  332,
-      900,  362,  157,  157,  351,  351,  362,  157,  411,  157,
-
-      411,  411,  157,  358,  358,  983,  157,  381,  381,  157,
-      351,  351,  351,  351,  358,  379,  358,  157,  982,  358,
-      358,  358,  358,  381,  381,  157,  160,  160,  981,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  947,  160,  160,  353,  353,  374,  374,  160,  160,
-      160,  160,  405,  405,  405,  374,  521,  521,  375,  375,
-      353,  353,  353,  353,  901,  160,  356,  356,  901,  370,
-      370,  353,  979,  370,  375,  375,  375,  375,  396,  396,
-      396,  396,  356,  356,  356,  356,  947,  353,  508,  160,
-      160,  161,  161,  356,  161,  161,  161,  161,  161,  161,
-
-      161,  161,  161,  161,  161,  161,  370,  161,  161,  356,
-      377,  377,  978,  161,  161,  161,  161,  412,  412,  412,
-      412,  508,  384,  384,  575,  575,  377,  377,  377,  377,
-      161,  650,  650,  380,  380,  977,  161,  377,  384,  384,
-      384,  413,  413,  413,  413,  414,  414,  414,  414,  380,
-      380,  380,  380,  377,  161,  161,  290,  290,  290,  290,
-      380,  415,  415,  415,  415,  290,  290,  290,  386,  386,
-      530,  530,  386,  447,  447,  447,  380,  386,  976,  290,
-      290,  290,  290,  290,  290,  292,  292,  975,  292,  292,
-      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-
-      510,  292,  292,  382,  382,  580,  974,  292,  292,  292,
-      292,  506,  506,  506,  382,  987,  382,  987,  530,  382,
-      382,  382,  382,  397,  292,  397,  397,  397,  397,  445,
-      445,  445,  445,  510,  673,  673,  397,  403,  580,  403,
-      397,  973,  403,  403,  403,  403,  694,  694,  292,  292,
-      293,  293,  397,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  294,  294,  970,  294,  294,
-      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
-      969,  294,  294,  398,  398,  398,  398,  294,  294,  294,
-      294,  524,  524,  524,  398,  401,  401,  401,  401,  968,
-      443,  443,  443,  443,  294,  967,  401,  416,  943,  416,
-      398,  443,  416,  416,  416,  416,  446,  446,  446,  446,
-      695,  695,  401,  294,  531,  531,  943,  443,  294,  294,
-      313,  313,  313,  313,  965,  476,  478,  479,  480,  313,
-      313,  313,  476,  478,  479,  480,  963,  544,  544,  476,
-
-      478,  479,  480,  313,  313,  313,  313,  313,  313,  315,
-      315,  315,  315,  315,  315,  962,  315,  315,  315,  315,
-      315,  315,  315,  315,  531,  315,  315,  961,  481,  479,
-      483,  315,  315,  315,  315,  481,  960,  483,  504,  504,
-      504,  504,  481,  959,  483,  544,  539,  539,  315,  491,
-      491,  491,  491,  491,  499,  539,  499,  700,  700,  499,
-      499,  499,  499,  505,  505,  505,  505,  522,  522,  522,
-      522,  483,  315,  315,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  317,
-      317,  317,  317,  317,  317,  958,  317,  317,  317,  317,
-      317,  317,  317,  317,  957,  317,  317,  701,  701,  484,
-      498,  317,  317,  317,  317,  477,  484,  498,  956,  482,
-      902,  526,  477,  484,  902,  526,  482,  955,  317,  477,
-      526,  558,  558,  482,  533,  533,  582,  502,  502,  502,
-      502,  498,  578,  578,  578,  498,  484,  317,  502,  657,
-
-      533,  533,  317,  317,  328,  328,  657,  482,  538,  538,
-      477,  482,  538,  634,  502,  553,  553,  639,  328,  582,
-      328,  328,  328,  328,  553,  520,  520,  520,  520,  558,
-      662,  328,  517,  657,  517,  328,  520,  517,  517,  517,
-      517,  523,  523,  523,  523,  538,  634,  328,  337,  337,
-      639,  934,  520,  534,  534,  712,  712,  894,  545,  545,
-      535,  535,  894,  662,  337,  337,  337,  337,  945,  534,
-      534,  534,  534,  337,  337,  337,  535,  535,  535,  535,
-      666,  559,  559,  576,  576,  576,  576,  337,  337,  337,
-      337,  337,  337,  339,  339,  339,  339,  339,  339,  339,
-
-      339,  339,  339,  339,  339,  339,  339,  339,  545,  339,
-      339,  529,  529,  666,  945,  339,  339,  339,  339,  536,
-      536,  989,  529,  989,  529,  547,  547,  529,  529,  529,
-      529,  559,  339,  543,  543,  536,  536,  536,  561,  561,
-      895,  547,  547,  932,  543,  895,  543,  713,  713,  543,
-      543,  543,  543,  931,  561,  561,  339,  339,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  341,  341,  341,  341,  341,  341,  341,
-      341,  341,  341,  341,  341,  341,  341,  341,  930,  341,
-      341,  532,  532,  567,  567,  341,  341,  341,  341,  718,
-      718,  929,  567,  546,  546,  719,  719,  532,  532,  532,
-      532,  927,  341,  540,  540,  730,  730,  540,  532,  546,
-      546,  546,  546,  926,  548,  548,  577,  577,  577,  577,
-      546,  341,  731,  731,  532,  746,  341,  341,  352,  352,
-      548,  548,  548,  548,  549,  549,  546,  552,  552,  903,
-
-      540,  552,  352,  903,  352,  352,  352,  352,  550,  550,
-      549,  549,  549,  549,  750,  352,  554,  554,  746,  352,
-      554,  944,  644,  645,  550,  550,  550,  557,  557,  644,
-      645,  352,  361,  361,  552,  925,  644,  645,  557,  944,
-      557,  736,  736,  557,  557,  557,  557,  750,  361,  361,
-      361,  361,  946,  554,  737,  737,  649,  361,  361,  361,
-      566,  566,  888,  649,  566,  585,  585,  585,  585,  888,
-      649,  361,  361,  361,  361,  361,  361,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  888,  363,  363,  560,  560,  566,  946,  363,
-
-      363,  363,  363,  564,  564,  649,  682,  562,  562,  924,
-      682,  560,  560,  560,  560,  682,  363,  563,  563,  564,
-      564,  564,  560,  562,  562,  562,  562,  586,  586,  586,
-      586,  827,  827,  563,  563,  563,  563,  997,  560,  997,
-      363,  363,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+       39,   39,  233,   39,   39,   39,   39,   39,   39,   39,
+       39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+       39,   39,   39,   39,   39,   39,   41,   52,   41,   41,
+       41,   41,  216,   51,   52,   49,  971,   53,   41,   41,
+       51,   52,   49,   41,   53,   41,  216,   51,   41,   49,
+       56,   53,   41,  112,  971,   41,   42,  112,   42,   42,
+
+       42,   42,  112,   41,   67,   48,   67,   67,  975,   42,
+       52,   41,   48,   42,   53,   48,   48,   48,   48,   48,
+       49,  121,  124,  124,   51,   42,   43,   53,   43,  455,
+       56,   43, 1074,   50,   43,   43,   43,   43,   43,   43,
+       50,   54,   43,  286,   43,   43,  455,   50,   54,   57,
+      286,   57,   57,  975,  121,   54,   66,   58,   58,   58,
+       58,   59,   59,   66,   57,   61,   61,   61,   61,  655,
+       66,   50,   58,   68,   68,   68,   68,   50,  655,   62,
+       59,   62,   62,   62,   62,   54,   63,   64,   71,   71,
+       71,   71,  213,   66,  213,   64,   64,   64,   64,   64,
+
+       64,  126,  126,  167,   63,   63,   64,   63,  182,   63,
+      126,   63,   63,   63,   63,  214,   63,  214,   63,   63,
+       63,  136,  136,   84,   63,   73,   73,   73,   73,   75,
+       84,   75,   78,   75,   75,   77,  167,   77,   77,   77,
+       77,  182,   78,   78,   78,   78,   80, 1072,   80,   80,
+       80,   80,  231,   84,   85,   85,   85,   85, 1071,   80,
+      231,   83,  849,   80,   83,   83,   83,   83,   83,   78,
+       78,  138,  138,  285,   78,   80,   86,   86,   86,   86,
+       93,  285,   93,   93,   93,   93,   94,   94,   94,   94,
+      849,  100,   96,  100,  100,  101,  101,  101,  101,   96,
+
+      234,  109,   96,  109,  109,  234,   96,  104,  104,  104,
+      104,  140,  140,  120,   94,  120,  120,   96,   94,   95,
+      140,   95,   95,   95,   95,   96,  105,  105,  105,  105,
+      116,   95,   95,  131,  131,  104,   95,  116,   95,  104,
+      116,   95,  150,  150,  116,   95,  684,  113,   95,  113,
+      113,  113,  113,  684,  131,  116,   95,  134,  134,  134,
+      134,  152,  152,  116,   95,   98,   98, 1068,   98,   98,
+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+      684,   98,   98,  114,  114,  114,  114,   98,   98,   98,
+       98,  206,  106, 1065,  106,  106,  106,  106,  135,  135,
+
+      135,  135, 1064,  206,   98,  106,  127,  127,  458,  106,
+      458,  114,  125,  125,  239,  114,  125,  154,  154,  239,
+      127,  106,  127,  127,  127,  127,  154, 1063,   98,   98,
+       99,   99,  239,   99,   99,   99,   99,   99,   99,   99,
+       99,   99,   99,   99,   99,  858,   99,   99,  858,  125,
+      145,  145,   99,   99,   99,   99,  130,  148,  148,  148,
+      148,  128,  128,  130,  139,  139,  130, 1061,  139,   99,
+      130,  145,  222,  222,  844,   99,  844,  128,  128,  128,
+      128,  130,  149,  149,  149,  149,  153,  153,  211,  130,
+      153,  704,  211,   99,   99,  115,  211,  115,  115,  115,
+
+      115,  139,  225,  225,  225,  128, 1060,  115,  115,  128,
+      159,  159,  115,  176,  115,  176,  176,  115,  704,  141,
+      141,  115, 1059,  153,  115,  162,  162,  162,  162,  230,
+      230,  159,  115,  141,  274,  141,  141,  141,  141,  274,
+      115,  118,  118,  118,  118,  118,  118, 1058,  118,  118,
+      118,  118,  118,  118,  118,  118, 1051,  118,  118,  163,
+      163,  163,  163,  118,  118,  118,  118,  155,  155,  169,
+      294,  169,  169,  169,  169,  244,  244,  142,  142,  862,
+      118,  155,  862,  155,  155,  155,  155,  177,  177,  177,
+      177,  271,  271,  142,  142,  142,  142,  178, 1046,  178,
+
+      178,  304,  304,  294,  118,  118,  119,  119,  119,  119,
+      119,  119,  178,  119,  119,  119,  119,  119,  119,  119,
+      119,  142,  119,  119, 1045,  142,  419,  144,  119,  119,
+      119,  119,  232,  158,  144, 1042,  232,  144,  156,  156,
+      158,  144,  854,  158,  854,  119,  179,  158,  179,  179,
+      232,  119,  144,  969,  156,  156,  156,  156,  158,  419,
+      144,  186,  186,  186,  186,  264,  158,  264,  264,  119,
+      119,  129,  129,  170,  170,  170,  170,  187,  187,  187,
+      187,  275,  156,  275,  275,  129,  156,  129,  129,  129,
+      129,  188,  188,  188,  188,  309,  172,  129,  129,  969,
+
+      309,  170,  129,  172,  129,  170,  172,  129,  329,  329,
+      172,  129, 1041,  247,  129,  189,  189,  189,  189, 1039,
+      247,  172,  129,  196,  196,  196,  196,  247, 1038,  172,
+      129,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+      132,  132,  132,  132,  132,  132,  318,  132,  132,  313,
+      251,  313,  313,  132,  132,  132,  132,  251,  197, 1037,
+      197,  197,  197,  197,  251,  200,  200,  200,  200,  924,
+      132,  197,  223,  924,  223,  197,  200,  223,  223,  223,
+      223,  267,  318,  289,  321,  267,  334,  197,  321,  267,
+      289,  334,  200,  321,  132,  132,  133,  133,  133,  133,
+
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  920,  133,  133,  262,  496,  262,  262,  133,  133,
+      133,  133,  221,  221,  221,  221,  289, 1035,  319,  262,
+      319,  319,  249,  221,  920,  133,  307,  307,  307,  249,
+      250,  133,  249,  249,  249,  249,  249,  250,  496,  221,
+      252,  254,  339,  339,  250, 1034,  253,  252,  254,  133,
+      133,  143,  143,  253,  252,  254,  705,  255,  921,  257,
+      253,  332,  332,  332,  255,  143,  257,  143,  143,  143,
+      143,  255,  338,  257,  338,  338,  254,  143,  143, 1033,
+      250,  921,  143,  705,  143,  341,  341,  143,  253,  253,
+
+      252,  143,  256,  502,  143,  276,  276,  276,  276,  256,
+      434,  257,  143,  344,  344,  434,  256,  255,  345,  345,
+      143,  146,  146,  146,  146,  146,  146,  146,  146,  146,
+      146,  146,  146,  146,  146,  146,  502,  146,  146,  278,
+      278,  278,  278,  146,  146,  146,  146,  346,  346, 1032,
+      256,  280,  280,  280,  280,  280,  346, 1013,  288, 1013,
+      146,  288,  288,  288,  288,  288,  290,  290,  290,  290,
+      291,  291,  291,  291,  298,  298,  298,  298,  323,  323,
+      323,  323,  351,  351,  146,  146,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+
+      147,  866,  147,  147,  866,  347,  347,  918,  147,  147,
+      147,  147,  918,  299,  347,  299,  299,  299,  299,  352,
+      352,  300,  300,  300,  300,  147,  299,  356,  356,  351,
+      299,  147,  300,  303,  303,  303,  303,  354,  354,  342,
+      342,  850,  299,  342,  303,  365,  365, 1030,  300,  147,
+      147,  157,  157,  354,  354,  925,  305,  970,  305,  925,
+      303,  305,  305,  305,  305,  157,  352,  157,  157,  157,
+      157,  850,  325,  325,  325,  325,  342,  157,  157,  367,
+      367, 1029,  157,  325,  157,  370,  370,  157,  371,  371,
+      330,  157,  330,  536,  157,  330,  330,  330,  330,  325,
+
+      343,  343,  157,  970,  343,  363,  363,  363,  363,  976,
+      157,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+      160,  160,  160,  160,  160,  160,  536,  160,  160,  364,
+      364,  364,  364,  160,  160,  160,  160,  343,  317,  538,
+      317,  317,  317,  317,  324, 1028,  324,  324,  324,  324,
+      160,  317,  348,  348,  976,  317, 1026,  324,  608,  368,
+      368,  324,  926,  368,  382,  382,  926,  317,  348,  348,
+      348,  348,  538,  324,  160,  160,  161,  161,  161,  161,
+      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+      161,  608,  161,  161,  357,  357,  368,  977,  161,  161,
+
+      161,  161,  328,  328,  328,  328,  350,  350,  372,  372,
+      357,  357,  357,  328,  927,  161,  972,  372,  927,  355,
+      355,  161,  350,  350,  350,  350,  610,  369,  369,  328,
+      355,  369,  355,  350,  972,  355,  355,  355,  355,  161,
+      161,  171,  977,  171,  171,  171,  171,  359,  359,  350,
+      919,  359,  662,  171,  171,  919,  359, 1018,  171,  610,
+      171,  377,  377,  171,  369,  373,  373,  171,  378,  378,
+      171,  385,  385, 1016,  373,  385,  391,  391,  171,  973,
+      385,  389,  389,  389,  389,  662,  171,  174,  174, 1014,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+
+      174,  174,  922,  174,  174,  353,  353,  922,  377,  174,
+      174,  174,  174,  380,  380,  378,  667,  374,  374,  393,
+      393,  353,  353,  353,  353,  973,  174,  376,  376,  380,
+      380, 1012,  353,  374,  374,  374,  374,  390,  390,  390,
+      390,  396,  396,  376,  376,  376,  376, 1011,  353,  667,
+      174,  174,  175,  175,  376,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  974,  175,  175,
+      376,  379,  379, 1010,  175,  175,  175,  175,  397,  397,
+      408,  408, 1009,  381,  381,  403,  403,  379,  379,  379,
+      379,  175,  383,  383,  381, 1007,  381,  175,  379,  381,
+
+      381,  381,  381,  398,  398,  429,  429,  928,  383,  383,
+      383,  928,  398,  974,  379,  175,  175,  308,  308,  308,
+      308, 1006,  399,  399,  472,  472,  308,  308,  308,  394,
+      394,  399,  403,  394,  690,  395,  395,  404,  404,  395,
+      308,  308,  308,  308,  308,  308,  310,  310, 1005,  310,
+      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310, 1004,  310,  310,  400,  400,  394,  690,  310,  310,
+      310,  310,  395,  406,  406,  407,  407,  432,  432,  432,
+      400,  400,  400,  400,  404,  310,  407, 1003,  407,  406,
+      406,  407,  407,  407,  407,  411,  411,  531,  531,  411,
+
+      415,  415,  415,  415,  411,  416,  416,  416,  416,  310,
+      310,  311,  311, 1002,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  312,  312, 1001,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  923,  312,  312,  402,  402,  923,  481,  312,  312,
+
+      312,  312,  409,  409,  998,  481,  405,  405,  481,  978,
+      402,  402,  402,  402,  438,  312,  438,  438,  409,  409,
+      409,  402,  405,  405,  405,  405,  423,  423,  423,  423,
+      475,  475,  475,  405,  312,  549,  549,  402,  997,  312,
+      312,  333,  333,  333,  333,  439,  996,  439,  439,  405,
+      333,  333,  333,  430,  978,  430,  603,  603,  430,  430,
+      430,  430,  678,  678,  333,  333,  333,  333,  333,  333,
+      335,  335,  335,  335,  335,  335,  995,  335,  335,  335,
+      335,  335,  335,  335,  335,  967,  335,  335,  440,  440,
+      440,  440,  335,  335,  335,  335,  967,  424,  993,  424,
+
+      424,  424,  424,  967,  425,  425,  425,  425,  991,  335,
+      424,  534,  534,  534,  424,  425,  441,  441,  441,  441,
+      442,  442,  442,  442,  701,  701,  424,  443,  443,  443,
+      443,  425,  990,  335,  335,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+
+      337,  337,  337,  337,  337,  337,  989,  337,  337,  337,
+      337,  337,  337,  337,  337,  988,  337,  337,  428,  428,
+      428,  428,  337,  337,  337,  337,  444,  544,  444,  428,
+      987,  444,  444,  444,  444,  471,  471,  471,  471,  337,
+      473,  473,  473,  473,  986,  428,  471,  474,  474,  474,
+      474,  544,  985,  504,  505,  544,  694, 1015,  337, 1015,
+      504,  505,  471,  337,  337,  349,  349,  504,  505,  558,
+      558,  506,  984,  507,  532,  532,  532,  532,  506,  349,
+      507,  349,  349,  349,  349,  506,  508,  507,  509,  694,
+      511,  510,  349,  508,  983,  509,  349,  511,  510,  505,
+
+      508,  962,  509,  554,  511,  510,  512,  554,  349,  358,
+      358,  526,  554,  512,  774,  507,  870,  558,  526,  870,
+      512,  533,  533,  533,  533,  358,  358,  358,  358,  510,
+     1017,  511, 1017,  510,  358,  358,  358,  519,  519,  519,
+      519,  519,  526,  512,  572,  572,  526,  774,  358,  358,
+      358,  358,  358,  358,  360,  360,  360,  360,  360,  360,
+      360,  360,  360,  360,  360,  360,  360,  360,  360,  805,
+      360,  360,  530,  530,  530,  530,  360,  360,  360,  360,
+      527,  960,  527,  530,  805,  527,  527,  527,  527,  545,
+      805,  545,  572,  360,  545,  545,  545,  545,  959,  530,
+
+      550,  550,  550,  550,  551,  551,  551,  551,  552,  552,
+      552,  604,  604,  604,  604,  722,  722,  360,  360,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  362,  362,  362,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  958,
+
+      362,  362,  548,  548,  548,  548,  362,  362,  362,  362,
+      559,  559,  957,  548,  557,  557,  566,  566,  560,  560,
+      566,  718,  718,  362,  929,  557,  955,  557,  929,  548,
+      557,  557,  557,  557,  560,  560,  560,  560,  561,  561,
+      562,  562,  362,  567,  567,  560,  778,  362,  362,  375,
+      375,  954,  567,  566,  561,  561,  562,  562,  562,  562,
+      559,  560,  953,  375,  718,  375,  375,  375,  375,  563,
+      563,  568,  568,  564,  564,  568,  375,  573,  573,  778,
+      375,  575,  575,  576,  576,  563,  563,  563,  563,  564,
+      564,  564,  375,  384,  384,  581,  581,  575,  575,  576,
+
+      576,  576,  576,  930,  581,  577,  577,  930,  568,  384,
+      384,  384,  384,  578,  578,  952,  586,  586,  384,  384,
+      384,  577,  577,  577,  577,  719,  719,  573,  951,  578,
+      578,  578,  384,  384,  384,  384,  384,  384,  386,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  386,  950,  386,  386,  571,  571,  723,  723,
+      386,  386,  386,  386,  586,  585,  585,  571,  719,  571,
+      589,  589,  571,  571,  571,  571,  585,  386,  585,  590,
+      590,  585,  585,  585,  585,  949,  589,  589,  728,  728,
+      595,  595,  606,  606,  606,  590,  590,  590,  590,  595,
 
-      364,  364,  364,  364,  364,  364,  364,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  923,  365,  365,  574,  574,  574,  574,  365,
-      365,  365,  365,  922,  696,  696,  574,  568,  568,  828,
-      828,  568,  571,  696,  571,  921,  365,  571,  571,  571,
-      571,  920,  574,  646,  647,  658,  658,  658,  658,  918,
-      646,  647,  648,  829,  829,  365,  917,  646,  647,  648,
-      365,  365,  376,  376,  568,  916,  648,  659,  659,  659,
-      659,  678,  678,  678,  678,  915,  376,  914,  376,  376,
-      376,  376,  831,  831,  646,  647,  690,  690,  913,  376,
-
-      761,  691,  691,  376,  688,  688,  648,  679,  679,  679,
-      679,  689,  689,  761,  912,  376,  385,  385,  911,  761,
-      688,  688,  688,  688,  832,  832,  910,  689,  689,  689,
-      689,  948,  385,  385,  385,  385,  703,  703,  909,  690,
-      703,  385,  385,  385,  691,  692,  692,  833,  833,  692,
-      693,  693,  708,  708,  693,  385,  385,  385,  385,  385,
-      385,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  948,  387,  387,  697,
-      697,  908,  692,  387,  387,  387,  387,  693,  697,  706,
-      706,  835,  835,  707,  707,  708,  907,  721,  721,  906,
-
-      387,  721,  724,  724,  905,  706,  706,  706,  706,  707,
-      707,  707,  707,  714,  714,  836,  836,  905,  724,  724,
-      724,  724,  714,  905,  387,  387,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
+      948,  386,  386,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  388,  388,
       388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  389,  389,  389,  389,  389,  389,  389,  389,  389,
+      388,  388,  388,  968,  388,  388,  574,  574,  587,  587,
+      388,  388,  388,  388,  968,  602,  602,  602,  602,  729,
 
-      389,  389,  389,  389,  389,  389,  949,  389,  389,  709,
-      709,  715,  715,  389,  389,  389,  389,  904,  726,  726,
-      715,  727,  727,  698,  698,  699,  699,  698,  882,  699,
-      389,  710,  710,  711,  711,  710,  881,  711,  716,  716,
-      717,  717,  716,  879,  717,  878,  739,  739,  777,  389,
-      739,  949,  709,  876,  389,  389,  406,  406,  406,  406,
-      698,  726,  699,  777,  727,  406,  406,  406,  710,  777,
-      711,  742,  742,  742,  742,  716,  875,  717,  950,  406,
-      406,  406,  406,  406,  406,  408,  408,  874,  408,  408,
-      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
-
-      871,  408,  408,  725,  725,  732,  732,  408,  408,  408,
-      408,  811,  837,  837,  732,  870,  733,  733,  811,  725,
-      725,  725,  725,  950,  408,  733,  743,  743,  743,  743,
-      841,  841,  887,  885,  887,  887, 1026, 1026,  886,  938,
-      885,  938,  938, 1027, 1027,  886,  811,  885,  408,  408,
-      409,  409,  886,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  410,  410,  869,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      951,  410,  410,  868,  812,  889,  867,  410,  410,  410,
-      410,  812,  889,  952,  992,  992,  992,  728,  728,  729,
-      729,  728,  953,  729,  410,  734,  734,  735,  735,  734,
-      801,  735,  803,  883,  865,  889,  954,  801,  864,  803,
-      883,  812,  863,  410,  801,  951,  803,  883,  410,  410,
-      507,  507,  507,  507,  728,  862,  729,  861,  952,  507,
-      507,  507,  734,  860,  735, 1028, 1028,  953,  858,  857,
-
-      883,  803,  801,  507,  507,  507,  507,  507,  507,  511,
-      511,  954,  511,  511,  511,  511,  511,  511,  511,  511,
-      511,  511,  511,  511,  856,  511,  511,  939,  884,  855,
-      853,  511,  511,  511,  511,  884,  936,  852,  939,  937,
-      936,  940,  884,  937,  851,  939,  850,  936,  511,  849,
-      937,  848,  940,  847,  936,  846,  844,  937,  843,  940,
-      991,  991,  991,  818,  991,  884,  993,  993,  993,  809,
-      993,  806,  511,  511,  512,  512,  800,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  525,
-      525,  525,  525,  799,  802,  804,  798,  797,  525,  525,
-      525,  802,  804,  994,  994,  994,  796,  795,  802,  804,
-      794,  793,  525,  525,  525,  525,  525,  525,  527,  527,
-      527,  527,  527,  527,  792,  527,  527,  527,  527,  527,
-      527,  527,  527,  791,  527,  527,  790,  789,  802,  786,
-      527,  527,  527,  527,  804,  995,  995,  995,  785,  995,
-
-      996,  996,  996,  783,  781,  779,  778,  527,  776,  775,
-      774,  773,  772,  771,  770,  769,  768,  766,  765,  764,
-      763,  760,  758,  757,  756,  754,  749,  745,  744,  741,
-      723,  527,  527,  528,  528,  528,  528,  528,  528,  705,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  537,  537,
-
-      687,  685,  681,  680,  675,  674,  672,  670,  665,  661,
-      660,  655,  654,  653,  537,  537,  537,  537,  652,  643,
-      642,  637,  633,  537,  537,  537,  632,  631,  630,  629,
-      628,  626,  625,  624,  623,  622,  621,  537,  537,  537,
-      537,  537,  537,  541,  541,  541,  541,  541,  541,  541,
-      541,  541,  541,  541,  541,  541,  541,  541,  619,  541,
-      541,  618,  617,  616,  615,  541,  541,  541,  541,  614,
-      613,  612,  611,  609,  608,  607,  606,  605,  604,  603,
-      602,  601,  541,  600,  599,  597,  596,  595,  594,  593,
-      592,  591,  590,  589,  588,  581,  573,  572,  519,  518,
-
-      515,  514,  513,  509,  501,  500,  541,  541,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  551,  551,  497,  496,  495,  494,  489,
-      488,  487,  486,  485,  475,  472,  469,  467,  466,  551,
-      551,  551,  551,  465,  464,  463,  462,  461,  551,  551,
+      729,  968,  574,  574,  574,  574,  602,  388,  580,  580,
+      724,  724,  580,  574,  685,  946,  582,  582,  945,  724,
+      582,  685,  602,  672,  594,  594,  388,  944,  594,  574,
+      672,  388,  388,  401,  401,  725,  725,  672,  587,  588,
+      588,  943,  596,  596,  725,  580,  596,  401,  685,  401,
+      401,  401,  401,  582,  942,  588,  588,  588,  588,  941,
+      401,  594,  740,  740,  401,  710,  588,  591,  591,  710,
+      940,  592,  592, 1025,  710, 1025,  401,  410,  410,  596,
+      741,  741,  588,  591,  591,  591,  591,  592,  592,  592,
+      746,  746,  979,  410,  410,  410,  410,  605,  605,  605,
+
+      605,  673,  410,  410,  410,  599,  939,  599,  673,  938,
+      599,  599,  599,  599,  937,  673,  410,  410,  410,  410,
+      410,  410,  412,  412,  412,  412,  412,  412,  412,  412,
+      412,  412,  412,  412,  412,  412,  412,  979,  412,  412,
+      613,  613,  613,  613,  412,  412,  412,  412,  614,  614,
+      614,  614,  686,  686,  686,  686,  687,  687,  687,  687,
+      936,  412,  706,  706,  706,  706,  707,  707,  707,  707,
+      731,  731,  742,  742,  731,  743,  743,  747,  747,  749,
+      749,  742,  935,  749,  743,  412,  412,  413,  413,  413,
+      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,
+
+      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,
+      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,
+      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,
+      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,
+      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,
+      413,  413,  414,  414,  414,  414,  414,  414,  414,  414,
+      414,  414,  414,  414,  414,  414,  414,  934,  414,  414,
+      932,  674,  675,  910,  414,  414,  414,  414,  674,  675,
+      676,  677,  716,  716,  909,  674,  675,  676,  677,  717,
+      717,  414,  720,  720,  676,  677,  720,  840,  716,  716,
+
+      716,  716,  758,  758,  840,  717,  717,  717,  717,  907,
+      414,  906,  674,  675,  904,  414,  414,  433,  433,  433,
+      433,  736,  736,  903,  676,  902,  433,  433,  433,  720,
+      677,  899,  737,  737,  840,  721,  721,  759,  759,  721,
+      433,  433,  433,  433,  433,  433,  435,  435,  789,  435,
+      435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
+      435,  789,  435,  435,  736,  734,  734,  789,  435,  435,
+      435,  435,  721,  735,  735,  737,  726,  726,  752,  752,
+      726,  734,  734,  734,  734,  435,  753,  753,  898,  735,
+      735,  735,  735,  897,  752,  752,  752,  752,  760,  760,
+
+      764,  764,  753,  753,  753,  753,  896,  760,  895,  435,
+      435,  436,  436,  726,  436,  436,  436,  436,  436,  436,
+      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,
+      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,
+      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,
+      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,
+      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,
+      436,  436,  436,  436,  436,  436,  437,  437,  893,  437,
+      437,  437,  437,  437,  437,  437,  437,  437,  437,  437,
+      437,  980,  437,  437,  754,  754,  761,  761,  437,  437,
+
+      437,  437,  892,  755,  755,  761,  765,  765,  727,  727,
+      738,  738,  727,  891,  738,  437,  739,  739,  744,  744,
+      739,  890,  744,  745,  745,  756,  756,  745,  889,  756,
+      888,  767,  767,  886,  437,  767,  980,  754,  885,  437,
+      437,  535,  535,  535,  535,  727,  755,  738,  855,  855,
+      535,  535,  535,  739,  981,  744,  770,  770,  770,  770,
+      745,  884,  756,  883,  535,  535,  535,  535,  535,  535,
+      539,  539,  881,  539,  539,  539,  539,  539,  539,  539,
+      539,  539,  539,  539,  539,  982,  539,  539,  771,  771,
+      771,  771,  539,  539,  539,  539,  839,  856,  856,  981,
+
+      757,  757,  880,  839,  757,  857,  857,  859,  859,  539,
+      860,  860,  861,  861,  863,  863,  864,  864,  865,  865,
+      869,  869,  915,  931,  915,  915,  966,  931,  966,  966,
+      982,  839,  879,  539,  539,  540,  540,  757,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
+
+      553,  553,  553,  553, 1019, 1019, 1019,  832, 1019,  553,
+      553,  553,  762,  762,  832,  878,  762,  877,  763,  763,
+      876,  832,  763,  553,  553,  553,  553,  553,  553,  555,
+      555,  555,  555,  555,  555,  875,  555,  555,  555,  555,
+      555,  555,  555,  555,  874,  555,  555, 1054, 1054,  762,
+      831,  555,  555,  555,  555,  763,  832,  831,  829,  913,
+      914,  872,  933,  871,  831,  829,  913,  914,  555, 1020,
+     1020, 1020,  829,  913,  914,  933, 1021, 1021, 1021,  846,
+     1021,  933, 1022, 1022, 1022,  837, 1023, 1023, 1023,  831,
+     1023,  834,  555,  555,  556,  556,  556,  556,  556,  556,
 
-      551,  460,  459,  458,  457,  456,  455,  454,  452,  451,
-      450,  449,  551,  551,  551,  551,  551,  551,  555,  555,
-      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
-      555,  555,  555,  441,  555,  555,  440,  439,  438,  437,
-      555,  555,  555,  555,  436,  435,  434,  433,  432,  431,
-      429,  428,  426,  425,  424,  423,  422,  555,  421,  420,
-      419,  418,  400,  399,  395,  307,  306,  297,  296,  295,
-      284,  283,  279,  269,  266,  265,  261,  256,  255,  253,
-      252,  555,  555,  556,  556,  556,  556,  556,  556,  556,
+      829,  556,  556,  556,  556,  556,  556,  556,  556,  556,
       556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-
       556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
       556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
       556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  565,  565,
-      251,  249,  248,  246,  232,  230,  229,  222,  221,  219,
-      213,  212,  211,  203,  565,  565,  565,  565,  202,  201,
-      199,  194,  192,  565,  565,  565,  191,  189,  188,  187,
-      177,  159,  154,  152,  110,  101,   96,  565,  565,  565,
-      565,  565,  565,  569,  569,  569,  569,  569,  569,  569,
-
-      569,  569,  569,  569,  569,  569,  569,  569,   93,  569,
-      569,   88,   86,   83,   77,  569,  569,  569,  569,   72,
-       65,   63,   34,   32,   28,   23,    8,    4,    2,    0,
-        0,    0,  569,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  569,  569,  570,  570,
-      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      556,  556,  556,  556,  556,  556,  556,  556,  556,  565,
+      565,  916,  917,  964, 1024, 1024, 1024,  964,  916,  917,
+     1055, 1055, 1056, 1056,  964,  565,  565,  565,  565,  965,
+      830,  964,  911,  965,  565,  565,  565,  830,  828,  911,
+      965,  916,  917,  827,  830,  826,  911,  965,  565,  565,
+
+      565,  565,  565,  565,  569,  569,  569,  569,  569,  569,
+      569,  569,  569,  569,  569,  569,  569,  569,  569,  911,
+      569,  569,  825,  912,  830,  824,  569,  569,  569,  569,
+      912,  823,  822,  821,  820,  819,  818,  912,  817,  814,
+      813,  811,  809,  569,  807,  806,  804,  803,  802,  801,
+      800,  799,  798,  797,  796,  794,  793,  792,  791,  788,
+      912,  786,  785,  784,  782,  777,  773,  569,  569,  570,
       570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
       570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
       570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
 
       570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
       570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
-      570,  570,  570,  579,  579,  579,  579,    0,    0,    0,
-        0,    0,  579,  579,  579,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  579,  579,  579,  579,
-      579,  579,  583,  583,    0,  583,  583,  583,  583,  583,
-      583,  583,  583,  583,  583,  583,  583,    0,  583,  583,
-        0,    0,    0,    0,  583,  583,  583,  583,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  583,    0,    0,    0,    0,    0,    0,    0,    0,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  570,  570,  570,  579,  579,  772,  769,  751,  733,
+      715,  713,  709,  708,  703,  702,  700,  698,  693,  689,
+      579,  579,  579,  579,  688,  683,  682,  681,  680,  579,
+      579,  579,  671,  670,  665,  661,  660,  659,  658,  657,
+      656,  654,  653,  579,  579,  579,  579,  579,  579,  583,
+      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
+      583,  583,  583,  583,  652,  583,  583,  651,  650,  649,
 
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  583,  583,  584,  584,    0,
-      584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
+      647,  583,  583,  583,  583,  646,  645,  644,  643,  642,
+      641,  640,  639,  637,  636,  635,  634,  633,  583,  632,
+      631,  630,  629,  628,  627,  625,  624,  623,  622,  621,
+      620,  619,  618,  617,  616,  609,  601,  600,  547,  546,
+      543,  542,  583,  583,  584,  584,  584,  584,  584,  584,
       584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
       584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
       584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
       584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
       584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
-      584,  584,  669,  669,    0,  669,  669,  669,  669,  669,
-      669,  669,  669,  669,  669,  669,  669,    0,  669,  669,
 
-        0,    0,    0,    0,  669,  669,  669,  669,    0,    0,
+      584,  584,  584,  584,  584,  584,  584,  584,  584,  593,
+      593,  541,  537,  529,  528,  525,  524,  523,  522,  517,
+      516,  515,  514,  513,  503,  593,  593,  593,  593,  500,
+      497,  495,  494,  493,  593,  593,  593,  492,  491,  490,
+      489,  488,  487,  486,  485,  484,  483,  482,  593,  593,
+      593,  593,  593,  593,  597,  597,  597,  597,  597,  597,
+      597,  597,  597,  597,  597,  597,  597,  597,  597,  480,
+      597,  597,  479,  478,  477,  469,  597,  597,  597,  597,
+      468,  467,  466,  465,  464,  463,  462,  461,  460,  459,
+      457,  456,  454,  597,  453,  452,  451,  450,  449,  448,
+
+      447,  446,  427,  426,  422,  327,  326,  316,  315,  314,
+      302,  301,  297,  287,  284,  283,  279,  597,  597,  598,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  607,  607,  607,  607,  273,  272,
+      270,  269,  268,  607,  607,  607,  266,  265,  263,  248,
+
+      246,  245,  238,  237,  235,  229,  228,  607,  607,  607,
+      607,  607,  607,  611,  611,  227,  611,  611,  611,  611,
+      611,  611,  611,  611,  611,  611,  611,  611,  219,  611,
+      611,  218,  217,  215,  210,  611,  611,  611,  611,  208,
+      207,  205,  204,  203,  193,  173,  168,  166,  117,  107,
+      102,   97,  611,   92,   90,   87,   81,   76,   69,   65,
+       34,   32,   28,   23,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  611,  611,  612,  612,
+        0,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  697,  697,    0,  697,  697,  697,  697,
+      697,  697,  697,  697,  697,  697,  697,  697,    0,  697,
+      697,    0,    0,    0,    0,  697,  697,  697,  697,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  669,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  697,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  669,  669,  671,  671,    0,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  684,  684,  684,  684,  684,  684,    0,  684,
-      684,  684,  684,  684,  684,  684,  684,    0,  684,  684,
-        0,    0,    0,    0,  684,  684,  684,  684,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  684,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  684,  684,  686,  686,  686,
-      686,  686,  686,    0,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  702,  702,  702,  702,  702,  702,  702,  702,
-      702,  702,  702,  702,  702,  702,  702,    0,  702,  702,
-        0,    0,    0,    0,  702,  702,  702,  702,    0,    0,
+
+        0,    0,    0,    0,    0,    0,  697,  697,  699,  699,
+        0,  699,  699,  699,  699,  699,  699,  699,  699,  699,
+      699,  699,  699,  699,  699,  699,  699,  699,  699,  699,
+      699,  699,  699,  699,  699,  699,  699,  699,  699,  699,
+      699,  699,  699,  699,  699,  699,  699,  699,  699,  699,
+      699,  699,  699,  699,  699,  699,  699,  699,  699,  699,
+      699,  699,  699,  699,  699,  699,  699,  699,  699,  699,
+      699,  699,  699,  712,  712,  712,  712,  712,  712,    0,
+      712,  712,  712,  712,  712,  712,  712,  712,    0,  712,
+      712,    0,    0,    0,    0,  712,  712,  712,  712,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  702,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  712,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  712,  712,  714,  714,
+      714,  714,  714,  714,    0,  714,  714,  714,  714,  714,
+      714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
+      714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
+      714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
+      714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
+      714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
 
-        0,    0,    0,    0,    0,  702,  702,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  720,  720,  720,  720,  720,  720,  720,  720,
-      720,  720,  720,  720,  720,  720,  720,    0,  720,  720,
-        0,    0,    0,    0,  720,  720,  720,  720,    0,    0,
-
+      714,  714,  714,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,    0,  730,
+      730,    0,    0,    0,    0,  730,  730,  730,  730,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  720,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  730,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  720,  720,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-
-      722,  722,  738,  738,  738,  738,  738,  738,  738,  738,
-      738,  738,  738,  738,  738,  738,  738,    0,  738,  738,
-        0,    0,    0,    0,  738,  738,  738,  738,    0,    0,
+        0,    0,    0,    0,    0,    0,  730,  730,  732,  732,
+      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
+      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
+      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
+
+      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
+      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
+      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
+      732,  732,  732,  748,  748,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  748,  748,  748,  748,    0,  748,
+      748,    0,    0,    0,    0,  748,  748,  748,  748,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  738,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  748,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  738,  738,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  753,  753,    0,  753,  753,  753,  753,  753,
-      753,  753,  753,  753,  753,  753,  753,    0,  753,  753,
-        0,    0,    0,    0,  753,  753,  753,  753,    0,    0,
+        0,    0,    0,    0,    0,    0,  748,  748,  750,  750,
+
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  766,  766,  766,  766,  766,  766,  766,
+      766,  766,  766,  766,  766,  766,  766,  766,    0,  766,
+      766,    0,    0,    0,    0,  766,  766,  766,  766,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  753,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,  766,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  753,  753,  755,  755,    0,
+        0,    0,    0,    0,    0,    0,  766,  766,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  781,  781,    0,  781,  781,  781,  781,
 
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  815,  815,    0,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  825,  825,  825,
-      825,  825,  825,    0,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825, 1062,    0, 1062, 1062, 1062, 1062, 1062, 1062,
-
-     1062, 1062, 1062, 1063,    0,    0, 1063, 1063, 1064,    0,
-     1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1065,
-     1065, 1065, 1065, 1065, 1065, 1065, 1065, 1066, 1066, 1066,
-     1066, 1067,    0, 1067,    0, 1067, 1067, 1067, 1067, 1068,
-     1068, 1068, 1068, 1068, 1068, 1068, 1069,    0, 1069, 1069,
-     1069, 1069, 1069, 1069, 1069, 1069, 1069, 1070,    0, 1070,
-     1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1071,    0,
-     1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1072,
-        0, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
-     1073, 1073, 1073, 1073, 1073, 1073, 1073, 1074, 1074,    0,
-
-     1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1075, 1075,
-     1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1076,
-     1076,    0, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
-     1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
-     1077, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078,
-     1078, 1078, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
-     1079, 1079, 1079, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
-     1080, 1080, 1080, 1080, 1081, 1081, 1081, 1081, 1081, 1081,
-     1081, 1081, 1081, 1081, 1081, 1082, 1082, 1082, 1082, 1082,
-     1082, 1082, 1082, 1082, 1082, 1082, 1083, 1083, 1083, 1083,
-
-     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1084, 1084, 1084,
-     1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1085, 1085,
-     1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1086,
-     1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-     1087, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
-     1088, 1088, 1089,    0, 1089, 1089, 1089, 1089, 1089, 1089,
-     1089, 1089, 1089, 1090,    0, 1090, 1090, 1090, 1090, 1090,
-     1090, 1090, 1090, 1090, 1091,    0, 1091, 1091, 1091, 1091,
-     1091, 1091, 1091, 1091, 1091, 1092,    0, 1092, 1092, 1092,
-
-     1092, 1092, 1092, 1092, 1092, 1092, 1093,    0,    0, 1093,
-     1093, 1094,    0, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1095,    0,    0, 1095, 1095, 1095, 1096,    0,
-        0, 1096, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1098,
-     1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099,    0,    0,
-        0,    0, 1099, 1099, 1099, 1099, 1100, 1100, 1100, 1100,
-     1100, 1100, 1101, 1101, 1101, 1101, 1102,    0, 1102, 1102,
-     1102, 1102, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1104,
-        0, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
-     1105,    0, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
-
-     1105, 1106,    0, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
-     1106, 1106, 1107,    0, 1107, 1107, 1107, 1107, 1107, 1107,
-     1107, 1107, 1107, 1108, 1108,    0, 1108, 1108, 1108, 1108,
-     1108, 1108, 1108, 1108, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1110, 1110,    0, 1110, 1110,
-     1110, 1110, 1110, 1110, 1110, 1110, 1111, 1111, 1111, 1111,
-     1111, 1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112, 1112,
-     1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1113, 1113,
-     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1114,
+      781,  781,  781,  781,  781,  781,  781,  781,    0,  781,
+      781,    0,    0,    0,    0,  781,  781,  781,  781,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  781,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  781,  781,  783,  783,
+        0,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
+      783,  783,  783,  843,  843,    0,  843,  843,  843,  843,
+      843,  843,  843,  843,  843,  843,  843,  843,  843,  843,
+      843,  843,  843,  843,  843,  843,  843,  843,  843,  843,
+      843,  843,  843,  843,  843,  843,  843,  843,  843,  843,
+      843,  843,  843,  843,  843,  843,  843,  843,  843,  843,
+      843,  843,  843,  843,  843,  843,  843,  843,  843,  843,
+      843,  843,  843,  843,  843,  843,  843,  843,  853,  853,
+      853,  853,  853,  853,    0,  853,  853,  853,  853,  853,
+
+      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  853, 1090,    0, 1090, 1090, 1090, 1090, 1090,
+     1090, 1090, 1090, 1090, 1091,    0,    0, 1091, 1091, 1092,
+        0, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1094, 1094,
+     1094, 1094, 1095,    0, 1095,    0, 1095, 1095, 1095, 1095,
+
+     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1097,    0, 1097,
+     1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1098,    0,
+     1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099,
+        0, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+     1100,    0, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100,
+     1100, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1102, 1102,
+        0, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1104, 1104,    0, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
+     1104, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
+
+     1105, 1105, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+     1106, 1106, 1106, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
+     1107, 1107, 1107, 1107, 1108, 1108, 1108, 1108, 1108, 1108,
+     1108, 1108, 1108, 1108, 1108, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1111, 1111, 1111,
+     1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112,
+     1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1113,
+     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
      1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
 
-     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
-     1115, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-     1116, 1116, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
-     1117, 1117, 1117, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
-     1118, 1118, 1118, 1118, 1119, 1119, 1119, 1119, 1119, 1119,
-     1119, 1119, 1119, 1119, 1119, 1120, 1120, 1120, 1120, 1120,
-     1120, 1120, 1120, 1120, 1120, 1120, 1121, 1121, 1121, 1121,
-     1121, 1121, 1121, 1121, 1121, 1121, 1121, 1122, 1122, 1122,
-     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1123,    0,
-     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1124,
-
-        0, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
-     1125,    0, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
-     1125, 1126,    0, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
-     1126, 1126, 1127,    0,    0, 1127, 1127, 1128,    0,    0,
-     1128, 1128, 1128, 1129,    0,    0, 1129, 1130,    0, 1130,
-     1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1131,    0,
-     1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1132,
-        0, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
-     1133, 1133, 1133, 1133, 1133, 1133, 1133, 1134, 1134, 1134,
-     1134, 1134, 1134, 1134, 1134, 1135, 1135, 1135, 1135, 1135,
-
-     1135, 1136,    0, 1136, 1136, 1136, 1136, 1137,    0, 1137,
-     1137, 1137, 1137, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
-     1139,    0, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
-     1139, 1140,    0, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
-     1140, 1140, 1141,    0, 1141, 1141, 1141, 1141, 1141, 1141,
-     1141, 1141, 1141, 1142,    0, 1142, 1142, 1142, 1142, 1142,
-     1142, 1142, 1142, 1142, 1143,    0, 1143, 1143, 1143, 1143,
-     1143, 1143, 1143, 1143, 1143, 1144, 1144, 1144, 1144, 1144,
-     1144, 1144, 1145, 1145,    0, 1145, 1145, 1145, 1145, 1145,
-     1145, 1145, 1145, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
-
-     1146, 1146, 1146, 1146, 1147, 1147,    0, 1147, 1147, 1147,
-     1147, 1147, 1147, 1147, 1147, 1148, 1148, 1148, 1148, 1148,
-     1148, 1148, 1148, 1148, 1148, 1148, 1149, 1149, 1149, 1149,
-     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1150, 1150, 1150,
-     1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1151, 1151,
-     1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1152,
-     1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
-     1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153,
-     1153, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
-     1154, 1154, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
-
-     1155, 1155, 1155, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
-     1156, 1156, 1156, 1156, 1157, 1157, 1157, 1157, 1157, 1157,
-     1157, 1157, 1157, 1157, 1157, 1158, 1158, 1158, 1158, 1158,
-     1158, 1158, 1158, 1158, 1158, 1158, 1159, 1159, 1159, 1159,
-     1159, 1159, 1159, 1159, 1159, 1159, 1159, 1160, 1160, 1160,
-     1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1161, 1161,
-     1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1162,
-     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
-     1163,    0, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
-     1163, 1164,    0, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
-
-     1164, 1164, 1165,    0, 1165, 1165, 1165, 1165, 1165, 1165,
-     1165, 1165, 1165, 1166,    0, 1166, 1166, 1166, 1166, 1166,
-     1166, 1166, 1166, 1166, 1167,    0, 1167, 1167, 1167, 1167,
-     1167, 1167, 1167, 1167, 1167, 1168,    0,    0, 1168, 1168,
-     1168, 1169,    0, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
-     1169, 1169, 1170,    0, 1170, 1170, 1170, 1170, 1170, 1170,
-     1170, 1170, 1170, 1171,    0, 1171, 1171, 1171, 1171, 1171,
-     1171, 1171, 1171, 1171, 1172, 1172, 1172, 1172, 1172, 1172,
-     1172, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1174,
-        0, 1174, 1174, 1174, 1174, 1175,    0, 1175, 1175, 1175,
-
-     1175, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177,    0,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1178,
-        0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
-     1179,    0, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
-     1179, 1180,    0, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
-     1180, 1180, 1181,    0, 1181, 1181, 1181, 1181, 1181, 1181,
-     1181, 1181, 1181, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
-     1183, 1183,    0, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
-     1183, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
-     1184, 1184, 1185, 1185,    0, 1185, 1185, 1185, 1185, 1185,
-
-     1185, 1185, 1185, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
-     1186, 1186, 1186, 1186, 1187, 1187, 1187, 1187, 1187, 1187,
-     1187, 1187, 1187, 1187, 1187, 1188, 1188, 1188, 1188, 1188,
-     1188, 1188, 1188, 1188, 1188, 1188, 1189, 1189, 1189, 1189,
-     1189, 1189, 1189, 1189, 1189, 1189, 1189, 1190, 1190, 1190,
-     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 1191,
-     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1192,
-     1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,
-     1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193,
-     1193, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
-
-     1194, 1194, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
-     1195, 1195, 1195, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
-     1196, 1196, 1196, 1196, 1197, 1197, 1197, 1197, 1197, 1197,
-     1197, 1197, 1197, 1197, 1197, 1198, 1198, 1198, 1198, 1198,
-     1198, 1198, 1198, 1198, 1198, 1198, 1199, 1199, 1199, 1199,
-     1199, 1199, 1199, 1199, 1199, 1199, 1199, 1200, 1200, 1200,
-     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1201,    0,
-     1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1202,
-        0, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
-     1203,    0, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
-
-     1203, 1204,    0, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
-     1204, 1204, 1205,    0, 1205, 1205, 1205, 1205, 1205, 1205,
-     1205, 1205, 1205, 1206,    0,    0, 1206, 1206, 1206, 1207,
-     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1208,    0, 1208,
-     1208, 1208, 1208, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
-     1210,    0, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
-     1210, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1212, 1212,
-        0, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061
+     1114, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1116, 1117,    0, 1117, 1117, 1117, 1117, 1117,
+     1117, 1117, 1117, 1117, 1118,    0, 1118, 1118, 1118, 1118,
+     1118, 1118, 1118, 1118, 1118, 1119,    0, 1119, 1119, 1119,
+     1119, 1119, 1119, 1119, 1119, 1119, 1120,    0, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1120, 1121,    0,    0,
+     1121, 1121, 1122,    0, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1123,    0,    0, 1123, 1123, 1123, 1124,
+        0,    0, 1124, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
+
+     1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1127,    0,
+        0,    0,    0, 1127, 1127, 1127, 1127, 1128, 1128, 1128,
+     1128, 1128, 1128, 1129, 1129, 1129, 1129, 1130,    0, 1130,
+     1130, 1130, 1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
+     1132,    0, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1132, 1133,    0, 1133, 1133, 1133, 1133, 1133, 1133, 1133,
+     1133, 1133, 1134,    0, 1134, 1134, 1134, 1134, 1134, 1134,
+     1134, 1134, 1134, 1135,    0, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1136, 1136,    0, 1136, 1136, 1136,
+     1136, 1136, 1136, 1136, 1136, 1137, 1137, 1137, 1137, 1137,
+
+     1137, 1137, 1137, 1137, 1137, 1137, 1138, 1138,    0, 1138,
+     1138, 1138, 1138, 1138, 1138, 1138, 1138, 1139, 1139, 1139,
+     1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1140, 1140,
+     1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1141,
+     1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141,
+     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
+     1142, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
+     1144, 1144, 1144, 1145, 1145, 1145, 1145, 1145, 1145, 1145,
+     1145, 1145, 1145, 1145, 1146, 1146, 1146, 1146, 1146, 1146,
+
+     1146, 1146, 1146, 1146, 1146, 1147, 1147, 1147, 1147, 1147,
+     1147, 1147, 1147, 1147, 1147, 1147, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1149, 1149, 1149,
+     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1150, 1150,
+     1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1151,
+        0, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
+     1152,    0, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
+     1152, 1153,    0, 1153, 1153, 1153, 1153, 1153, 1153, 1153,
+     1153, 1153, 1154,    0, 1154, 1154, 1154, 1154, 1154, 1154,
+     1154, 1154, 1154, 1155,    0,    0, 1155, 1155, 1156,    0,
+
+        0, 1156, 1156, 1156, 1157,    0,    0, 1157, 1158,    0,
+     1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1159,
+        0, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+     1160,    0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160,
+     1160, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1162, 1162,
+     1162, 1162, 1162, 1162, 1162, 1162, 1163, 1163, 1163, 1163,
+     1163, 1163, 1164,    0, 1164, 1164, 1164, 1164, 1165,    0,
+     1165, 1165, 1165, 1165, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1167,    0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+     1167, 1167, 1168,    0, 1168, 1168, 1168, 1168, 1168, 1168,
+
+     1168, 1168, 1168, 1169,    0, 1169, 1169, 1169, 1169, 1169,
+     1169, 1169, 1169, 1169, 1170,    0, 1170, 1170, 1170, 1170,
+     1170, 1170, 1170, 1170, 1170, 1171,    0, 1171, 1171, 1171,
+     1171, 1171, 1171, 1171, 1171, 1171, 1172, 1172, 1172, 1172,
+     1172, 1172, 1172, 1173, 1173,    0, 1173, 1173, 1173, 1173,
+     1173, 1173, 1173, 1173, 1174, 1174, 1174, 1174, 1174, 1174,
+     1174, 1174, 1174, 1174, 1174, 1175, 1175,    0, 1175, 1175,
+     1175, 1175, 1175, 1175, 1175, 1175, 1176, 1176, 1176, 1176,
+     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177, 1177, 1177,
+     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1178, 1178,
+
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1179,
+     1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+     1180, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
+     1181, 1181, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
+     1182, 1182, 1182, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
+     1183, 1183, 1183, 1183, 1184, 1184, 1184, 1184, 1184, 1184,
+     1184, 1184, 1184, 1184, 1184, 1185, 1185, 1185, 1185, 1185,
+     1185, 1185, 1185, 1185, 1185, 1185, 1186, 1186, 1186, 1186,
+     1186, 1186, 1186, 1186, 1186, 1186, 1186, 1187, 1187, 1187,
+
+     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1188, 1188,
+     1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1189,
+     1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+     1190, 1191,    0, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+     1191, 1191, 1192,    0, 1192, 1192, 1192, 1192, 1192, 1192,
+     1192, 1192, 1192, 1193,    0, 1193, 1193, 1193, 1193, 1193,
+     1193, 1193, 1193, 1193, 1194,    0, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1195,    0, 1195, 1195, 1195,
+     1195, 1195, 1195, 1195, 1195, 1195, 1196,    0,    0, 1196,
+
+     1196, 1196, 1197,    0, 1197, 1197, 1197, 1197, 1197, 1197,
+     1197, 1197, 1197, 1198,    0, 1198, 1198, 1198, 1198, 1198,
+     1198, 1198, 1198, 1198, 1199,    0, 1199, 1199, 1199, 1199,
+     1199, 1199, 1199, 1199, 1199, 1200, 1200, 1200, 1200, 1200,
+     1200, 1200, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201,
+     1202,    0, 1202, 1202, 1202, 1202, 1203,    0, 1203, 1203,
+     1203, 1203, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1205,
+        0, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
+     1206,    0, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
+     1206, 1207,    0, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+
+     1207, 1207, 1208,    0, 1208, 1208, 1208, 1208, 1208, 1208,
+     1208, 1208, 1208, 1209,    0, 1209, 1209, 1209, 1209, 1209,
+     1209, 1209, 1209, 1209, 1210, 1210, 1210, 1210, 1210, 1210,
+     1210, 1211, 1211,    0, 1211, 1211, 1211, 1211, 1211, 1211,
+     1211, 1211, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
+     1212, 1212, 1212, 1213, 1213,    0, 1213, 1213, 1213, 1213,
+     1213, 1213, 1213, 1213, 1214, 1214, 1214, 1214, 1214, 1214,
+     1214, 1214, 1214, 1214, 1214, 1215, 1215, 1215, 1215, 1215,
+     1215, 1215, 1215, 1215, 1215, 1215, 1216, 1216, 1216, 1216,
+     1216, 1216, 1216, 1216, 1216, 1216, 1216, 1217, 1217, 1217,
+
+     1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1218, 1218,
+     1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1219,
+     1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
+     1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220,
+     1220, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221,
+     1221, 1221, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222,
+     1222, 1222, 1222, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+     1223, 1223, 1223, 1223, 1224, 1224, 1224, 1224, 1224, 1224,
+     1224, 1224, 1224, 1224, 1224, 1225, 1225, 1225, 1225, 1225,
+     1225, 1225, 1225, 1225, 1225, 1225, 1226, 1226, 1226, 1226,
+
+     1226, 1226, 1226, 1226, 1226, 1226, 1226, 1227, 1227, 1227,
+     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1228, 1228,
+     1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1229,
+        0, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229,
+     1230,    0, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230,
+     1230, 1231,    0, 1231, 1231, 1231, 1231, 1231, 1231, 1231,
+     1231, 1231, 1232,    0, 1232, 1232, 1232, 1232, 1232, 1232,
+     1232, 1232, 1232, 1233,    0, 1233, 1233, 1233, 1233, 1233,
+     1233, 1233, 1233, 1233, 1234,    0,    0, 1234, 1234, 1234,
+     1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1236,    0,
+
+     1236, 1236, 1236, 1236, 1237, 1237, 1237, 1237, 1237, 1237,
+     1237, 1238,    0, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
+     1238, 1238, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1240,
+     1240,    0, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
+
+     1089, 1089, 1089, 1089, 1089, 1089
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -2460,6 +2480,8 @@
 
 static void include_file(PARROT_INTERP, char *file_name, ARGMOD(void *yyscanner));
 
+static int handle_identifier(PARROT_INTERP, YYSTYPE *valp, ARGIN(const char *id));
+
 #define YY_DECL int yylex(YYSTYPE *valp,yyscan_t yyscanner,PARROT_INTERP)
 
 #define YYCHOP() (yytext[--yyleng] = '\0')
@@ -2489,7 +2511,7 @@
 
 
 
-#line 2493 "compilers/imcc/imclexer.c"
+#line 2515 "compilers/imcc/imclexer.c"
 
 #define INITIAL 0
 #define emit 1
@@ -2734,7 +2756,7 @@
 	register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 152 "compilers/imcc/imcc.l"
+#line 154 "compilers/imcc/imcc.l"
 
         /* for emacs "*/
         if (IMCC_INFO(interp)->expect_pasm == 1 && !IMCC_INFO(interp)->in_pod) {
@@ -2753,7 +2775,7 @@
             return 0;
         }
 
-#line 2757 "compilers/imcc/imclexer.c"
+#line 2779 "compilers/imcc/imclexer.c"
 
 	if ( !yyg->yy_init )
 		{
@@ -2807,13 +2829,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 1062 )
+				if ( yy_current_state >= 1090 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 1061 );
+		while ( yy_current_state != 1089 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -2834,24 +2856,29 @@
 			goto yy_find_action;
 
 case 1:
-/* rule 1 can match eol */
 YY_RULE_SETUP
-#line 170 "compilers/imcc/imcc.l"
+#line 172 "compilers/imcc/imcc.l"
+{ IMCC_INFO(interp)->line++; }
+	YY_BREAK
+case 2:
+/* rule 2 can match eol */
+YY_RULE_SETUP
+#line 174 "compilers/imcc/imcc.l"
 {
+            IMCC_INFO(interp)->line++;
             IMCC_INFO(interp)->frames->heredoc_rest = mem_sys_strdup(yytext);
             BEGIN(heredoc2);
     }
 	YY_BREAK
-case 2:
-/* rule 2 can match eol */
+case 3:
+/* rule 3 can match eol */
 YY_RULE_SETUP
-#line 175 "compilers/imcc/imcc.l"
+#line 180 "compilers/imcc/imcc.l"
 {
         /* heredocs have highest priority
          * arrange them before all wildcard state matches */
 
         /* Newline in the heredoc. Realloc and cat on. */
-        IMCC_INFO(interp)->line++;
         IMCC_INFO(interp)->heredoc_content =
             (char*)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
                             strlen(IMCC_INFO(interp)->heredoc_content) +
@@ -2860,10 +2887,11 @@
                strlen(IMCC_INFO(interp)->heredoc_content), yytext);
     }
 	YY_BREAK
-case 3:
+case 4:
 YY_RULE_SETUP
-#line 189 "compilers/imcc/imcc.l"
+#line 193 "compilers/imcc/imcc.l"
 {
+        IMCC_INFO(interp)->line++;
         /* Are we at the end of the heredoc? */
         if (STREQ(IMCC_INFO(interp)->heredoc_end, yytext)) {
             /* End of the heredoc. */
@@ -2886,7 +2914,7 @@
             yy_pop_state(yyscanner);
             yy_scan_string(IMCC_INFO(interp)->frames->heredoc_rest,yyscanner);
 
-            /* the EOF rule will increment the line number; decrement here */
+            /* not sure we need this decrement; more testing needed */
             IMCC_INFO(interp)->line--;
             return STRINGC;
         }
@@ -2901,10 +2929,10 @@
         }
     }
 	YY_BREAK
-case 4:
-/* rule 4 can match eol */
+case 5:
+/* rule 5 can match eol */
 YY_RULE_SETUP
-#line 227 "compilers/imcc/imcc.l"
+#line 232 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
         yy_push_state(cmt3, yyscanner);
@@ -2915,27 +2943,27 @@
         return FILECOMMENT;
     }
 	YY_BREAK
-case 5:
+case 6:
 YY_RULE_SETUP
-#line 237 "compilers/imcc/imcc.l"
+#line 242 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
         yy_push_state(cmt4, yyscanner);
     }
 	YY_BREAK
-case 6:
+case 7:
 YY_RULE_SETUP
-#line 242 "compilers/imcc/imcc.l"
+#line 247 "compilers/imcc/imcc.l"
 { yy_push_state(cmt2, yyscanner); }
 	YY_BREAK
-case 7:
+case 8:
 YY_RULE_SETUP
-#line 244 "compilers/imcc/imcc.l"
+#line 249 "compilers/imcc/imcc.l"
 { yy_push_state(cmt1, yyscanner);  }
 	YY_BREAK
-case 8:
+case 9:
 YY_RULE_SETUP
-#line 246 "compilers/imcc/imcc.l"
+#line 251 "compilers/imcc/imcc.l"
 {
         IMCC_INFO(interp)->line = atoi(yytext);
         yy_pop_state(yyscanner);
@@ -2943,40 +2971,38 @@
         return LINECOMMENT;
     }
 	YY_BREAK
-case 9:
-/* rule 9 can match eol */
+case 10:
+/* rule 10 can match eol */
 YY_RULE_SETUP
-#line 253 "compilers/imcc/imcc.l"
+#line 258 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
-        IMCC_INFO(interp)->line++;
     }
 	YY_BREAK
-case 10:
-/* rule 10 can match eol */
+case 11:
+/* rule 11 can match eol */
 YY_RULE_SETUP
-#line 258 "compilers/imcc/imcc.l"
+#line 262 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->expect_pasm == 2)
             BEGIN(INITIAL);
 
         IMCC_INFO(interp)->expect_pasm = 0;
-        IMCC_INFO(interp)->line++;
 
         return '\n';
     }
 	YY_BREAK
-case 11:
+case 12:
 YY_RULE_SETUP
-#line 268 "compilers/imcc/imcc.l"
+#line 271 "compilers/imcc/imcc.l"
 {
         yy_push_state(cmt5, yyscanner);
     }
 	YY_BREAK
-case 12:
-/* rule 12 can match eol */
+case 13:
+/* rule 13 can match eol */
 YY_RULE_SETUP
-#line 272 "compilers/imcc/imcc.l"
+#line 275 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->expect_pasm == 2)
             BEGIN(INITIAL);
@@ -2984,512 +3010,512 @@
             yy_pop_state(yyscanner);
 
         IMCC_INFO(interp)->expect_pasm = 0;
-        IMCC_INFO(interp)->line++;
 
         return '\n';
     }
 	YY_BREAK
-case 13:
-/* rule 13 can match eol */
+case 14:
+/* rule 14 can match eol */
 YY_RULE_SETUP
-#line 285 "compilers/imcc/imcc.l"
+#line 287 "compilers/imcc/imcc.l"
 {
     /* this is a stand-alone =cut, but we're not in POD mode, so ignore.  */
     IMCC_INFO(interp)->line++;
 }
 	YY_BREAK
-case 14:
+case 15:
 YY_RULE_SETUP
-#line 290 "compilers/imcc/imcc.l"
+#line 292 "compilers/imcc/imcc.l"
 {
+        IMCC_INFO(interp)->line++;
         IMCC_INFO(interp)->in_pod = 1;
         yy_push_state(pod, yyscanner);
     }
 	YY_BREAK
-case 15:
-/* rule 15 can match eol */
+case 16:
+/* rule 16 can match eol */
 YY_RULE_SETUP
-#line 295 "compilers/imcc/imcc.l"
+#line 298 "compilers/imcc/imcc.l"
 {
+        IMCC_INFO(interp)->line++;
         IMCC_INFO(interp)->in_pod = 0;
         yy_pop_state(yyscanner);
-        IMCC_INFO(interp)->line++;
     }
 	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 301 "compilers/imcc/imcc.l"
-{ /*ignore*/ }
-	YY_BREAK
 case 17:
-/* rule 17 can match eol */
 YY_RULE_SETUP
-#line 303 "compilers/imcc/imcc.l"
+#line 304 "compilers/imcc/imcc.l"
 { IMCC_INFO(interp)->line++; }
 	YY_BREAK
 case 18:
+/* rule 18 can match eol */
 YY_RULE_SETUP
-#line 305 "compilers/imcc/imcc.l"
-return TK_LINE;
+#line 306 "compilers/imcc/imcc.l"
+{ /* ignore */ }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 306 "compilers/imcc/imcc.l"
-return TK_FILE;
+#line 308 "compilers/imcc/imcc.l"
+return TK_LINE;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 307 "compilers/imcc/imcc.l"
-return ANNOTATE;
+#line 309 "compilers/imcc/imcc.l"
+return TK_FILE;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 308 "compilers/imcc/imcc.l"
-return LEXICAL;
+#line 310 "compilers/imcc/imcc.l"
+return ANNOTATE;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 309 "compilers/imcc/imcc.l"
-return ARG;
+#line 311 "compilers/imcc/imcc.l"
+return LEXICAL;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 310 "compilers/imcc/imcc.l"
-return SUB;
+#line 312 "compilers/imcc/imcc.l"
+return ARG;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 311 "compilers/imcc/imcc.l"
-return ESUB;
+#line 313 "compilers/imcc/imcc.l"
+return SUB;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 312 "compilers/imcc/imcc.l"
-return PCC_BEGIN;
+#line 314 "compilers/imcc/imcc.l"
+return ESUB;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 313 "compilers/imcc/imcc.l"
-return PCC_END;
+#line 315 "compilers/imcc/imcc.l"
+return PCC_BEGIN;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 314 "compilers/imcc/imcc.l"
-return PCC_CALL;
+#line 316 "compilers/imcc/imcc.l"
+return PCC_END;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 315 "compilers/imcc/imcc.l"
-return NCI_CALL;
+#line 317 "compilers/imcc/imcc.l"
+return PCC_CALL;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 316 "compilers/imcc/imcc.l"
-return METH_CALL;
+#line 318 "compilers/imcc/imcc.l"
+return NCI_CALL;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 317 "compilers/imcc/imcc.l"
-return INVOCANT;
+#line 319 "compilers/imcc/imcc.l"
+return METH_CALL;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 318 "compilers/imcc/imcc.l"
-return PCC_SUB;
+#line 320 "compilers/imcc/imcc.l"
+return INVOCANT;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 319 "compilers/imcc/imcc.l"
-return PCC_BEGIN_RETURN;
+#line 321 "compilers/imcc/imcc.l"
+return PCC_SUB;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 320 "compilers/imcc/imcc.l"
-return PCC_END_RETURN;
+#line 322 "compilers/imcc/imcc.l"
+return PCC_BEGIN_RETURN;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 321 "compilers/imcc/imcc.l"
-return PCC_BEGIN_YIELD;
+#line 323 "compilers/imcc/imcc.l"
+return PCC_END_RETURN;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 322 "compilers/imcc/imcc.l"
-return PCC_END_YIELD;
+#line 324 "compilers/imcc/imcc.l"
+return PCC_BEGIN_YIELD;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 324 "compilers/imcc/imcc.l"
-return METHOD;
+#line 325 "compilers/imcc/imcc.l"
+return PCC_END_YIELD;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 325 "compilers/imcc/imcc.l"
-return MULTI;
+#line 327 "compilers/imcc/imcc.l"
+return METHOD;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 326 "compilers/imcc/imcc.l"
-return MAIN;
+#line 328 "compilers/imcc/imcc.l"
+return MULTI;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 327 "compilers/imcc/imcc.l"
-return LOAD;
+#line 329 "compilers/imcc/imcc.l"
+return MAIN;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 328 "compilers/imcc/imcc.l"
-return INIT;
+#line 330 "compilers/imcc/imcc.l"
+return LOAD;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 329 "compilers/imcc/imcc.l"
-return IMMEDIATE;
+#line 331 "compilers/imcc/imcc.l"
+return INIT;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 330 "compilers/imcc/imcc.l"
-return POSTCOMP;
+#line 332 "compilers/imcc/imcc.l"
+return IMMEDIATE;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 331 "compilers/imcc/imcc.l"
-return ANON;
+#line 333 "compilers/imcc/imcc.l"
+return POSTCOMP;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 332 "compilers/imcc/imcc.l"
-return OUTER;
+#line 334 "compilers/imcc/imcc.l"
+return ANON;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 333 "compilers/imcc/imcc.l"
-return NEED_LEX;
+#line 335 "compilers/imcc/imcc.l"
+return OUTER;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 334 "compilers/imcc/imcc.l"
-return VTABLE_METHOD;
+#line 336 "compilers/imcc/imcc.l"
+return NEED_LEX;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 335 "compilers/imcc/imcc.l"
-return NS_ENTRY;
+#line 337 "compilers/imcc/imcc.l"
+return VTABLE_METHOD;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 336 "compilers/imcc/imcc.l"
-return UNIQUE_REG;
+#line 338 "compilers/imcc/imcc.l"
+return NS_ENTRY;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 337 "compilers/imcc/imcc.l"
-return SUB_INSTANCE_OF;
+#line 339 "compilers/imcc/imcc.l"
+return UNIQUE_REG;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 338 "compilers/imcc/imcc.l"
-return SUBID;
+#line 340 "compilers/imcc/imcc.l"
+return SUB_INSTANCE_OF;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 340 "compilers/imcc/imcc.l"
-return RESULT;
+#line 341 "compilers/imcc/imcc.l"
+return SUBID;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 341 "compilers/imcc/imcc.l"
-return GET_RESULTS;
+#line 343 "compilers/imcc/imcc.l"
+return RESULT;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 342 "compilers/imcc/imcc.l"
-return YIELDT;
+#line 344 "compilers/imcc/imcc.l"
+return GET_RESULTS;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 343 "compilers/imcc/imcc.l"
-return SET_YIELD;
+#line 345 "compilers/imcc/imcc.l"
+return YIELDT;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 344 "compilers/imcc/imcc.l"
-return RETURN;
+#line 346 "compilers/imcc/imcc.l"
+return SET_YIELD;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 345 "compilers/imcc/imcc.l"
-return SET_RETURN;
+#line 347 "compilers/imcc/imcc.l"
+return RETURN;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 346 "compilers/imcc/imcc.l"
-return TAILCALL;
+#line 348 "compilers/imcc/imcc.l"
+return SET_RETURN;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 347 "compilers/imcc/imcc.l"
-return LOADLIB;
+#line 349 "compilers/imcc/imcc.l"
+return TAILCALL;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 349 "compilers/imcc/imcc.l"
-return ADV_FLAT;
+#line 350 "compilers/imcc/imcc.l"
+return LOADLIB;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 350 "compilers/imcc/imcc.l"
-return ADV_SLURPY;
+#line 352 "compilers/imcc/imcc.l"
+return ADV_FLAT;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 351 "compilers/imcc/imcc.l"
-return ADV_OPTIONAL;
+#line 353 "compilers/imcc/imcc.l"
+return ADV_SLURPY;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 352 "compilers/imcc/imcc.l"
-return ADV_OPT_FLAG;
+#line 354 "compilers/imcc/imcc.l"
+return ADV_OPTIONAL;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 353 "compilers/imcc/imcc.l"
-return ADV_NAMED;
+#line 355 "compilers/imcc/imcc.l"
+return ADV_OPT_FLAG;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 354 "compilers/imcc/imcc.l"
-return ADV_ARROW;
+#line 356 "compilers/imcc/imcc.l"
+return ADV_NAMED;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 355 "compilers/imcc/imcc.l"
-return ADV_INVOCANT;
+#line 357 "compilers/imcc/imcc.l"
+return ADV_ARROW;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 356 "compilers/imcc/imcc.l"
-return ADV_CALL_SIG;
+#line 358 "compilers/imcc/imcc.l"
+return ADV_INVOCANT;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 358 "compilers/imcc/imcc.l"
-return NAMESPACE;
+#line 359 "compilers/imcc/imcc.l"
+return ADV_CALL_SIG;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 359 "compilers/imcc/imcc.l"
-return HLL;
+#line 361 "compilers/imcc/imcc.l"
+return NAMESPACE;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 361 "compilers/imcc/imcc.l"
+#line 362 "compilers/imcc/imcc.l"
+return HLL;
+	YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 364 "compilers/imcc/imcc.l"
 return LOCAL;
 	YY_BREAK
-case 70:
+case 71:
 YY_RULE_SETUP
-#line 362 "compilers/imcc/imcc.l"
+#line 365 "compilers/imcc/imcc.l"
 return CONST;
 	YY_BREAK
-case 71:
+case 72:
 YY_RULE_SETUP
-#line 363 "compilers/imcc/imcc.l"
+#line 366 "compilers/imcc/imcc.l"
 return GLOBAL_CONST;
 	YY_BREAK
-case 72:
+case 73:
 YY_RULE_SETUP
-#line 364 "compilers/imcc/imcc.l"
+#line 367 "compilers/imcc/imcc.l"
 return PARAM;
 	YY_BREAK
-case 73:
+case 74:
 YY_RULE_SETUP
-#line 365 "compilers/imcc/imcc.l"
+#line 368 "compilers/imcc/imcc.l"
 return GOTO;
 	YY_BREAK
-case 74:
+case 75:
 YY_RULE_SETUP
-#line 366 "compilers/imcc/imcc.l"
+#line 369 "compilers/imcc/imcc.l"
 return IF;
 	YY_BREAK
-case 75:
+case 76:
 YY_RULE_SETUP
-#line 367 "compilers/imcc/imcc.l"
+#line 370 "compilers/imcc/imcc.l"
 return UNLESS;
 	YY_BREAK
-case 76:
+case 77:
 YY_RULE_SETUP
-#line 368 "compilers/imcc/imcc.l"
+#line 371 "compilers/imcc/imcc.l"
 return PNULL;
 	YY_BREAK
-case 77:
+case 78:
 YY_RULE_SETUP
-#line 369 "compilers/imcc/imcc.l"
+#line 372 "compilers/imcc/imcc.l"
 return INTV;
 	YY_BREAK
-case 78:
+case 79:
 YY_RULE_SETUP
-#line 370 "compilers/imcc/imcc.l"
+#line 373 "compilers/imcc/imcc.l"
 return FLOATV;
 	YY_BREAK
-case 79:
+case 80:
 YY_RULE_SETUP
-#line 372 "compilers/imcc/imcc.l"
+#line 375 "compilers/imcc/imcc.l"
 return PMCV;
 	YY_BREAK
-case 80:
+case 81:
 YY_RULE_SETUP
-#line 373 "compilers/imcc/imcc.l"
+#line 376 "compilers/imcc/imcc.l"
 return STRINGV;
 	YY_BREAK
-case 81:
+case 82:
 YY_RULE_SETUP
-#line 374 "compilers/imcc/imcc.l"
+#line 377 "compilers/imcc/imcc.l"
 return SHIFT_LEFT;
 	YY_BREAK
-case 82:
+case 83:
 YY_RULE_SETUP
-#line 375 "compilers/imcc/imcc.l"
+#line 378 "compilers/imcc/imcc.l"
 return SHIFT_RIGHT;
 	YY_BREAK
-case 83:
+case 84:
 YY_RULE_SETUP
-#line 376 "compilers/imcc/imcc.l"
+#line 379 "compilers/imcc/imcc.l"
 return SHIFT_RIGHT_U;
 	YY_BREAK
-case 84:
+case 85:
 YY_RULE_SETUP
-#line 377 "compilers/imcc/imcc.l"
+#line 380 "compilers/imcc/imcc.l"
 return LOG_AND;
 	YY_BREAK
-case 85:
+case 86:
 YY_RULE_SETUP
-#line 378 "compilers/imcc/imcc.l"
+#line 381 "compilers/imcc/imcc.l"
 return LOG_OR;
 	YY_BREAK
-case 86:
+case 87:
 YY_RULE_SETUP
-#line 379 "compilers/imcc/imcc.l"
+#line 382 "compilers/imcc/imcc.l"
 return LOG_XOR;
 	YY_BREAK
-case 87:
+case 88:
 YY_RULE_SETUP
-#line 380 "compilers/imcc/imcc.l"
+#line 383 "compilers/imcc/imcc.l"
 return RELOP_LT;
 	YY_BREAK
-case 88:
+case 89:
 YY_RULE_SETUP
-#line 381 "compilers/imcc/imcc.l"
+#line 384 "compilers/imcc/imcc.l"
 return RELOP_LTE;
 	YY_BREAK
-case 89:
+case 90:
 YY_RULE_SETUP
-#line 382 "compilers/imcc/imcc.l"
+#line 385 "compilers/imcc/imcc.l"
 return RELOP_GT;
 	YY_BREAK
-case 90:
+case 91:
 YY_RULE_SETUP
-#line 383 "compilers/imcc/imcc.l"
+#line 386 "compilers/imcc/imcc.l"
 return RELOP_GTE;
 	YY_BREAK
-case 91:
+case 92:
 YY_RULE_SETUP
-#line 384 "compilers/imcc/imcc.l"
+#line 387 "compilers/imcc/imcc.l"
 return RELOP_EQ;
 	YY_BREAK
-case 92:
+case 93:
 YY_RULE_SETUP
-#line 385 "compilers/imcc/imcc.l"
+#line 388 "compilers/imcc/imcc.l"
 return RELOP_NE;
 	YY_BREAK
-case 93:
+case 94:
 YY_RULE_SETUP
-#line 386 "compilers/imcc/imcc.l"
+#line 389 "compilers/imcc/imcc.l"
 return POW;
 	YY_BREAK
-case 94:
+case 95:
 YY_RULE_SETUP
-#line 388 "compilers/imcc/imcc.l"
+#line 391 "compilers/imcc/imcc.l"
 return CONCAT;
 	YY_BREAK
-case 95:
+case 96:
 YY_RULE_SETUP
-#line 389 "compilers/imcc/imcc.l"
+#line 392 "compilers/imcc/imcc.l"
 return DOT;
 	YY_BREAK
-case 96:
+case 97:
 YY_RULE_SETUP
-#line 391 "compilers/imcc/imcc.l"
+#line 394 "compilers/imcc/imcc.l"
 return PLUS_ASSIGN;
 	YY_BREAK
-case 97:
+case 98:
 YY_RULE_SETUP
-#line 392 "compilers/imcc/imcc.l"
+#line 395 "compilers/imcc/imcc.l"
 return MINUS_ASSIGN;
 	YY_BREAK
-case 98:
+case 99:
 YY_RULE_SETUP
-#line 393 "compilers/imcc/imcc.l"
+#line 396 "compilers/imcc/imcc.l"
 return MUL_ASSIGN;
 	YY_BREAK
-case 99:
+case 100:
 YY_RULE_SETUP
-#line 394 "compilers/imcc/imcc.l"
+#line 397 "compilers/imcc/imcc.l"
 return DIV_ASSIGN;
 	YY_BREAK
-case 100:
+case 101:
 YY_RULE_SETUP
-#line 395 "compilers/imcc/imcc.l"
+#line 398 "compilers/imcc/imcc.l"
 return MOD_ASSIGN;
 	YY_BREAK
-case 101:
+case 102:
 YY_RULE_SETUP
-#line 396 "compilers/imcc/imcc.l"
+#line 399 "compilers/imcc/imcc.l"
 return FDIV;
 	YY_BREAK
-case 102:
+case 103:
 YY_RULE_SETUP
-#line 397 "compilers/imcc/imcc.l"
+#line 400 "compilers/imcc/imcc.l"
 return FDIV_ASSIGN;
 	YY_BREAK
-case 103:
+case 104:
 YY_RULE_SETUP
-#line 398 "compilers/imcc/imcc.l"
+#line 401 "compilers/imcc/imcc.l"
 return BAND_ASSIGN;
 	YY_BREAK
-case 104:
+case 105:
 YY_RULE_SETUP
-#line 399 "compilers/imcc/imcc.l"
+#line 402 "compilers/imcc/imcc.l"
 return BOR_ASSIGN;
 	YY_BREAK
-case 105:
+case 106:
 YY_RULE_SETUP
-#line 400 "compilers/imcc/imcc.l"
+#line 403 "compilers/imcc/imcc.l"
 return BXOR_ASSIGN;
 	YY_BREAK
-case 106:
+case 107:
 YY_RULE_SETUP
-#line 401 "compilers/imcc/imcc.l"
+#line 404 "compilers/imcc/imcc.l"
 return SHR_ASSIGN;
 	YY_BREAK
-case 107:
+case 108:
 YY_RULE_SETUP
-#line 402 "compilers/imcc/imcc.l"
+#line 405 "compilers/imcc/imcc.l"
 return SHL_ASSIGN;
 	YY_BREAK
-case 108:
+case 109:
 YY_RULE_SETUP
-#line 403 "compilers/imcc/imcc.l"
+#line 406 "compilers/imcc/imcc.l"
 return SHR_U_ASSIGN;
 	YY_BREAK
-case 109:
+case 110:
 YY_RULE_SETUP
-#line 404 "compilers/imcc/imcc.l"
+#line 407 "compilers/imcc/imcc.l"
 return CONCAT_ASSIGN;
 	YY_BREAK
-case 110:
+case 111:
 YY_RULE_SETUP
-#line 406 "compilers/imcc/imcc.l"
+#line 409 "compilers/imcc/imcc.l"
 {
         char *macro_name   = NULL;
         int   start_cond   = YY_START;
@@ -3533,16 +3559,18 @@
         return MACRO;
     }
 	YY_BREAK
-case 111:
+case 112:
 YY_RULE_SETUP
-#line 449 "compilers/imcc/imcc.l"
+#line 452 "compilers/imcc/imcc.l"
 {
+        /* the initial whitespace catcher misses this one */
+        IMCC_INFO(interp)->line++;
         return read_macro(valp, interp, yyscanner);
     }
 	YY_BREAK
-case 112:
+case 113:
 YY_RULE_SETUP
-#line 453 "compilers/imcc/imcc.l"
+#line 458 "compilers/imcc/imcc.l"
 {
         const int c = yylex(valp,yyscanner,interp);
 
@@ -3555,9 +3583,9 @@
         include_file(interp, yytext + 1, yyscanner);
     }
 	YY_BREAK
-case 113:
+case 114:
 YY_RULE_SETUP
-#line 465 "compilers/imcc/imcc.l"
+#line 470 "compilers/imcc/imcc.l"
 {
         if (valp) {
             char *label;
@@ -3580,11 +3608,10 @@
         return LABEL;
     }
 	YY_BREAK
-case 114:
+case 115:
 YY_RULE_SETUP
-#line 487 "compilers/imcc/imcc.l"
+#line 492 "compilers/imcc/imcc.l"
 {
-
         if (valp) {
             char *label;
             size_t len;
@@ -3604,14 +3631,14 @@
         return IDENTIFIER;
      }
 	YY_BREAK
-case 115:
+case 116:
 YY_RULE_SETUP
-#line 508 "compilers/imcc/imcc.l"
+#line 512 "compilers/imcc/imcc.l"
 return COMMA;
 	YY_BREAK
-case 116:
+case 117:
 YY_RULE_SETUP
-#line 510 "compilers/imcc/imcc.l"
+#line 514 "compilers/imcc/imcc.l"
 {
         /* trim last ':' */
         YYCHOP();
@@ -3622,9 +3649,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 117:
+case 118:
 YY_RULE_SETUP
-#line 520 "compilers/imcc/imcc.l"
+#line 524 "compilers/imcc/imcc.l"
 {
         char   * const macro_name = mem_sys_strdup(yytext + 1);
         int failed = expand_macro(interp, macro_name, yyscanner);
@@ -3635,34 +3662,34 @@
         }
     }
 	YY_BREAK
-case 118:
-YY_RULE_SETUP
-#line 532 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, FLOATC);
-	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 533 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, INTC);
+#line 536 "compilers/imcc/imcc.l"
+DUP_AND_RET(valp, FLOATC);
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 534 "compilers/imcc/imcc.l"
+#line 537 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 535 "compilers/imcc/imcc.l"
+#line 538 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 536 "compilers/imcc/imcc.l"
+#line 539 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 538 "compilers/imcc/imcc.l"
+#line 540 "compilers/imcc/imcc.l"
+DUP_AND_RET(valp, INTC);
+	YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 542 "compilers/imcc/imcc.l"
 {
         valp->s = mem_sys_strdup(yytext);
 
@@ -3673,18 +3700,18 @@
         return STRINGC;
     }
 	YY_BREAK
-case 124:
+case 125:
 YY_RULE_SETUP
-#line 548 "compilers/imcc/imcc.l"
+#line 552 "compilers/imcc/imcc.l"
 {
         valp->s = mem_sys_strdup(yytext);
 
         return STRINGC;
     }
 	YY_BREAK
-case 125:
+case 126:
 YY_RULE_SETUP
-#line 554 "compilers/imcc/imcc.l"
+#line 558 "compilers/imcc/imcc.l"
 {
         macro_frame_t *frame;
 
@@ -3713,9 +3740,9 @@
         yy_push_state(heredoc1, yyscanner);
     }
 	YY_BREAK
-case 126:
+case 127:
 YY_RULE_SETUP
-#line 582 "compilers/imcc/imcc.l"
+#line 586 "compilers/imcc/imcc.l"
 {
         /* charset:"..." */
         valp->s = mem_sys_strdup(yytext);
@@ -3724,9 +3751,9 @@
         return USTRINGC;
     }
 	YY_BREAK
-case 127:
+case 128:
 YY_RULE_SETUP
-#line 590 "compilers/imcc/imcc.l"
+#line 594 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3735,9 +3762,9 @@
         return IREG;
     }
 	YY_BREAK
-case 128:
+case 129:
 YY_RULE_SETUP
-#line 598 "compilers/imcc/imcc.l"
+#line 602 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3746,9 +3773,9 @@
         return NREG;
     }
 	YY_BREAK
-case 129:
+case 130:
 YY_RULE_SETUP
-#line 606 "compilers/imcc/imcc.l"
+#line 610 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3757,9 +3784,9 @@
         return SREG;
     }
 	YY_BREAK
-case 130:
+case 131:
 YY_RULE_SETUP
-#line 614 "compilers/imcc/imcc.l"
+#line 618 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3768,17 +3795,17 @@
         return PREG;
     }
 	YY_BREAK
-case 131:
+case 132:
 YY_RULE_SETUP
-#line 622 "compilers/imcc/imcc.l"
+#line 626 "compilers/imcc/imcc.l"
 {
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
             "'%s' is not a valid register name", yytext);
     }
 	YY_BREAK
-case 132:
+case 133:
 YY_RULE_SETUP
-#line 627 "compilers/imcc/imcc.l"
+#line 631 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->state->pasm_file == 0)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3790,52 +3817,26 @@
         return REG;
     }
 	YY_BREAK
-case 133:
+case 134:
 YY_RULE_SETUP
-#line 638 "compilers/imcc/imcc.l"
-{
-        if (!IMCC_INFO(interp)->is_def) {
-            SymReg *r = find_sym(interp, yytext);
-
-            if (r && (r->type & (VTIDENTIFIER|VT_CONSTP))) {
-                valp->sr = r;
-                return VAR;
-            }
-
-            if (IMCC_INFO(interp)->cur_unit
-            &&  IMCC_INFO(interp)->cur_unit->instructions
-            && (r = IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
-            &&  r->pcc_sub)
-            {
-                if (((r->pcc_sub->pragma & P_METHOD)
-                ||   (IMCC_INFO(interp)->cur_unit->is_vtable_method))
-                &&   !strcmp(yytext, "self")) {
-                    valp->sr = mk_ident(interp, "self", 'P');
-                    IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
-                    return VAR;
-                }
-            }
-        }
-
-        valp->s = mem_sys_strdup(yytext);
-        return (!IMCC_INFO(interp)->is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
-    }
+#line 643 "compilers/imcc/imcc.l"
+{ return handle_identifier(interp, valp, yytext); }
 	YY_BREAK
-case 134:
+case 135:
 YY_RULE_SETUP
-#line 667 "compilers/imcc/imcc.l"
+#line 645 "compilers/imcc/imcc.l"
 /* skip */;
 	YY_BREAK
-case 135:
+case 136:
 YY_RULE_SETUP
-#line 669 "compilers/imcc/imcc.l"
+#line 647 "compilers/imcc/imcc.l"
 {
         /* catch all except for state macro */
         return yytext[0];
     }
 	YY_BREAK
 case YY_STATE_EOF(emit):
-#line 674 "compilers/imcc/imcc.l"
+#line 652 "compilers/imcc/imcc.l"
 {
         BEGIN(INITIAL);
 
@@ -3848,31 +3849,34 @@
     }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 685 "compilers/imcc/imcc.l"
+#line 663 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
-case 136:
-YY_RULE_SETUP
-#line 687 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, ENDM);
-	YY_BREAK
 case 137:
-/* rule 137 can match eol */
 YY_RULE_SETUP
-#line 689 "compilers/imcc/imcc.l"
+#line 665 "compilers/imcc/imcc.l"
 {
+        /* the initial whitespace catcher misses this one */
         IMCC_INFO(interp)->line++;
+        DUP_AND_RET(valp, ENDM);
+}
+	YY_BREAK
+case 138:
+/* rule 138 can match eol */
+YY_RULE_SETUP
+#line 671 "compilers/imcc/imcc.l"
+{
         DUP_AND_RET(valp, '\n');
     }
 	YY_BREAK
-case 138:
+case 139:
 YY_RULE_SETUP
-#line 694 "compilers/imcc/imcc.l"
+#line 675 "compilers/imcc/imcc.l"
 return LABEL;
 	YY_BREAK
-case 139:
+case 140:
 YY_RULE_SETUP
-#line 696 "compilers/imcc/imcc.l"
+#line 677 "compilers/imcc/imcc.l"
 {
 
         if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3897,9 +3901,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 140:
+case 141:
 YY_RULE_SETUP
-#line 720 "compilers/imcc/imcc.l"
+#line 701 "compilers/imcc/imcc.l"
 {
     if (valp) {
         if (!IMCC_INFO(interp)->cur_macro_name) {
@@ -3928,51 +3932,46 @@
     return IDENTIFIER;
 }
 	YY_BREAK
-case 141:
-YY_RULE_SETUP
-#line 748 "compilers/imcc/imcc.l"
-/* skip leading ws */;
-	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 749 "compilers/imcc/imcc.l"
+#line 729 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ' ');
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 750 "compilers/imcc/imcc.l"
+#line 730 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 751 "compilers/imcc/imcc.l"
+#line 731 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 752 "compilers/imcc/imcc.l"
+#line 732 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, IDENTIFIER);
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 753 "compilers/imcc/imcc.l"
+#line 733 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, MACRO);
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 754 "compilers/imcc/imcc.l"
+#line 734 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, yytext[0]);
 	YY_BREAK
 case YY_STATE_EOF(macro):
-#line 755 "compilers/imcc/imcc.l"
+#line 735 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 757 "compilers/imcc/imcc.l"
+#line 737 "compilers/imcc/imcc.l"
 ECHO;
 	YY_BREAK
-#line 3976 "compilers/imcc/imclexer.c"
+#line 3975 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -4275,7 +4274,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 1062 )
+			if ( yy_current_state >= 1090 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4304,11 +4303,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 1062 )
+		if ( yy_current_state >= 1090 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 1061);
+	yy_is_jam = (yy_current_state == 1089);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5174,7 +5173,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 757 "compilers/imcc/imcc.l"
+#line 737 "compilers/imcc/imcc.l"
 
 
 
@@ -5236,6 +5235,9 @@
     frame->s.next             = (parser_state_t *)IMCC_INFO(interp)->frames;
     IMCC_INFO(interp)->frames = frame;
 
+    /* start at the effective *starting line* of the macro */
+    IMCC_INFO(interp)->line   = frame->s.line - 2;
+
     yy_scan_string(expansion,yyscanner);
 }
 
@@ -5491,9 +5493,6 @@
     IMCC_INFO(interp)->macro_buffer   = NULL;
     IMCC_INFO(interp)->cur_macro_name = NULL;
 
-    /* the ENDM rule doesn't set the line number */
-    IMCC_INFO(interp)->line--;
-
     return MACRO;
 }
 
@@ -5654,8 +5653,6 @@
             }
         }
 
-        /* let the normal EOF rules match line numbers */
-        IMCC_INFO(interp)->line = m->line - 1;
         scan_string(frame, m->expansion, yyscanner);
 
         return 1;
@@ -5710,7 +5707,8 @@
     IMCC_INFO(interp)->frames = frame;
     IMCC_INFO(interp)->state  = (parser_state_t *)IMCC_INFO(interp)->frames;
 
-    IMCC_INFO(interp)->line   = 1;
+    /* let the start of line rule increment this to 1 */
+    IMCC_INFO(interp)->line   = 0;
 
     yy_switch_to_buffer(yy_create_buffer(file,YY_BUF_SIZE,yyscanner),yyscanner);
 }
@@ -5889,6 +5887,36 @@
     return yyg->yy_hold_char == '\0';
 }
 
+static int
+handle_identifier(PARROT_INTERP, YYSTYPE *valp, const char *text)
+{
+    if (!IMCC_INFO(interp)->is_def) {
+        SymReg *r = find_sym(interp, text);
+
+        if (r && (r->type & (VTIDENTIFIER|VT_CONSTP))) {
+            valp->sr = r;
+            return VAR;
+        }
+
+        if (IMCC_INFO(interp)->cur_unit
+        &&  IMCC_INFO(interp)->cur_unit->instructions
+        && (r = IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
+        &&  r->pcc_sub)
+        {
+            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');
+                IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
+                return VAR;
+            }
+        }
+    }
+
+    valp->s = mem_sys_strdup(text);
+    return (!IMCC_INFO(interp)->is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
+}
+
 /*
  * Local variables:
  *   c-file-style: "parrot"

Modified: branches/avl_string_cache/compilers/imcc/imcparser.c
==============================================================================
--- branches/avl_string_cache/compilers/imcc/imcparser.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/imcparser.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1184,125 +1184,248 @@
    enum yytokentype {
      LOW_PREC = 258,
      PARAM = 259,
-     HLL = 260,
-     TK_LINE = 261,
-     TK_FILE = 262,
-     GOTO = 263,
-     ARG = 264,
-     IF = 265,
-     UNLESS = 266,
-     PNULL = 267,
-     SET_RETURN = 268,
-     SET_YIELD = 269,
-     ADV_FLAT = 270,
-     ADV_SLURPY = 271,
-     ADV_OPTIONAL = 272,
-     ADV_OPT_FLAG = 273,
-     ADV_NAMED = 274,
-     ADV_ARROW = 275,
-     NEW = 276,
-     ADV_INVOCANT = 277,
-     ADV_CALL_SIG = 278,
-     NAMESPACE = 279,
-     DOT_METHOD = 280,
-     SUB = 281,
-     SYM = 282,
-     LOCAL = 283,
-     LEXICAL = 284,
-     CONST = 285,
-     ANNOTATE = 286,
-     INC = 287,
-     DEC = 288,
-     GLOBAL_CONST = 289,
-     PLUS_ASSIGN = 290,
-     MINUS_ASSIGN = 291,
-     MUL_ASSIGN = 292,
-     DIV_ASSIGN = 293,
-     CONCAT_ASSIGN = 294,
-     BAND_ASSIGN = 295,
-     BOR_ASSIGN = 296,
-     BXOR_ASSIGN = 297,
-     FDIV = 298,
-     FDIV_ASSIGN = 299,
-     MOD_ASSIGN = 300,
-     SHR_ASSIGN = 301,
-     SHL_ASSIGN = 302,
-     SHR_U_ASSIGN = 303,
-     SHIFT_LEFT = 304,
-     SHIFT_RIGHT = 305,
-     INTV = 306,
-     FLOATV = 307,
-     STRINGV = 308,
-     PMCV = 309,
-     LOG_XOR = 310,
-     RELOP_EQ = 311,
-     RELOP_NE = 312,
-     RELOP_GT = 313,
-     RELOP_GTE = 314,
-     RELOP_LT = 315,
-     RELOP_LTE = 316,
-     RESULT = 317,
-     RETURN = 318,
-     TAILCALL = 319,
-     YIELDT = 320,
-     GET_RESULTS = 321,
-     POW = 322,
-     SHIFT_RIGHT_U = 323,
-     LOG_AND = 324,
-     LOG_OR = 325,
-     COMMA = 326,
-     ESUB = 327,
-     DOTDOT = 328,
-     PCC_BEGIN = 329,
-     PCC_END = 330,
-     PCC_CALL = 331,
-     PCC_SUB = 332,
-     PCC_BEGIN_RETURN = 333,
-     PCC_END_RETURN = 334,
-     PCC_BEGIN_YIELD = 335,
-     PCC_END_YIELD = 336,
-     NCI_CALL = 337,
-     METH_CALL = 338,
-     INVOCANT = 339,
-     MAIN = 340,
-     LOAD = 341,
-     INIT = 342,
-     IMMEDIATE = 343,
-     POSTCOMP = 344,
-     METHOD = 345,
-     ANON = 346,
-     OUTER = 347,
-     NEED_LEX = 348,
-     MULTI = 349,
-     VTABLE_METHOD = 350,
-     LOADLIB = 351,
-     SUB_INSTANCE_OF = 352,
-     SUBID = 353,
-     NS_ENTRY = 354,
-     UNIQUE_REG = 355,
-     LABEL = 356,
-     EMIT = 357,
-     EOM = 358,
-     IREG = 359,
-     NREG = 360,
-     SREG = 361,
-     PREG = 362,
-     IDENTIFIER = 363,
-     REG = 364,
-     MACRO = 365,
-     ENDM = 366,
-     STRINGC = 367,
-     INTC = 368,
-     FLOATC = 369,
-     USTRINGC = 370,
-     PARROT_OP = 371,
-     VAR = 372,
-     LINECOMMENT = 373,
-     FILECOMMENT = 374,
-     DOT = 375,
-     CONCAT = 376
+     SOL = 260,
+     HLL = 261,
+     TK_LINE = 262,
+     TK_FILE = 263,
+     GOTO = 264,
+     ARG = 265,
+     IF = 266,
+     UNLESS = 267,
+     PNULL = 268,
+     SET_RETURN = 269,
+     SET_YIELD = 270,
+     ADV_FLAT = 271,
+     ADV_SLURPY = 272,
+     ADV_OPTIONAL = 273,
+     ADV_OPT_FLAG = 274,
+     ADV_NAMED = 275,
+     ADV_ARROW = 276,
+     NEW = 277,
+     ADV_INVOCANT = 278,
+     ADV_CALL_SIG = 279,
+     NAMESPACE = 280,
+     DOT_METHOD = 281,
+     SUB = 282,
+     SYM = 283,
+     LOCAL = 284,
+     LEXICAL = 285,
+     CONST = 286,
+     ANNOTATE = 287,
+     INC = 288,
+     DEC = 289,
+     GLOBAL_CONST = 290,
+     PLUS_ASSIGN = 291,
+     MINUS_ASSIGN = 292,
+     MUL_ASSIGN = 293,
+     DIV_ASSIGN = 294,
+     CONCAT_ASSIGN = 295,
+     BAND_ASSIGN = 296,
+     BOR_ASSIGN = 297,
+     BXOR_ASSIGN = 298,
+     FDIV = 299,
+     FDIV_ASSIGN = 300,
+     MOD_ASSIGN = 301,
+     SHR_ASSIGN = 302,
+     SHL_ASSIGN = 303,
+     SHR_U_ASSIGN = 304,
+     SHIFT_LEFT = 305,
+     SHIFT_RIGHT = 306,
+     INTV = 307,
+     FLOATV = 308,
+     STRINGV = 309,
+     PMCV = 310,
+     LOG_XOR = 311,
+     RELOP_EQ = 312,
+     RELOP_NE = 313,
+     RELOP_GT = 314,
+     RELOP_GTE = 315,
+     RELOP_LT = 316,
+     RELOP_LTE = 317,
+     RESULT = 318,
+     RETURN = 319,
+     TAILCALL = 320,
+     YIELDT = 321,
+     GET_RESULTS = 322,
+     POW = 323,
+     SHIFT_RIGHT_U = 324,
+     LOG_AND = 325,
+     LOG_OR = 326,
+     COMMA = 327,
+     ESUB = 328,
+     DOTDOT = 329,
+     PCC_BEGIN = 330,
+     PCC_END = 331,
+     PCC_CALL = 332,
+     PCC_SUB = 333,
+     PCC_BEGIN_RETURN = 334,
+     PCC_END_RETURN = 335,
+     PCC_BEGIN_YIELD = 336,
+     PCC_END_YIELD = 337,
+     NCI_CALL = 338,
+     METH_CALL = 339,
+     INVOCANT = 340,
+     MAIN = 341,
+     LOAD = 342,
+     INIT = 343,
+     IMMEDIATE = 344,
+     POSTCOMP = 345,
+     METHOD = 346,
+     ANON = 347,
+     OUTER = 348,
+     NEED_LEX = 349,
+     MULTI = 350,
+     VTABLE_METHOD = 351,
+     LOADLIB = 352,
+     SUB_INSTANCE_OF = 353,
+     SUBID = 354,
+     NS_ENTRY = 355,
+     UNIQUE_REG = 356,
+     LABEL = 357,
+     EMIT = 358,
+     EOM = 359,
+     IREG = 360,
+     NREG = 361,
+     SREG = 362,
+     PREG = 363,
+     IDENTIFIER = 364,
+     REG = 365,
+     MACRO = 366,
+     ENDM = 367,
+     STRINGC = 368,
+     INTC = 369,
+     FLOATC = 370,
+     USTRINGC = 371,
+     PARROT_OP = 372,
+     VAR = 373,
+     LINECOMMENT = 374,
+     FILECOMMENT = 375,
+     DOT = 376,
+     CONCAT = 377
    };
 #endif
+/* Tokens.  */
+#define LOW_PREC 258
+#define PARAM 259
+#define SOL 260
+#define HLL 261
+#define TK_LINE 262
+#define TK_FILE 263
+#define GOTO 264
+#define ARG 265
+#define IF 266
+#define UNLESS 267
+#define PNULL 268
+#define SET_RETURN 269
+#define SET_YIELD 270
+#define ADV_FLAT 271
+#define ADV_SLURPY 272
+#define ADV_OPTIONAL 273
+#define ADV_OPT_FLAG 274
+#define ADV_NAMED 275
+#define ADV_ARROW 276
+#define NEW 277
+#define ADV_INVOCANT 278
+#define ADV_CALL_SIG 279
+#define NAMESPACE 280
+#define DOT_METHOD 281
+#define SUB 282
+#define SYM 283
+#define LOCAL 284
+#define LEXICAL 285
+#define CONST 286
+#define ANNOTATE 287
+#define INC 288
+#define DEC 289
+#define GLOBAL_CONST 290
+#define PLUS_ASSIGN 291
+#define MINUS_ASSIGN 292
+#define MUL_ASSIGN 293
+#define DIV_ASSIGN 294
+#define CONCAT_ASSIGN 295
+#define BAND_ASSIGN 296
+#define BOR_ASSIGN 297
+#define BXOR_ASSIGN 298
+#define FDIV 299
+#define FDIV_ASSIGN 300
+#define MOD_ASSIGN 301
+#define SHR_ASSIGN 302
+#define SHL_ASSIGN 303
+#define SHR_U_ASSIGN 304
+#define SHIFT_LEFT 305
+#define SHIFT_RIGHT 306
+#define INTV 307
+#define FLOATV 308
+#define STRINGV 309
+#define PMCV 310
+#define LOG_XOR 311
+#define RELOP_EQ 312
+#define RELOP_NE 313
+#define RELOP_GT 314
+#define RELOP_GTE 315
+#define RELOP_LT 316
+#define RELOP_LTE 317
+#define RESULT 318
+#define RETURN 319
+#define TAILCALL 320
+#define YIELDT 321
+#define GET_RESULTS 322
+#define POW 323
+#define SHIFT_RIGHT_U 324
+#define LOG_AND 325
+#define LOG_OR 326
+#define COMMA 327
+#define ESUB 328
+#define DOTDOT 329
+#define PCC_BEGIN 330
+#define PCC_END 331
+#define PCC_CALL 332
+#define PCC_SUB 333
+#define PCC_BEGIN_RETURN 334
+#define PCC_END_RETURN 335
+#define PCC_BEGIN_YIELD 336
+#define PCC_END_YIELD 337
+#define NCI_CALL 338
+#define METH_CALL 339
+#define INVOCANT 340
+#define MAIN 341
+#define LOAD 342
+#define INIT 343
+#define IMMEDIATE 344
+#define POSTCOMP 345
+#define METHOD 346
+#define ANON 347
+#define OUTER 348
+#define NEED_LEX 349
+#define MULTI 350
+#define VTABLE_METHOD 351
+#define LOADLIB 352
+#define SUB_INSTANCE_OF 353
+#define SUBID 354
+#define NS_ENTRY 355
+#define UNIQUE_REG 356
+#define LABEL 357
+#define EMIT 358
+#define EOM 359
+#define IREG 360
+#define NREG 361
+#define SREG 362
+#define PREG 363
+#define IDENTIFIER 364
+#define REG 365
+#define MACRO 366
+#define ENDM 367
+#define STRINGC 368
+#define INTC 369
+#define FLOATC 370
+#define USTRINGC 371
+#define PARROT_OP 372
+#define VAR 373
+#define LINECOMMENT 374
+#define FILECOMMENT 375
+#define DOT 376
+#define CONCAT 377
+
 
 
 
@@ -1310,7 +1433,7 @@
 typedef union YYSTYPE
 {
 
-/* Line 222 of yacc.c  */
+/* Line 214 of yacc.c  */
 #line 1075 "compilers/imcc/imcc.y"
 
     IdList * idlist;
@@ -1321,8 +1444,8 @@
 
 
 
-/* Line 222 of yacc.c  */
-#line 1315 "compilers/imcc/imcparser.c"
+/* Line 214 of yacc.c  */
+#line 1438 "compilers/imcc/imcparser.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -1334,7 +1457,7 @@
 
 
 /* Line 264 of yacc.c  */
-#line 1327 "compilers/imcc/imcparser.c"
+#line 1450 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1549,10 +1672,10 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  31
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   659
+#define YYLAST   686
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  139
+#define YYNTOKENS  140
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  126
 /* YYNRULES -- Number of rules.  */
@@ -1562,7 +1685,7 @@
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   376
+#define YYMAXUTOK   377
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -1573,16 +1696,16 @@
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        4,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   129,     2,     2,     2,   135,   136,     2,
-     126,   127,   133,   132,     2,   131,     2,   134,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,   138,
-       2,   123,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   130,     2,     2,     2,   136,   137,     2,
+     127,   128,   134,   133,     2,   132,     2,   135,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,   139,
+       2,   124,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   124,     2,   125,     2,     2,     2,     2,     2,     2,
+       2,   125,     2,   126,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     128,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,   137,     2,   130,     2,     2,     2,
+     129,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,   138,     2,   131,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1607,7 +1730,7 @@
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
       96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122
+     116,   117,   118,   119,   120,   121,   122,   123
 };
 
 #if YYDEBUG
@@ -1654,102 +1777,102 @@
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     140,     0,    -1,   141,    -1,   142,    -1,   141,   142,    -1,
-     162,    -1,   147,    -1,   164,    -1,   159,    -1,   111,     4,
-      -1,   143,    -1,   144,    -1,     4,    -1,   146,     4,    -1,
-      97,   113,     4,    -1,     7,   114,    72,   113,     4,    -1,
-       8,   113,     4,    -1,    32,   113,    72,   264,    -1,     6,
-     113,    -1,    -1,    31,   148,   223,   109,   123,   264,    -1,
-      -1,    31,   150,   114,   255,   123,   152,    -1,    -1,    31,
-     151,   113,   255,   123,   152,    -1,   113,    -1,   116,    -1,
-     154,    -1,   153,   154,    -1,   212,   155,     4,    -1,   111,
-       4,    -1,   120,    -1,   119,    -1,   162,    -1,   149,    -1,
-     143,    -1,    -1,   156,   117,   158,    -1,    -1,    78,   157,
-     186,   102,    -1,    13,   256,    -1,    30,   113,    72,   110,
-      -1,    -1,   249,    -1,    -1,   103,   160,   161,   104,    -1,
-      -1,   153,    -1,    25,   163,     4,    -1,   124,   257,   125,
-      -1,   124,   125,    -1,    -1,    -1,    -1,    27,   165,   252,
-     166,   186,     4,   167,   168,   181,    73,    -1,    -1,     4,
-      -1,   168,   169,     4,    -1,    -1,     5,   170,   171,    -1,
-     223,   109,   195,    -1,    95,   126,   179,   127,    -1,    93,
-     126,   113,   127,    -1,    93,   126,   109,   127,    -1,    96,
-      -1,    96,   126,   113,   127,    -1,    91,    -1,    91,   126,
-     152,   127,    -1,   100,    -1,   100,   126,   152,   127,    -1,
-      98,   126,   113,   127,    -1,    99,    -1,    99,   126,   152,
-     127,    -1,    -1,   179,    72,   180,    -1,   180,    -1,    52,
-      -1,    53,    -1,    55,    -1,    54,    -1,   109,    -1,   113,
-      -1,   124,   257,   125,    -1,    -1,   209,    -1,    -1,    75,
-       4,   183,   190,   185,   189,   184,   192,    76,    -1,    -1,
-     214,     4,    -1,    -1,    85,   256,     4,    -1,    -1,   187,
-      -1,   188,    -1,   187,   188,    -1,    87,    -1,    88,    -1,
-      86,    -1,    89,    -1,    90,    -1,    92,    -1,    94,    -1,
-     172,    -1,   173,    -1,   174,    -1,   175,    -1,   176,    -1,
-     177,    -1,   178,    -1,    77,   256,    72,   256,     4,    -1,
-      77,   256,     4,    -1,    83,   256,     4,    -1,    84,   248,
-       4,    -1,    84,   113,     4,    -1,    84,   248,    72,   256,
-       4,    -1,    84,   113,    72,   256,     4,    -1,    -1,   190,
-     191,     4,    -1,    10,   238,    -1,    -1,   192,   193,     4,
-      -1,    63,   248,   195,    -1,    -1,    29,   194,   223,   217,
-      -1,    -1,   195,   196,    -1,    17,    -1,    18,    -1,    19,
-      -1,    20,    -1,    20,   126,   113,   127,    -1,    20,   126,
-     116,   127,    -1,   101,    -1,    24,    -1,    -1,    79,     4,
-     198,   201,    80,    -1,   205,    -1,    -1,    81,     4,   200,
-     202,    82,    -1,    -1,   201,     4,    -1,   201,   203,     4,
-      -1,    -1,   202,     4,    -1,   202,   204,     4,    -1,    14,
-     256,   239,    -1,    15,   256,   239,    -1,    -1,   207,   126,
-     206,   208,   127,    -1,    64,    -1,    66,    -1,    -1,   238,
-      -1,   113,    21,   256,    -1,   208,    72,   238,    -1,   208,
-      72,   113,    21,   256,    -1,   211,    -1,   209,   211,    -1,
-      -1,   210,   215,    -1,   111,     4,    -1,   120,    -1,   119,
-      -1,   144,    -1,   145,    -1,    -1,   213,    -1,   213,   214,
-      -1,   214,    -1,   102,    -1,   212,   219,     4,    -1,     1,
-       4,    -1,   217,    -1,   216,    72,   217,    -1,   109,   218,
-      -1,    -1,   101,    -1,   225,    -1,   243,    -1,    -1,    29,
-     220,   223,   216,    -1,    30,   113,    72,   248,    -1,    30,
-     116,    72,   248,    -1,    -1,    31,   221,   223,   109,   123,
-     264,    -1,   149,    -1,    -1,    35,   222,   223,   109,   123,
-     264,    -1,    65,   235,    -1,     9,   254,    -1,   117,   249,
-      -1,    13,   256,    -1,   235,    -1,   182,    -1,   197,    -1,
-     199,    -1,    -1,    52,    -1,    53,    -1,    54,    -1,    55,
-      -1,   109,    -1,   248,   123,   256,    -1,   248,   123,   227,
-     256,    -1,   248,   123,   256,   228,   256,    -1,   248,   123,
-     256,   124,   257,   125,    -1,   248,   124,   257,   125,   123,
-     256,    -1,   248,   123,   128,   224,   124,   257,   125,    -1,
-     248,   123,   235,    -1,    -1,   126,   226,   242,   127,   123,
-     234,   126,   237,   127,    -1,   229,    -1,   231,    -1,   233,
-      -1,   248,   123,    13,    -1,   129,    -1,   130,    -1,   131,
-      -1,   131,    -1,   132,    -1,   133,    -1,   134,    -1,   135,
-      -1,    44,    -1,    68,    -1,   122,    -1,    57,    -1,    58,
-      -1,    59,    -1,    60,    -1,    61,    -1,    62,    -1,    50,
-      -1,    51,    -1,    69,    -1,    70,    -1,    71,    -1,    56,
-      -1,   136,    -1,   137,    -1,   130,    -1,    -1,    67,   230,
-     126,   242,   127,    -1,   248,   232,   256,    -1,    36,    -1,
-      37,    -1,    38,    -1,    39,    -1,    46,    -1,    45,    -1,
-      40,    -1,    41,    -1,    42,    -1,    43,    -1,    47,    -1,
-      48,    -1,    49,    -1,   248,   123,   117,   158,    -1,   109,
-      -1,   113,    -1,   116,    -1,   248,    -1,   248,   121,   253,
-      -1,   248,   121,   116,    -1,   248,   121,   113,    -1,   248,
-     121,   248,    -1,    -1,   234,   236,   126,   237,   127,    -1,
-      -1,   237,    72,   238,    -1,   238,    -1,   237,    72,   113,
-      21,   256,    -1,   256,    21,   256,    -1,   113,    21,   256,
-      -1,   256,   239,    -1,    -1,   239,   240,    -1,    16,    -1,
-      20,    -1,    24,    -1,    20,   126,   116,   127,    -1,    20,
-     126,   113,   127,    -1,   248,   195,    -1,   242,    72,   241,
-      -1,   242,    72,   113,    21,   248,    -1,   241,    -1,   113,
-      21,   248,    -1,    -1,   245,    -1,   244,    -1,    12,   256,
-     247,   256,     9,   254,    -1,    12,    13,   256,     9,   254,
-      -1,    12,   256,   246,   254,    -1,    11,   256,   246,   254,
-      -1,    11,   256,   247,   256,     9,   254,    -1,    11,    13,
-     256,     9,   254,    -1,    72,    -1,     9,    -1,    57,    -1,
-      58,    -1,    59,    -1,    60,    -1,    61,    -1,    62,    -1,
-     118,    -1,   263,    -1,    -1,   250,    -1,   250,    72,   251,
-      -1,   251,    -1,   255,    -1,   248,   124,   257,   125,    -1,
-     124,   259,   125,    -1,   253,    -1,   113,    -1,   116,    -1,
-     109,    -1,   117,    -1,   109,    -1,   117,    -1,   254,    -1,
-     256,    -1,   248,    -1,   264,    -1,    -1,   258,   261,    -1,
-      -1,   260,   261,    -1,   262,    -1,   261,   138,   262,    -1,
-     256,    -1,   105,    -1,   106,    -1,   107,    -1,   108,    -1,
-     110,    -1,   114,    -1,   115,    -1,   113,    -1,   116,    -1
+     141,     0,    -1,   142,    -1,   143,    -1,   142,   143,    -1,
+     163,    -1,   148,    -1,   165,    -1,   160,    -1,   112,     4,
+      -1,   144,    -1,   145,    -1,     4,    -1,   147,     4,    -1,
+      98,   114,     4,    -1,     8,   115,    73,   114,     4,    -1,
+       9,   114,     4,    -1,    33,   114,    73,   265,    -1,     7,
+     114,    -1,    -1,    32,   149,   224,   110,   124,   265,    -1,
+      -1,    32,   151,   115,   256,   124,   153,    -1,    -1,    32,
+     152,   114,   256,   124,   153,    -1,   114,    -1,   117,    -1,
+     155,    -1,   154,   155,    -1,   213,   156,     4,    -1,   112,
+       4,    -1,   121,    -1,   120,    -1,   163,    -1,   150,    -1,
+     144,    -1,    -1,   157,   118,   159,    -1,    -1,    79,   158,
+     187,   103,    -1,    14,   257,    -1,    31,   114,    73,   111,
+      -1,    -1,   250,    -1,    -1,   104,   161,   162,   105,    -1,
+      -1,   154,    -1,    26,   164,     4,    -1,   125,   258,   126,
+      -1,   125,   126,    -1,    -1,    -1,    -1,    28,   166,   253,
+     167,   187,     4,   168,   169,   182,    74,    -1,    -1,     4,
+      -1,   169,   170,     4,    -1,    -1,     5,   171,   172,    -1,
+     224,   110,   196,    -1,    96,   127,   180,   128,    -1,    94,
+     127,   114,   128,    -1,    94,   127,   110,   128,    -1,    97,
+      -1,    97,   127,   114,   128,    -1,    92,    -1,    92,   127,
+     153,   128,    -1,   101,    -1,   101,   127,   153,   128,    -1,
+      99,   127,   114,   128,    -1,   100,    -1,   100,   127,   153,
+     128,    -1,    -1,   180,    73,   181,    -1,   181,    -1,    53,
+      -1,    54,    -1,    56,    -1,    55,    -1,   110,    -1,   114,
+      -1,   125,   258,   126,    -1,    -1,   210,    -1,    -1,    76,
+       4,   184,   191,   186,   190,   185,   193,    77,    -1,    -1,
+     215,     4,    -1,    -1,    86,   257,     4,    -1,    -1,   188,
+      -1,   189,    -1,   188,   189,    -1,    88,    -1,    89,    -1,
+      87,    -1,    90,    -1,    91,    -1,    93,    -1,    95,    -1,
+     173,    -1,   174,    -1,   175,    -1,   176,    -1,   177,    -1,
+     178,    -1,   179,    -1,    78,   257,    73,   257,     4,    -1,
+      78,   257,     4,    -1,    84,   257,     4,    -1,    85,   249,
+       4,    -1,    85,   114,     4,    -1,    85,   249,    73,   257,
+       4,    -1,    85,   114,    73,   257,     4,    -1,    -1,   191,
+     192,     4,    -1,    11,   239,    -1,    -1,   193,   194,     4,
+      -1,    64,   249,   196,    -1,    -1,    30,   195,   224,   218,
+      -1,    -1,   196,   197,    -1,    18,    -1,    19,    -1,    20,
+      -1,    21,    -1,    21,   127,   114,   128,    -1,    21,   127,
+     117,   128,    -1,   102,    -1,    25,    -1,    -1,    80,     4,
+     199,   202,    81,    -1,   206,    -1,    -1,    82,     4,   201,
+     203,    83,    -1,    -1,   202,     4,    -1,   202,   204,     4,
+      -1,    -1,   203,     4,    -1,   203,   205,     4,    -1,    15,
+     257,   240,    -1,    16,   257,   240,    -1,    -1,   208,   127,
+     207,   209,   128,    -1,    65,    -1,    67,    -1,    -1,   239,
+      -1,   114,    22,   257,    -1,   209,    73,   239,    -1,   209,
+      73,   114,    22,   257,    -1,   212,    -1,   210,   212,    -1,
+      -1,   211,   216,    -1,   112,     4,    -1,   121,    -1,   120,
+      -1,   145,    -1,   146,    -1,    -1,   214,    -1,   214,   215,
+      -1,   215,    -1,   103,    -1,   213,   220,     4,    -1,     1,
+       4,    -1,   218,    -1,   217,    73,   218,    -1,   110,   219,
+      -1,    -1,   102,    -1,   226,    -1,   244,    -1,    -1,    30,
+     221,   224,   217,    -1,    31,   114,    73,   249,    -1,    31,
+     117,    73,   249,    -1,    -1,    32,   222,   224,   110,   124,
+     265,    -1,   150,    -1,    -1,    36,   223,   224,   110,   124,
+     265,    -1,    66,   236,    -1,    10,   255,    -1,   118,   250,
+      -1,    14,   257,    -1,   236,    -1,   183,    -1,   198,    -1,
+     200,    -1,    -1,    53,    -1,    54,    -1,    55,    -1,    56,
+      -1,   110,    -1,   249,   124,   257,    -1,   249,   124,   228,
+     257,    -1,   249,   124,   257,   229,   257,    -1,   249,   124,
+     257,   125,   258,   126,    -1,   249,   125,   258,   126,   124,
+     257,    -1,   249,   124,   129,   225,   125,   258,   126,    -1,
+     249,   124,   236,    -1,    -1,   127,   227,   243,   128,   124,
+     235,   127,   238,   128,    -1,   230,    -1,   232,    -1,   234,
+      -1,   249,   124,    14,    -1,   130,    -1,   131,    -1,   132,
+      -1,   132,    -1,   133,    -1,   134,    -1,   135,    -1,   136,
+      -1,    45,    -1,    69,    -1,   123,    -1,    58,    -1,    59,
+      -1,    60,    -1,    61,    -1,    62,    -1,    63,    -1,    51,
+      -1,    52,    -1,    70,    -1,    71,    -1,    72,    -1,    57,
+      -1,   137,    -1,   138,    -1,   131,    -1,    -1,    68,   231,
+     127,   243,   128,    -1,   249,   233,   257,    -1,    37,    -1,
+      38,    -1,    39,    -1,    40,    -1,    47,    -1,    46,    -1,
+      41,    -1,    42,    -1,    43,    -1,    44,    -1,    48,    -1,
+      49,    -1,    50,    -1,   249,   124,   118,   159,    -1,   110,
+      -1,   114,    -1,   117,    -1,   249,    -1,   249,   122,   254,
+      -1,   249,   122,   117,    -1,   249,   122,   114,    -1,   249,
+     122,   249,    -1,    -1,   235,   237,   127,   238,   128,    -1,
+      -1,   238,    73,   239,    -1,   239,    -1,   238,    73,   114,
+      22,   257,    -1,   257,    22,   257,    -1,   114,    22,   257,
+      -1,   257,   240,    -1,    -1,   240,   241,    -1,    17,    -1,
+      21,    -1,    25,    -1,    21,   127,   117,   128,    -1,    21,
+     127,   114,   128,    -1,   249,   196,    -1,   243,    73,   242,
+      -1,   243,    73,   114,    22,   249,    -1,   242,    -1,   114,
+      22,   249,    -1,    -1,   246,    -1,   245,    -1,    13,   257,
+     248,   257,    10,   255,    -1,    13,    14,   257,    10,   255,
+      -1,    13,   257,   247,   255,    -1,    12,   257,   247,   255,
+      -1,    12,   257,   248,   257,    10,   255,    -1,    12,    14,
+     257,    10,   255,    -1,    73,    -1,    10,    -1,    58,    -1,
+      59,    -1,    60,    -1,    61,    -1,    62,    -1,    63,    -1,
+     119,    -1,   264,    -1,    -1,   251,    -1,   251,    73,   252,
+      -1,   252,    -1,   256,    -1,   249,   125,   258,   126,    -1,
+     125,   260,   126,    -1,   254,    -1,   114,    -1,   117,    -1,
+     110,    -1,   118,    -1,   110,    -1,   118,    -1,   255,    -1,
+     257,    -1,   249,    -1,   265,    -1,    -1,   259,   262,    -1,
+      -1,   261,   262,    -1,   263,    -1,   262,   139,   263,    -1,
+     257,    -1,   106,    -1,   107,    -1,   108,    -1,   109,    -1,
+     111,    -1,   115,    -1,   116,    -1,   114,    -1,   117,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1797,8 +1920,8 @@
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "LOW_PREC", "'\\n'", "PARAM", "HLL",
-  "TK_LINE", "TK_FILE", "GOTO", "ARG", "IF", "UNLESS", "PNULL",
+  "$end", "error", "$undefined", "LOW_PREC", "'\\n'", "PARAM", "SOL",
+  "HLL", "TK_LINE", "TK_FILE", "GOTO", "ARG", "IF", "UNLESS", "PNULL",
   "SET_RETURN", "SET_YIELD", "ADV_FLAT", "ADV_SLURPY", "ADV_OPTIONAL",
   "ADV_OPT_FLAG", "ADV_NAMED", "ADV_ARROW", "NEW", "ADV_INVOCANT",
   "ADV_CALL_SIG", "NAMESPACE", "DOT_METHOD", "SUB", "SYM", "LOCAL",
@@ -1863,48 +1986,48 @@
      344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
      354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
      364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,    61,    91,    93,    40,    41,   110,    33,
-     126,    45,    43,    42,    47,    37,    38,   124,    59
+     374,   375,   376,   377,    61,    91,    93,    40,    41,   110,
+      33,   126,    45,    43,    42,    47,    37,    38,   124,    59
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   139,   140,   141,   141,   142,   142,   142,   142,   142,
-     142,   142,   142,   143,   143,   144,   144,   145,   146,   148,
-     147,   150,   149,   151,   149,   152,   152,   153,   153,   154,
-     154,   154,   154,   154,   154,   154,   156,   155,   157,   155,
-     155,   155,   155,   158,   160,   159,   161,   161,   162,   163,
-     163,   165,   166,   167,   164,   168,   168,   168,   170,   169,
-     171,   172,   173,   173,   174,   174,   175,   175,   176,   176,
-     177,   178,   178,   179,   179,   179,   180,   180,   180,   180,
-     180,   180,   180,   181,   181,   183,   182,   184,   184,   185,
-     185,   186,   186,   187,   187,   188,   188,   188,   188,   188,
-     188,   188,   188,   188,   188,   188,   188,   188,   188,   189,
-     189,   189,   189,   189,   189,   189,   190,   190,   191,   192,
-     192,   193,   194,   193,   195,   195,   196,   196,   196,   196,
-     196,   196,   196,   196,   198,   197,   197,   200,   199,   201,
-     201,   201,   202,   202,   202,   203,   204,   206,   205,   207,
-     207,   208,   208,   208,   208,   208,   209,   209,   210,   211,
-     211,   211,   211,   211,   211,   212,   212,   213,   213,   214,
-     215,   215,   216,   216,   217,   218,   218,   219,   219,   220,
-     219,   219,   219,   221,   219,   219,   222,   219,   219,   219,
-     219,   219,   219,   219,   219,   219,   219,   223,   223,   223,
-     223,   224,   225,   225,   225,   225,   225,   225,   225,   226,
-     225,   225,   225,   225,   225,   227,   227,   227,   228,   228,
-     228,   228,   228,   228,   228,   228,   228,   228,   228,   228,
-     228,   228,   228,   228,   228,   228,   228,   228,   228,   228,
-     228,   230,   229,   231,   232,   232,   232,   232,   232,   232,
-     232,   232,   232,   232,   232,   232,   232,   233,   234,   234,
-     234,   234,   234,   234,   234,   234,   236,   235,   237,   237,
-     237,   237,   237,   237,   238,   239,   239,   240,   240,   240,
-     240,   240,   241,   242,   242,   242,   242,   242,   243,   243,
-     244,   244,   244,   245,   245,   245,   246,   246,   247,   247,
-     247,   247,   247,   247,   248,   248,   249,   249,   250,   250,
-     251,   251,   251,   252,   252,   252,   253,   253,   254,   254,
-     255,   255,   256,   256,   258,   257,   260,   259,   261,   261,
-     262,   263,   263,   263,   263,   263,   264,   264,   264,   264
+       0,   140,   141,   142,   142,   143,   143,   143,   143,   143,
+     143,   143,   143,   144,   144,   145,   145,   146,   147,   149,
+     148,   151,   150,   152,   150,   153,   153,   154,   154,   155,
+     155,   155,   155,   155,   155,   155,   157,   156,   158,   156,
+     156,   156,   156,   159,   161,   160,   162,   162,   163,   164,
+     164,   166,   167,   168,   165,   169,   169,   169,   171,   170,
+     172,   173,   174,   174,   175,   175,   176,   176,   177,   177,
+     178,   179,   179,   180,   180,   180,   181,   181,   181,   181,
+     181,   181,   181,   182,   182,   184,   183,   185,   185,   186,
+     186,   187,   187,   188,   188,   189,   189,   189,   189,   189,
+     189,   189,   189,   189,   189,   189,   189,   189,   189,   190,
+     190,   190,   190,   190,   190,   190,   191,   191,   192,   193,
+     193,   194,   195,   194,   196,   196,   197,   197,   197,   197,
+     197,   197,   197,   197,   199,   198,   198,   201,   200,   202,
+     202,   202,   203,   203,   203,   204,   205,   207,   206,   208,
+     208,   209,   209,   209,   209,   209,   210,   210,   211,   212,
+     212,   212,   212,   212,   212,   213,   213,   214,   214,   215,
+     216,   216,   217,   217,   218,   219,   219,   220,   220,   221,
+     220,   220,   220,   222,   220,   220,   223,   220,   220,   220,
+     220,   220,   220,   220,   220,   220,   220,   224,   224,   224,
+     224,   225,   226,   226,   226,   226,   226,   226,   226,   227,
+     226,   226,   226,   226,   226,   228,   228,   228,   229,   229,
+     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
+     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
+     229,   231,   230,   232,   233,   233,   233,   233,   233,   233,
+     233,   233,   233,   233,   233,   233,   233,   234,   235,   235,
+     235,   235,   235,   235,   235,   235,   237,   236,   238,   238,
+     238,   238,   238,   238,   239,   240,   240,   241,   241,   241,
+     241,   241,   242,   243,   243,   243,   243,   243,   244,   244,
+     245,   245,   245,   246,   246,   246,   247,   247,   248,   248,
+     248,   248,   248,   248,   249,   249,   250,   250,   251,   251,
+     252,   252,   252,   253,   253,   253,   254,   254,   255,   255,
+     256,   256,   257,   257,   259,   258,   261,   260,   262,   262,
+     263,   264,   264,   264,   264,   264,   265,   265,   265,   265
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -2031,79 +2154,79 @@
 #define YYPACT_NINF -424
 static const yytype_int16 yypact[] =
 {
-     219,  -424,   -86,   -55,   -62,   -58,  -424,  -424,    -8,  -424,
-      82,   163,   219,  -424,  -424,  -424,   169,  -424,  -424,  -424,
-    -424,  -424,    93,   171,    58,   184,    95,   166,   188,    70,
-    -424,  -424,  -424,  -424,    90,  -424,  -424,    81,   439,  -424,
+     212,  -424,   -90,   -80,   -21,   -28,  -424,  -424,     9,  -424,
+     118,   151,   212,  -424,  -424,  -424,   149,  -424,  -424,  -424,
+    -424,  -424,    93,   153,    32,   163,   154,   125,   171,   180,
+    -424,  -424,  -424,  -424,    68,  -424,  -424,    66,   441,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-     100,  -424,   109,  -424,   220,  -424,  -424,  -424,  -424,   160,
-    -424,   129,  -424,    67,   133,  -424,   232,  -424,  -424,  -424,
+      94,  -424,    89,  -424,   204,  -424,  -424,  -424,  -424,   247,
+    -424,   104,  -424,    13,   108,  -424,   209,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-      99,  -424,  -424,  -424,   421,   117,   131,   135,  -424,  -424,
-    -424,   439,   136,  -424,   250,   134,  -424,  -424,   439,  -424,
-    -424,  -424,  -424,  -424,   130,  -424,   132,  -424,   137,   142,
-     146,   147,   149,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-     251,   421,  -424,   115,   425,   425,  -424,   204,   421,  -424,
-     350,  -424,    48,   -19,   161,   164,   165,    48,    48,  -424,
-    -424,  -424,  -424,  -424,  -424,   159,  -424,   177,   182,   200,
-    -424,  -424,   179,  -424,   234,  -424,  -424,  -424,  -424,   180,
-     181,   183,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -64,
-    -424,   186,   190,   191,   192,   300,    48,    48,  -424,  -424,
-     196,   439,  -424,   350,  -424,  -424,  -424,   198,   161,  -424,
-    -424,  -424,  -424,  -424,  -424,    49,  -424,  -424,  -424,    99,
-     199,  -424,  -424,  -424,  -424,   213,   323,  -424,  -424,  -424,
-    -424,   324,   256,    60,     8,  -424,  -424,   166,   259,  -424,
-    -424,  -424,  -424,   328,   230,  -424,  -424,   224,   115,  -424,
-     -67,   253,   270,   439,  -424,    71,    42,  -424,  -424,   509,
-    -424,  -424,   330,   337,   338,  -424,  -424,  -424,   350,  -424,
-    -424,  -424,  -424,  -424,  -424,   223,   341,  -424,  -424,  -424,
-    -424,  -424,  -424,  -424,  -424,  -424,   405,  -424,  -424,  -424,
-     439,   229,   439,   229,  -424,   166,   278,   290,   166,   166,
-    -424,   243,   244,  -424,  -424,  -424,  -424,   523,  -424,  -424,
-     246,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-    -424,  -424,  -424,  -424,   379,    22,  -424,   439,     5,   364,
-    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -67,   439,
-     365,   -67,   439,   272,   247,   247,   280,   281,   523,  -424,
-    -424,  -424,   358,  -424,   -39,  -424,   453,   467,  -424,  -424,
-    -424,  -424,  -424,   261,   265,   350,   283,  -424,  -424,  -424,
-     439,  -424,    28,   369,   268,  -424,  -424,  -424,  -424,   271,
-    -424,  -424,  -424,   -67,  -424,   385,   -67,  -424,   389,   298,
-     329,  -424,  -424,  -424,   282,   284,   -36,     0,    27,    11,
-     247,   532,   285,     5,   382,   -27,  -424,  -424,   388,   -24,
-    -424,   393,  -424,  -424,   293,  -424,  -424,  -424,  -424,  -424,
+      75,  -424,  -424,  -424,   483,    91,   103,   114,  -424,  -424,
+    -424,   441,   115,  -424,   226,   113,  -424,  -424,   441,  -424,
+    -424,  -424,  -424,  -424,   106,  -424,   109,  -424,   119,   121,
+     122,   123,   124,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+     231,   483,  -424,    74,   255,   255,  -424,   172,   483,  -424,
+     426,  -424,   -40,   -69,   387,   141,   142,   -40,   -40,  -424,
+    -424,  -424,  -424,  -424,  -424,   133,  -424,   134,   152,   159,
+    -424,  -424,   145,  -424,   193,  -424,  -424,  -424,  -424,   146,
+     147,   148,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -58,
+    -424,   160,   161,   162,   174,   273,   -40,   -40,  -424,  -424,
+     156,   441,  -424,   426,  -424,  -424,  -424,   165,   387,  -424,
+    -424,  -424,  -424,  -424,  -424,    29,  -424,  -424,  -424,    75,
+     177,  -424,  -424,  -424,  -424,   166,   283,  -424,  -424,  -424,
+    -424,   300,   232,    34,    18,  -424,  -424,   125,   234,  -424,
+    -424,  -424,  -424,   304,   229,  -424,  -424,   203,    74,  -424,
+     -85,   272,   320,   441,  -424,    -7,    24,  -424,  -424,   535,
+    -424,  -424,   313,   314,   315,  -424,  -424,  -424,   426,  -424,
+    -424,  -424,  -424,  -424,  -424,   194,   318,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,  -424,  -424,   444,  -424,  -424,  -424,
+     441,   164,   441,   164,  -424,   125,   250,   253,   125,   125,
+    -424,   205,   215,  -424,  -424,  -424,  -424,   549,  -424,  -424,
+     227,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,   396,    54,  -424,   441,    38,   322,
+    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -85,   441,
+     339,   -85,   441,   243,   222,   222,   245,   248,   549,  -424,
+    -424,  -424,   335,  -424,   -47,  -424,   479,   493,  -424,  -424,
+    -424,  -424,  -424,   233,   249,   426,   265,  -424,  -424,  -424,
+     441,  -424,   -18,   393,   251,  -424,  -424,  -424,  -424,   257,
+    -424,  -424,  -424,   -85,  -424,   375,   -85,  -424,   380,   290,
+     321,  -424,  -424,  -424,   269,   274,   -37,     2,     8,     4,
+     222,   558,   275,    38,   379,   -33,  -424,  -424,   381,   -27,
+    -424,   383,  -424,  -424,   281,  -424,  -424,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-     439,   301,    85,  -424,   -67,  -424,   -67,  -424,  -424,   272,
-     115,   115,  -424,   439,   439,   -37,   402,  -424,   439,  -424,
-     417,  -424,   439,  -424,   419,  -424,   413,  -424,   509,   439,
-     481,  -424,   162,   439,   495,  -424,   439,  -424,   310,  -424,
-     439,   309,   322,  -424,  -424,  -424,  -424,  -424,  -424,   457,
-     439,   439,   541,   133,  -424,  -424,  -424,  -424,  -424,   247,
-     336,  -424,   450,  -424,  -424,   347,  -424,  -424,  -424,   455,
-    -424,  -424,   352,  -424,  -424,  -424,  -424,  -424,    10,   475,
-      12,    26,  -424,   477,   162,   162,  -424,   467,   439,    86,
-     439,  -424,  -424,   439,  -424,  -424,   439,  -424,   439,    94,
-    -424,   -23,  -424,   355,   356,  -424,   486,   490,   494,  -424,
-     247,  -424,   514,  -424,  -424,  -424,  -424,  -424,  -424,   166,
-    -424,  -424,   272,     5,  -424
+     441,   284,    84,  -424,   -85,  -424,   -85,  -424,  -424,   243,
+      74,    74,  -424,   441,   441,   -12,   403,  -424,   441,  -424,
+     405,  -424,   441,  -424,   409,  -424,   392,  -424,   535,   441,
+     507,  -424,   131,   441,   521,  -424,   441,  -424,   271,  -424,
+     441,   289,   291,  -424,  -424,  -424,  -424,  -424,  -424,   416,
+     441,   441,   567,   108,  -424,  -424,  -424,  -424,  -424,   222,
+     294,  -424,   401,  -424,  -424,   297,  -424,  -424,  -424,   408,
+    -424,  -424,   299,  -424,  -424,  -424,  -424,  -424,     5,   442,
+       6,    17,  -424,   443,   131,   131,  -424,   493,   441,    85,
+     441,  -424,  -424,   441,  -424,  -424,   441,  -424,   441,    41,
+    -424,   -22,  -424,   329,   330,  -424,   445,   455,   456,  -424,
+     222,  -424,   457,  -424,  -424,  -424,  -424,  -424,  -424,   125,
+    -424,  -424,   243,    38,  -424
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -424,  -424,  -424,   510,    -1,  -161,  -424,  -424,  -424,  -424,
-     299,  -424,  -424,   -68,  -424,   465,  -424,  -424,  -424,   203,
-    -424,  -424,  -424,     3,  -424,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,  -424,   436,    10,  -166,  -424,  -424,  -424,  -424,
+     242,  -424,  -424,   -62,  -424,   412,  -424,  -424,  -424,   128,
+    -424,  -424,  -424,    23,  -424,  -424,  -424,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-    -424,   339,  -424,  -424,  -424,  -424,  -424,   397,  -424,   415,
+    -424,   279,  -424,  -424,  -424,  -424,  -424,   340,  -424,   353,
     -424,  -424,  -424,  -424,  -424,  -424,  -330,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-    -424,  -424,   343,   348,  -424,   -63,  -424,  -424,  -423,  -424,
+    -424,  -424,   263,   282,  -424,   -63,  -424,  -424,  -423,  -424,
     -424,  -424,  -424,  -424,  -214,  -424,  -424,  -424,  -424,  -424,
-    -424,  -424,  -424,  -424,  -424,    89,  -226,  -424,    43,  -292,
-    -329,  -424,   170,   236,  -424,  -424,  -424,   292,   297,  -128,
-     331,  -424,   395,  -424,   286,  -219,   -47,   -38,  -164,  -424,
-    -424,  -424,   403,   478,  -424,  -116
+    -424,  -424,  -424,  -424,  -424,    31,  -225,  -424,   -30,  -320,
+    -344,  -424,   117,   167,  -424,  -424,  -424,   216,   235,  -128,
+     252,  -424,   316,  -424,   207,  -219,    -8,   -38,  -164,  -424,
+    -424,  -424,   328,   419,  -424,  -116
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -2113,203 +2236,209 @@
 #define YYTABLE_NINF -262
 static const yytype_int16 yytable[] =
 {
-      79,    96,   152,   227,   187,   383,   465,   141,   188,   223,
-     433,   269,  -165,   280,   512,   441,   515,  -165,   200,  -165,
-    -165,  -165,   356,   357,   358,   359,   442,    21,    57,   360,
-     517,   437,    62,   381,   209,   342,   381,  -165,  -165,  -165,
-     470,   438,   142,  -165,   386,   450,   471,   472,   454,   454,
-     143,    23,   209,   126,   204,   152,     3,     4,    57,    22,
-      79,   323,    62,   189,   326,   327,    24,     3,     4,   173,
-     174,   -42,  -165,  -165,  -165,  -165,     2,   145,   147,   351,
-      91,   205,   513,  -165,   516,   434,    30,  -165,   382,  -165,
-     160,   432,   205,   443,   161,     5,   266,    92,   518,   364,
-     451,    52,   367,   455,   533,    28,   361,   439,   196,   197,
-      53,   281,   268,  -165,  -165,  -165,  -165,  -165,  -165,   544,
-     152,  -165,   -83,   529,  -165,  -165,  -165,    68,    69,    70,
-      71,   245,    72,   -84,  -165,   343,    74,    75,   344,   345,
-      77,   468,   354,    79,   423,    93,   504,   425,   505,   304,
-     346,   347,   348,   349,  -261,   -23,   -21,   530,   483,   335,
-     206,   157,   490,    31,   158,    34,     2,     8,   207,   208,
-     531,   206,    53,    33,   -46,    35,   340,   352,   484,   207,
-     208,    54,   485,    36,   276,     5,   486,   277,    39,    55,
-      56,    52,    51,   271,   273,   274,   372,   373,   461,   523,
-     335,   462,   524,    66,    40,   463,    67,   464,    41,    85,
-     543,    42,    43,   162,   163,   164,   165,   152,    46,    47,
-      48,    49,   -23,     1,    88,     2,     3,     4,    73,    74,
-      75,    76,   309,    90,   320,    53,    97,    98,   310,   230,
-     123,   231,   232,   233,     5,   124,     6,   458,   125,   127,
-       7,   130,   445,   335,   129,   139,   132,     8,   133,   234,
-     235,   236,    53,   134,   -47,   237,   270,   353,   135,   355,
-     166,    54,   136,   137,   167,   138,   148,   171,   172,    55,
-      56,   365,   176,   272,   368,   168,   311,   312,   313,   314,
-     315,   316,   178,   492,   238,   239,   240,   241,   387,   391,
-     177,   317,   179,   182,   194,   242,   183,   184,   185,   243,
-     186,   244,   395,   190,   466,   467,     8,   191,   192,   193,
-     281,   198,     9,   202,   216,   542,   218,   219,   220,   221,
-      10,   228,   229,   267,   283,    68,    69,    70,    71,   245,
-      72,   284,   285,   246,   501,   289,   247,   248,    77,   288,
-     324,   506,    68,    69,    70,    71,   249,    72,    68,    69,
-      70,    71,   325,    72,   304,    77,    73,    74,    75,    76,
-     328,    77,   337,   363,   366,    68,    69,    70,    71,   380,
-      72,   369,   459,    73,    74,    75,    76,  -259,    77,   374,
-     375,  -260,   393,   421,   424,   387,   469,   422,   426,   427,
-     475,   429,   540,   449,   477,   430,   474,   431,   448,   453,
-     503,   481,   387,   396,   456,   488,   387,   457,   491,   397,
-     398,   476,   494,   478,   460,   399,   400,   401,   402,   403,
-     404,   405,   498,   499,   479,   493,   495,   406,   407,   408,
-     409,   291,   292,   293,   294,   295,   296,   297,   298,   496,
-     299,   300,   301,   302,   303,    68,    69,    70,    71,   142,
-      72,   497,   507,    73,    74,    75,    76,   143,    77,   391,
-     522,   508,   525,   509,   150,   526,   510,   511,   527,   514,
-     528,   520,   534,   535,    68,    69,    70,    71,    40,    72,
-     536,   410,   338,   411,   537,   339,    43,    77,   538,   412,
-     413,   414,   415,   416,   417,   418,   419,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   541,   110,
-     111,   112,    32,   250,    89,   149,   304,   203,   305,   306,
-      68,    69,    70,    71,   142,    72,   140,   480,    73,    74,
-      75,    76,   143,    77,    68,    69,    70,    71,   392,    72,
-     521,   447,    73,    74,    75,    76,   222,    77,    68,    69,
-      70,    71,   224,    72,   376,   321,   384,    74,    75,    76,
-     322,    77,    68,    69,    70,    71,   131,    72,   201,   286,
-     388,    74,    75,    76,   199,    77,    68,    69,    70,    71,
-     341,    72,     0,     0,   482,    74,    75,    76,     0,    77,
-      68,    69,    70,    71,     0,    72,     0,     0,   489,    74,
-      75,    76,     0,    77,    68,    69,    70,    71,   245,    72,
-       0,     0,   246,     0,     0,   247,     0,    77,    68,    69,
-      70,    71,     0,    72,     0,     0,   332,    68,    69,    70,
-      71,    77,    72,     0,     0,   446,    68,    69,    70,    71,
-      77,    72,     0,     0,   500,     0,     0,     0,     0,    77
+      79,    96,   152,   227,   187,   383,   465,   141,   441,   512,
+     515,   269,   437,   433,   280,   188,   386,   -42,   200,   223,
+     442,   517,  -165,   438,    21,   142,   381,    91,  -165,   209,
+    -165,  -165,  -165,   143,   204,    22,   381,     3,     4,    57,
+     450,   160,     3,     4,    92,   161,   454,   209,  -165,  -165,
+    -165,   454,    62,   126,  -165,   152,   356,   357,   358,   359,
+      79,   323,   205,   360,   326,   327,   470,   205,   342,    57,
+     189,   529,   471,   472,   157,   173,   174,   158,   513,   516,
+     351,   382,    62,  -165,  -165,  -165,  -165,   443,   434,   439,
+     518,   432,    93,    23,  -165,   451,   266,    24,  -165,   364,
+    -165,   455,   367,   -83,   304,   530,   533,   276,   -84,  -261,
+     277,   281,   268,   468,   196,   197,   145,   147,   531,   544,
+     152,    53,    30,    28,  -165,  -165,  -165,  -165,  -165,  -165,
+     483,   504,  -165,   505,   490,  -165,  -165,  -165,   -23,   -21,
+     361,   206,   354,    79,   423,  -165,   206,   425,   484,   207,
+     208,    31,   485,    33,   207,   208,   486,    35,    36,   335,
+      68,    69,    70,    71,   245,    72,    34,    39,   343,    74,
+      75,   344,   345,    77,   310,    51,   340,   352,    46,    47,
+      48,    49,    66,   346,   347,   348,   349,     2,    73,    74,
+      75,    76,    67,   271,   273,   274,   372,   373,   461,   523,
+     335,   462,   524,   -23,    85,   463,     5,   464,    88,    90,
+     543,    53,    52,    97,    98,   123,     1,   152,   124,     2,
+       3,     4,   311,   312,   313,   314,   315,   316,   125,   127,
+     129,   130,   309,   132,   320,   139,   133,   317,     5,   230,
+       6,   231,   232,   233,     7,   148,   134,   458,   135,   136,
+     137,   138,   445,   335,     2,   171,   172,   176,   177,   234,
+     235,   236,   179,   178,    40,   237,   183,   353,    41,   355,
+     182,    42,    43,     5,   184,   185,   186,   194,     8,    52,
+     218,   365,   198,    53,   368,   -46,   270,   219,   190,   191,
+     192,   202,    54,   492,   238,   239,   240,   241,   387,   391,
+      55,    56,   193,   216,   220,   242,   221,   228,   229,   243,
+       8,   244,   395,   267,   466,   467,     9,   283,   284,   285,
+     281,   288,   289,   324,    10,   542,   325,   304,    68,    69,
+      70,    71,   363,    72,   272,    68,    69,    70,    71,   245,
+      72,    77,   328,   246,   501,     8,   247,   248,    77,   366,
+      53,   506,   -47,   369,   337,   374,   249,   380,   375,    54,
+    -259,    68,    69,    70,    71,   142,    72,    55,    56,    73,
+      74,    75,    76,   143,    77,   393,  -260,   421,    68,    69,
+      70,    71,   459,    72,   422,   424,    73,    74,    75,    76,
+     426,    77,   427,   430,   429,   387,   469,   493,   431,   448,
+     475,   449,   540,   453,   477,   456,   457,   474,   460,   476,
+     503,   481,   387,   478,   479,   488,   387,   495,   491,   496,
+     497,   507,   494,   508,   509,   511,    68,    69,    70,    71,
+     510,    72,   498,   499,    73,    74,    75,    76,   396,    77,
+     162,   163,   164,   165,   397,   398,   514,   520,    32,   536,
+     399,   400,   401,   402,   403,   404,   405,   534,   535,   537,
+     538,   541,   406,   407,   408,   409,   250,   203,   149,   391,
+     522,    89,   525,   392,   140,   526,   222,   521,   527,   480,
+     528,   291,   292,   293,   294,   295,   296,   297,   298,   321,
+     299,   300,   301,   302,   303,   376,   224,   166,   447,   201,
+     286,   167,    68,    69,    70,    71,    40,    72,   322,   199,
+     338,   341,   168,   339,    43,    77,   410,   131,   411,     0,
+       0,     0,     0,     0,   412,   413,   414,   415,   416,   417,
+     418,   419,    68,    69,    70,    71,   142,    72,     0,     0,
+      73,    74,    75,    76,   143,    77,     0,    68,    69,    70,
+      71,   150,    72,     0,     0,    73,    74,    75,    76,     0,
+      77,     0,     0,     0,     0,     0,   304,     0,   305,   306,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,     0,   110,   111,   112,    68,    69,    70,    71,     0,
+      72,     0,     0,   384,    74,    75,    76,     0,    77,    68,
+      69,    70,    71,     0,    72,     0,     0,   388,    74,    75,
+      76,     0,    77,    68,    69,    70,    71,     0,    72,     0,
+       0,   482,    74,    75,    76,     0,    77,    68,    69,    70,
+      71,     0,    72,     0,     0,   489,    74,    75,    76,     0,
+      77,    68,    69,    70,    71,   245,    72,     0,     0,   246,
+       0,     0,   247,     0,    77,    68,    69,    70,    71,     0,
+      72,     0,     0,   332,    68,    69,    70,    71,    77,    72,
+       0,     0,   446,    68,    69,    70,    71,    77,    72,     0,
+       0,   500,     0,     0,     0,     0,    77
 };
 
 static const yytype_int16 yycheck[] =
 {
-      38,    64,   130,   217,   168,   335,   429,   123,    72,     1,
-      10,   230,     4,   239,     4,     4,     4,     9,   182,    11,
-      12,    13,    17,    18,    19,    20,    15,   113,    29,    24,
-       4,     4,    29,    72,   195,    13,    72,    29,    30,    31,
-      77,    14,   109,    35,   336,    72,    83,    84,    72,    72,
-     117,   113,   213,    91,     5,   183,     7,     8,    59,   114,
-      98,   275,    59,   127,   278,   279,   124,     7,     8,   137,
-     138,     4,    64,    65,    66,    67,     6,   124,   125,   305,
-      13,    32,    72,    75,    72,    85,     4,    79,   127,    81,
-     109,   127,    32,    82,   113,    25,   224,    30,    72,   318,
-     127,    31,   321,   127,   127,   113,   101,    80,   176,   177,
-     102,   239,   228,   105,   106,   107,   108,   109,   110,   542,
-     248,   113,    73,    29,   116,   117,   118,   105,   106,   107,
-     108,   109,   110,    73,   126,   113,   114,   115,   116,   117,
-     118,   433,   306,   181,   363,    78,   475,   366,   477,   121,
-     128,   129,   130,   131,   126,   113,   114,    63,   450,   287,
-     111,   113,   454,     0,   116,    72,     6,    97,   119,   120,
-      76,   111,   102,     4,   104,     4,   304,   305,    16,   119,
-     120,   111,    20,   125,   113,    25,    24,   116,     4,   119,
-     120,    31,     4,   231,   232,   233,   324,   325,   113,   113,
-     328,   116,   116,   113,   109,   424,   125,   426,   113,   109,
-     540,   116,   117,    52,    53,    54,    55,   345,    52,    53,
-      54,    55,   113,     4,     4,     6,     7,     8,   113,   114,
-     115,   116,   270,   104,   272,   102,     4,   138,     9,     9,
-     123,    11,    12,    13,    25,   114,    27,   411,   113,   113,
-      31,   117,   380,   381,     4,     4,   126,    97,   126,    29,
-      30,    31,   102,   126,   104,    35,    13,   305,   126,   307,
-     109,   111,   126,   126,   113,   126,    72,   113,   113,   119,
-     120,   319,   123,    13,   322,   124,    57,    58,    59,    60,
-      61,    62,   110,   457,    64,    65,    66,    67,   336,   337,
-     123,    72,   102,   124,     4,    75,    72,   127,   127,    79,
-     127,    81,   350,   127,   430,   431,    97,   127,   127,   127,
-     448,   125,   103,   125,   125,   539,   113,     4,     4,    73,
-     111,    72,     4,   109,     4,   105,   106,   107,   108,   109,
-     110,     4,     4,   113,   472,     4,   116,   117,   118,   126,
-      72,   479,   105,   106,   107,   108,   126,   110,   105,   106,
-     107,   108,    72,   110,   121,   118,   113,   114,   115,   116,
-     126,   118,   126,     9,     9,   105,   106,   107,   108,    21,
-     110,   109,   420,   113,   114,   115,   116,   126,   118,   109,
-     109,   126,   109,   125,     9,   433,   434,   126,     9,   101,
-     438,    72,   530,    21,   442,   123,     4,   123,   123,    21,
-     473,   449,   450,    44,    21,   453,   454,   124,   456,    50,
-      51,     4,   460,     4,   123,    56,    57,    58,    59,    60,
-      61,    62,   470,   471,    21,   125,   127,    68,    69,    70,
-      71,    36,    37,    38,    39,    40,    41,    42,    43,   127,
-      45,    46,    47,    48,    49,   105,   106,   107,   108,   109,
-     110,     4,   126,   113,   114,   115,   116,   117,   118,   507,
-     508,    21,   510,   126,   124,   513,    21,   125,   516,     4,
-     518,     4,   127,   127,   105,   106,   107,   108,   109,   110,
-       4,   122,   113,   124,     4,   116,   117,   118,     4,   130,
-     131,   132,   133,   134,   135,   136,   137,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,     4,    98,
-      99,   100,    12,   224,    59,   128,   121,   188,   123,   124,
-     105,   106,   107,   108,   109,   110,   121,   448,   113,   114,
-     115,   116,   117,   118,   105,   106,   107,   108,   345,   110,
-     507,   381,   113,   114,   115,   116,   213,   118,   105,   106,
-     107,   108,   214,   110,   328,   273,   113,   114,   115,   116,
-     273,   118,   105,   106,   107,   108,    98,   110,   183,   248,
-     113,   114,   115,   116,   181,   118,   105,   106,   107,   108,
-     304,   110,    -1,    -1,   113,   114,   115,   116,    -1,   118,
-     105,   106,   107,   108,    -1,   110,    -1,    -1,   113,   114,
-     115,   116,    -1,   118,   105,   106,   107,   108,   109,   110,
-      -1,    -1,   113,    -1,    -1,   116,    -1,   118,   105,   106,
-     107,   108,    -1,   110,    -1,    -1,   113,   105,   106,   107,
-     108,   118,   110,    -1,    -1,   113,   105,   106,   107,   108,
-     118,   110,    -1,    -1,   113,    -1,    -1,    -1,    -1,   118
+      38,    64,   130,   217,   168,   335,   429,   123,     4,     4,
+       4,   230,     4,    11,   239,    73,   336,     4,   182,     1,
+      16,     4,     4,    15,   114,   110,    73,    14,    10,   195,
+      12,    13,    14,   118,     5,   115,    73,     8,     9,    29,
+      73,   110,     8,     9,    31,   114,    73,   213,    30,    31,
+      32,    73,    29,    91,    36,   183,    18,    19,    20,    21,
+      98,   275,    33,    25,   278,   279,    78,    33,    14,    59,
+     128,    30,    84,    85,   114,   137,   138,   117,    73,    73,
+     305,   128,    59,    65,    66,    67,    68,    83,    86,    81,
+      73,   128,    79,   114,    76,   128,   224,   125,    80,   318,
+      82,   128,   321,    74,   122,    64,   128,   114,    74,   127,
+     117,   239,   228,   433,   176,   177,   124,   125,    77,   542,
+     248,   103,     4,   114,   106,   107,   108,   109,   110,   111,
+     450,   475,   114,   477,   454,   117,   118,   119,   114,   115,
+     102,   112,   306,   181,   363,   127,   112,   366,    17,   120,
+     121,     0,    21,     4,   120,   121,    25,     4,   126,   287,
+     106,   107,   108,   109,   110,   111,    73,     4,   114,   115,
+     116,   117,   118,   119,    10,     4,   304,   305,    53,    54,
+      55,    56,   114,   129,   130,   131,   132,     7,   114,   115,
+     116,   117,   126,   231,   232,   233,   324,   325,   114,   114,
+     328,   117,   117,   114,   110,   424,    26,   426,     4,   105,
+     540,   103,    32,     4,   139,   124,     4,   345,   115,     7,
+       8,     9,    58,    59,    60,    61,    62,    63,   114,   114,
+       4,   118,   270,   127,   272,     4,   127,    73,    26,    10,
+      28,    12,    13,    14,    32,    73,   127,   411,   127,   127,
+     127,   127,   380,   381,     7,   114,   114,   124,   124,    30,
+      31,    32,   103,   111,   110,    36,    73,   305,   114,   307,
+     125,   117,   118,    26,   128,   128,   128,     4,    98,    32,
+     114,   319,   126,   103,   322,   105,    14,     4,   128,   128,
+     128,   126,   112,   457,    65,    66,    67,    68,   336,   337,
+     120,   121,   128,   126,     4,    76,    74,    73,     4,    80,
+      98,    82,   350,   110,   430,   431,   104,     4,     4,     4,
+     448,   127,     4,    73,   112,   539,    73,   122,   106,   107,
+     108,   109,    10,   111,    14,   106,   107,   108,   109,   110,
+     111,   119,   127,   114,   472,    98,   117,   118,   119,    10,
+     103,   479,   105,   110,   127,   110,   127,    22,   110,   112,
+     127,   106,   107,   108,   109,   110,   111,   120,   121,   114,
+     115,   116,   117,   118,   119,   110,   127,   126,   106,   107,
+     108,   109,   420,   111,   127,    10,   114,   115,   116,   117,
+      10,   119,   102,   124,    73,   433,   434,   126,   124,   124,
+     438,    22,   530,    22,   442,    22,   125,     4,   124,     4,
+     473,   449,   450,     4,    22,   453,   454,   128,   456,   128,
+       4,   127,   460,    22,   127,   126,   106,   107,   108,   109,
+      22,   111,   470,   471,   114,   115,   116,   117,    45,   119,
+      53,    54,    55,    56,    51,    52,     4,     4,    12,     4,
+      57,    58,    59,    60,    61,    62,    63,   128,   128,     4,
+       4,     4,    69,    70,    71,    72,   224,   188,   128,   507,
+     508,    59,   510,   345,   121,   513,   213,   507,   516,   448,
+     518,    37,    38,    39,    40,    41,    42,    43,    44,   273,
+      46,    47,    48,    49,    50,   328,   214,   110,   381,   183,
+     248,   114,   106,   107,   108,   109,   110,   111,   273,   181,
+     114,   304,   125,   117,   118,   119,   123,    98,   125,    -1,
+      -1,    -1,    -1,    -1,   131,   132,   133,   134,   135,   136,
+     137,   138,   106,   107,   108,   109,   110,   111,    -1,    -1,
+     114,   115,   116,   117,   118,   119,    -1,   106,   107,   108,
+     109,   125,   111,    -1,    -1,   114,   115,   116,   117,    -1,
+     119,    -1,    -1,    -1,    -1,    -1,   122,    -1,   124,   125,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    -1,    99,   100,   101,   106,   107,   108,   109,    -1,
+     111,    -1,    -1,   114,   115,   116,   117,    -1,   119,   106,
+     107,   108,   109,    -1,   111,    -1,    -1,   114,   115,   116,
+     117,    -1,   119,   106,   107,   108,   109,    -1,   111,    -1,
+      -1,   114,   115,   116,   117,    -1,   119,   106,   107,   108,
+     109,    -1,   111,    -1,    -1,   114,   115,   116,   117,    -1,
+     119,   106,   107,   108,   109,   110,   111,    -1,    -1,   114,
+      -1,    -1,   117,    -1,   119,   106,   107,   108,   109,    -1,
+     111,    -1,    -1,   114,   106,   107,   108,   109,   119,   111,
+      -1,    -1,   114,   106,   107,   108,   109,   119,   111,    -1,
+      -1,   114,    -1,    -1,    -1,    -1,   119
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,     4,     6,     7,     8,    25,    27,    31,    97,   103,
-     111,   140,   141,   142,   143,   144,   146,   147,   159,   162,
-     164,   113,   114,   113,   124,   163,   165,   148,   113,   160,
-       4,     0,   142,     4,    72,     4,   125,   257,   258,     4,
-     109,   113,   116,   117,   252,   253,    52,    53,    54,    55,
-     223,     4,    31,   102,   111,   119,   120,   143,   149,   153,
-     154,   161,   162,   212,   213,   214,   113,   125,   105,   106,
-     107,   108,   110,   113,   114,   115,   116,   118,   248,   256,
-     261,   262,   263,   264,   166,   109,   150,   151,     4,   154,
-     104,    13,    30,    78,   155,   156,   214,     4,   138,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      98,    99,   100,   172,   173,   174,   175,   176,   177,   178,
-     186,   187,   188,   123,   114,   113,   256,   113,   157,     4,
-     117,   262,   126,   126,   126,   126,   126,   126,   126,     4,
-     188,   264,   109,   117,   254,   255,   256,   255,    72,   186,
-     124,   158,   248,   249,   250,   251,   255,   113,   116,   152,
-     109,   113,    52,    53,    54,    55,   109,   113,   124,   179,
-     180,   113,   113,   152,   152,   167,   123,   123,   110,   102,
-     259,   260,   124,    72,   127,   127,   127,   257,    72,   127,
-     127,   127,   127,   127,     4,   168,   152,   152,   125,   261,
-     257,   251,   125,   180,     5,    32,   111,   119,   120,   144,
-     145,   169,   181,   209,   210,   211,   125,   170,   113,     4,
-       4,    73,   211,     1,   212,   215,   171,   223,    72,     4,
-       9,    11,    12,    13,    29,    30,    31,    35,    64,    65,
-      66,    67,    75,    79,    81,   109,   113,   116,   117,   126,
-     149,   182,   197,   199,   205,   207,   219,   225,   229,   231,
-     233,   234,   235,   243,   244,   245,   248,   109,   264,   254,
-      13,   256,    13,   256,   256,   220,   113,   116,   221,   222,
-     235,   248,   230,     4,     4,     4,   249,   226,   126,     4,
-     236,    36,    37,    38,    39,    40,    41,    42,    43,    45,
-      46,    47,    48,    49,   121,   123,   124,   232,   195,   256,
-       9,    57,    58,    59,    60,    61,    62,    72,   246,   247,
-     256,   246,   247,   223,    72,    72,   223,   223,   126,   183,
-     198,   200,   113,   241,   242,   248,   206,   126,   113,   116,
-     248,   253,    13,   113,   116,   117,   128,   129,   130,   131,
-     227,   235,   248,   256,   257,   256,    17,    18,    19,    20,
-      24,   101,   196,     9,   254,   256,     9,   254,   256,   109,
-     216,   217,   248,   248,   109,   109,   242,   190,   201,   202,
-      21,    72,   127,   195,   113,   208,   238,   256,   113,   237,
-     238,   256,   158,   109,   224,   256,    44,    50,    51,    56,
-      57,    58,    59,    60,    61,    62,    68,    69,    70,    71,
-     122,   124,   130,   131,   132,   133,   134,   135,   136,   137,
-     228,   125,   126,   254,     9,   254,     9,   101,   218,    72,
-     123,   123,   127,    10,    85,   185,   191,     4,    14,    80,
-     203,     4,    15,    82,   204,   248,   113,   241,   123,    21,
-      72,   127,   239,    21,    72,   127,    21,   124,   257,   256,
-     123,   113,   116,   254,   254,   217,   264,   264,   238,   256,
-      77,    83,    84,   189,     4,   256,     4,   256,     4,    21,
-     234,   256,   113,   238,    16,    20,    24,   240,   256,   113,
-     238,   256,   257,   125,   256,   127,   127,     4,   256,   256,
-     113,   248,   184,   214,   239,   239,   248,   126,    21,   126,
-      21,   125,     4,    72,     4,     4,    72,     4,    72,   192,
-       4,   237,   256,   113,   116,   256,   256,   256,   256,    29,
-      63,    76,   193,   127,   127,   127,     4,     4,     4,   194,
-     248,     4,   223,   195,   217
+       0,     4,     7,     8,     9,    26,    28,    32,    98,   104,
+     112,   141,   142,   143,   144,   145,   147,   148,   160,   163,
+     165,   114,   115,   114,   125,   164,   166,   149,   114,   161,
+       4,     0,   143,     4,    73,     4,   126,   258,   259,     4,
+     110,   114,   117,   118,   253,   254,    53,    54,    55,    56,
+     224,     4,    32,   103,   112,   120,   121,   144,   150,   154,
+     155,   162,   163,   213,   214,   215,   114,   126,   106,   107,
+     108,   109,   111,   114,   115,   116,   117,   119,   249,   257,
+     262,   263,   264,   265,   167,   110,   151,   152,     4,   155,
+     105,    14,    31,    79,   156,   157,   215,     4,   139,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      99,   100,   101,   173,   174,   175,   176,   177,   178,   179,
+     187,   188,   189,   124,   115,   114,   257,   114,   158,     4,
+     118,   263,   127,   127,   127,   127,   127,   127,   127,     4,
+     189,   265,   110,   118,   255,   256,   257,   256,    73,   187,
+     125,   159,   249,   250,   251,   252,   256,   114,   117,   153,
+     110,   114,    53,    54,    55,    56,   110,   114,   125,   180,
+     181,   114,   114,   153,   153,   168,   124,   124,   111,   103,
+     260,   261,   125,    73,   128,   128,   128,   258,    73,   128,
+     128,   128,   128,   128,     4,   169,   153,   153,   126,   262,
+     258,   252,   126,   181,     5,    33,   112,   120,   121,   145,
+     146,   170,   182,   210,   211,   212,   126,   171,   114,     4,
+       4,    74,   212,     1,   213,   216,   172,   224,    73,     4,
+      10,    12,    13,    14,    30,    31,    32,    36,    65,    66,
+      67,    68,    76,    80,    82,   110,   114,   117,   118,   127,
+     150,   183,   198,   200,   206,   208,   220,   226,   230,   232,
+     234,   235,   236,   244,   245,   246,   249,   110,   265,   255,
+      14,   257,    14,   257,   257,   221,   114,   117,   222,   223,
+     236,   249,   231,     4,     4,     4,   250,   227,   127,     4,
+     237,    37,    38,    39,    40,    41,    42,    43,    44,    46,
+      47,    48,    49,    50,   122,   124,   125,   233,   196,   257,
+      10,    58,    59,    60,    61,    62,    63,    73,   247,   248,
+     257,   247,   248,   224,    73,    73,   224,   224,   127,   184,
+     199,   201,   114,   242,   243,   249,   207,   127,   114,   117,
+     249,   254,    14,   114,   117,   118,   129,   130,   131,   132,
+     228,   236,   249,   257,   258,   257,    18,    19,    20,    21,
+      25,   102,   197,    10,   255,   257,    10,   255,   257,   110,
+     217,   218,   249,   249,   110,   110,   243,   191,   202,   203,
+      22,    73,   128,   196,   114,   209,   239,   257,   114,   238,
+     239,   257,   159,   110,   225,   257,    45,    51,    52,    57,
+      58,    59,    60,    61,    62,    63,    69,    70,    71,    72,
+     123,   125,   131,   132,   133,   134,   135,   136,   137,   138,
+     229,   126,   127,   255,    10,   255,    10,   102,   219,    73,
+     124,   124,   128,    11,    86,   186,   192,     4,    15,    81,
+     204,     4,    16,    83,   205,   249,   114,   242,   124,    22,
+      73,   128,   240,    22,    73,   128,    22,   125,   258,   257,
+     124,   114,   117,   255,   255,   218,   265,   265,   239,   257,
+      78,    84,    85,   190,     4,   257,     4,   257,     4,    22,
+     235,   257,   114,   239,    17,    21,    25,   241,   257,   114,
+     239,   257,   258,   126,   257,   128,   128,     4,   257,   257,
+     114,   249,   185,   215,   240,   240,   249,   127,    22,   127,
+      22,   126,     4,    73,     4,     4,    73,     4,    73,   193,
+       4,   238,   257,   114,   117,   257,   257,   257,   257,    30,
+      64,    77,   194,   128,   128,   128,     4,     4,     4,   195,
+     249,     4,   224,   196,   218
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3136,21 +3265,21 @@
 
 /* Line 1455 of yacc.c  */
 #line 1170 "compilers/imcc/imcc.y"
-    { if (yynerrs) YYABORT; (yyval.i) = 0; ;}
+    { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
 
 /* Line 1455 of yacc.c  */
 #line 1179 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
 
 /* Line 1455 of yacc.c  */
 #line 1180 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
@@ -3161,7 +3290,7 @@
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = 0;
-         ;}
+         }
     break;
 
   case 8:
@@ -3172,42 +3301,42 @@
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = 0;
-         ;}
+         }
     break;
 
   case 9:
 
 /* Line 1455 of yacc.c  */
 #line 1193 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 10:
 
 /* Line 1455 of yacc.c  */
 #line 1194 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 11:
 
 /* Line 1455 of yacc.c  */
 #line 1195 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 12:
 
 /* Line 1455 of yacc.c  */
 #line 1196 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 13:
 
 /* Line 1455 of yacc.c  */
 #line 1200 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 14:
@@ -3218,7 +3347,7 @@
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
            mem_sys_free((yyvsp[(2) - (3)].s));
-         ;}
+         }
     break;
 
   case 15:
@@ -3229,7 +3358,7 @@
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
            /* set_filename() frees the STRINGC */
            set_filename(interp, (yyvsp[(4) - (5)].s));
-         ;}
+         }
     break;
 
   case 16:
@@ -3239,7 +3368,7 @@
     {
            /* set_filename() frees the STRINGC */
            set_filename(interp, (yyvsp[(2) - (3)].s));
-         ;}
+         }
     break;
 
   case 17:
@@ -3252,7 +3381,7 @@
           SymReg * const key = mk_const(interp, (yyvsp[(2) - (4)].s), 'S');
           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, ".annotate", 2, key, (yyvsp[(4) - (4)].sr));
           mem_sys_free((yyvsp[(2) - (4)].s));
-        ;}
+        }
     break;
 
   case 18:
@@ -3267,14 +3396,14 @@
             IMCC_INFO(interp)->cur_namespace = NULL;
             mem_sys_free((yyvsp[(2) - (2)].s));
             (yyval.t) = 0;
-         ;}
+         }
     break;
 
   case 19:
 
 /* Line 1455 of yacc.c  */
 #line 1249 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->is_def = 1; ;}
+    { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 20:
@@ -3285,14 +3414,14 @@
              mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
              mem_sys_free((yyvsp[(4) - (6)].s));
              IMCC_INFO(interp)->is_def = 0;
-         ;}
+         }
     break;
 
   case 21:
 
 /* Line 1455 of yacc.c  */
 #line 1258 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->is_def = 1; ;}
+    { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 22:
@@ -3303,14 +3432,14 @@
            (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(6) - (6)].s));
            IMCC_INFO(interp)->is_def = 0;
-         ;}
+         }
     break;
 
   case 23:
 
 /* Line 1455 of yacc.c  */
 #line 1265 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->is_def = 1; ;}
+    { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 24:
@@ -3322,49 +3451,49 @@
            mem_sys_free((yyvsp[(3) - (6)].s));
            mem_sys_free((yyvsp[(6) - (6)].s));
            IMCC_INFO(interp)->is_def = 0;
-         ;}
+         }
     break;
 
   case 29:
 
 /* Line 1455 of yacc.c  */
 #line 1284 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;  ;}
+    { (yyval.i) = 0;  }
     break;
 
   case 30:
 
 /* Line 1455 of yacc.c  */
 #line 1285 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;  ;}
+    { (yyval.i) = 0;  }
     break;
 
   case 31:
 
 /* Line 1455 of yacc.c  */
 #line 1286 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;  ;}
+    { (yyval.i) = 0;  }
     break;
 
   case 32:
 
 /* Line 1455 of yacc.c  */
 #line 1287 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;  ;}
+    { (yyval.i) = 0;  }
     break;
 
   case 33:
 
 /* Line 1455 of yacc.c  */
 #line 1288 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
 #line 1293 "compilers/imcc/imcc.y"
-    { clear_state(interp); ;}
+    { clear_state(interp); }
     break;
 
   case 37:
@@ -3376,7 +3505,7 @@
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
                     IMCC_INFO(interp)->nargs, IMCC_INFO(interp) -> keyvec, 1);
             mem_sys_free((yyvsp[(2) - (3)].s));
-         ;}
+         }
     break;
 
   case 38:
@@ -3386,7 +3515,7 @@
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
-         ;}
+         }
     break;
 
   case 39:
@@ -3399,7 +3528,7 @@
                     mk_sub_label(interp, (yyvsp[(4) - (4)].s)));
            IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(3) - (4)].t);
            mem_sys_free((yyvsp[(4) - (4)].s));
-         ;}
+         }
     break;
 
   case 40:
@@ -3408,7 +3537,7 @@
 #line 1315 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
-         ;}
+         }
     break;
 
   case 41:
@@ -3426,21 +3555,21 @@
            mem_sys_free(name);
            mem_sys_free((yyvsp[(2) - (4)].s));
            mem_sys_free((yyvsp[(4) - (4)].s));
-         ;}
+         }
     break;
 
   case 42:
 
 /* Line 1455 of yacc.c  */
 #line 1331 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;;}
+    { (yyval.i) = 0;}
     break;
 
   case 44:
 
 /* Line 1455 of yacc.c  */
 #line 1339 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); ;}
+    { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
   case 45:
@@ -3453,7 +3582,7 @@
                          emit_flush(interp);
            */
            (yyval.i) = 0;
-         ;}
+         }
     break;
 
   case 48:
@@ -3470,7 +3599,7 @@
            IMCC_INFO(interp)->cur_namespace = (yyvsp[(2) - (3)].sr);
            if (re_open)
                IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
-         ;}
+         }
     break;
 
   case 49:
@@ -3479,14 +3608,14 @@
 #line 1373 "compilers/imcc/imcc.y"
     {
             (yyval.sr) = (yyvsp[(2) - (3)].sr);
-        ;}
+        }
     break;
 
   case 50:
 
 /* Line 1455 of yacc.c  */
 #line 1376 "compilers/imcc/imcc.y"
-    { (yyval.sr) = NULL; ;}
+    { (yyval.sr) = NULL; }
     break;
 
   case 51:
@@ -3495,7 +3624,7 @@
 #line 1381 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
-         ;}
+         }
     break;
 
   case 52:
@@ -3504,7 +3633,7 @@
 #line 1385 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 53:
@@ -3517,28 +3646,28 @@
             IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = mem_sys_strdup(
             IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->name);
           }
-        ;}
+        }
     break;
 
   case 54:
 
 /* Line 1455 of yacc.c  */
 #line 1397 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; ;}
+    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 55:
 
 /* Line 1455 of yacc.c  */
 #line 1401 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+    { (yyval.sr) = 0; }
     break;
 
   case 56:
 
 /* Line 1455 of yacc.c  */
 #line 1402 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+    { (yyval.sr) = 0; }
     break;
 
   case 57:
@@ -3553,21 +3682,21 @@
            }
            else
                add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 58:
 
 /* Line 1455 of yacc.c  */
 #line 1416 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->is_def = 1; ;}
+    { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 59:
 
 /* Line 1455 of yacc.c  */
 #line 1416 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(3) - (3)].sr); IMCC_INFO(interp)->is_def = 0; ;}
+    { (yyval.sr) = (yyvsp[(3) - (3)].sr); IMCC_INFO(interp)->is_def = 0; }
     break;
 
   case 60:
@@ -3593,14 +3722,14 @@
                (yyval.sr) = mk_ident(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t));
            (yyval.sr)->type |= (yyvsp[(3) - (3)].t);
            mem_sys_free((yyvsp[(2) - (3)].s));
-          ;}
+          }
     break;
 
   case 61:
 
 /* Line 1455 of yacc.c  */
 #line 1446 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+    { (yyval.t) = 0; }
     break;
 
   case 62:
@@ -3611,7 +3740,7 @@
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
            mem_sys_free((yyvsp[(3) - (4)].s));
-         ;}
+         }
     break;
 
   case 63:
@@ -3622,7 +3751,7 @@
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
            mem_sys_free((yyvsp[(3) - (4)].s));
-         ;}
+         }
     break;
 
   case 64:
@@ -3633,7 +3762,7 @@
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = NULL;
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
-         ;}
+         }
     break;
 
   case 65:
@@ -3644,7 +3773,7 @@
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = (yyvsp[(3) - (4)].s);
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
-         ;}
+         }
     break;
 
   case 66:
@@ -3655,7 +3784,7 @@
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
            IMCC_INFO(interp)->cur_unit->is_method   = 1;
-         ;}
+         }
     break;
 
   case 67:
@@ -3666,7 +3795,7 @@
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
            IMCC_INFO(interp)->cur_unit->is_method   = 1;
-         ;}
+         }
     break;
 
   case 68:
@@ -3674,10 +3803,10 @@
 /* Line 1455 of yacc.c  */
 #line 1496 "compilers/imcc/imcc.y"
     {
-           (yyval.t) = 0;
+           (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
-         ;}
+         }
     break;
 
   case 69:
@@ -3685,10 +3814,10 @@
 /* Line 1455 of yacc.c  */
 #line 1502 "compilers/imcc/imcc.y"
     {
-           (yyval.t) = 0;
+           (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
-         ;}
+         }
     break;
 
   case 70:
@@ -3698,7 +3827,7 @@
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
-         ;}
+         }
     break;
 
   case 71:
@@ -3708,7 +3837,7 @@
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
-         ;}
+         }
     break;
 
   case 72:
@@ -3720,7 +3849,7 @@
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes((yyvsp[(3) - (4)].s));
            mem_sys_free((yyvsp[(3) - (4)].s));
-         ;}
+         }
     break;
 
   case 73:
@@ -3729,7 +3858,7 @@
 #line 1534 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, NULL);
-         ;}
+         }
     break;
 
   case 74:
@@ -3739,7 +3868,7 @@
     {
            (yyval.t) = 0;
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 75:
@@ -3749,35 +3878,35 @@
     {
            (yyval.t) = 0;
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 76:
 
 /* Line 1455 of yacc.c  */
 #line 1550 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); ;}
+    { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
   case 77:
 
 /* Line 1455 of yacc.c  */
 #line 1551 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); ;}
+    { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
   case 78:
 
 /* Line 1455 of yacc.c  */
 #line 1552 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, "PMC",      'S'); ;}
+    { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
   case 79:
 
 /* Line 1455 of yacc.c  */
 #line 1553 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, "STRING",   'S'); ;}
+    { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
   case 80:
@@ -3793,7 +3922,7 @@
            }
            mem_sys_free((yyvsp[(1) - (1)].s));
            (yyval.sr) = r;
-         ;}
+         }
     break;
 
   case 81:
@@ -3809,14 +3938,14 @@
            }
            mem_sys_free((yyvsp[(1) - (1)].s));
            (yyval.sr) = r;
-         ;}
+         }
     break;
 
   case 82:
 
 /* Line 1455 of yacc.c  */
 #line 1576 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (3)].sr); ;}
+    { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 85:
@@ -3845,112 +3974,112 @@
            r1 = IMCC_INFO(interp)->cur_unit->instructions->symregs[0];
            if (r1 && r1->pcc_sub)
                r1->pcc_sub->calls_a_sub |= 1;
-         ;}
+         }
     break;
 
   case 86:
 
 /* Line 1455 of yacc.c  */
 #line 1614 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; ;}
+    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 87:
 
 /* Line 1455 of yacc.c  */
 #line 1618 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; ;}
+    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
   case 88:
 
 /* Line 1455 of yacc.c  */
 #line 1619 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; ;}
+    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
   case 89:
 
 /* Line 1455 of yacc.c  */
 #line 1623 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL; ;}
+    { (yyval.i) = NULL; }
     break;
 
   case 90:
 
 /* Line 1455 of yacc.c  */
 #line 1624 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); ;}
+    { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 91:
 
 /* Line 1455 of yacc.c  */
 #line 1628 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+    { (yyval.t) = 0; }
     break;
 
   case 93:
 
 /* Line 1455 of yacc.c  */
 #line 1633 "compilers/imcc/imcc.y"
-    { (yyval.t) = (yyvsp[(1) - (1)].t); ;}
+    { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
   case 94:
 
 /* Line 1455 of yacc.c  */
 #line 1634 "compilers/imcc/imcc.y"
-    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); ;}
+    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 95:
 
 /* Line 1455 of yacc.c  */
 #line 1638 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_LOAD; ;}
+    { (yyval.t) = P_LOAD; }
     break;
 
   case 96:
 
 /* Line 1455 of yacc.c  */
 #line 1639 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_INIT; ;}
+    { (yyval.t) = P_INIT; }
     break;
 
   case 97:
 
 /* Line 1455 of yacc.c  */
 #line 1640 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_MAIN; ;}
+    { (yyval.t) = P_MAIN; }
     break;
 
   case 98:
 
 /* Line 1455 of yacc.c  */
 #line 1641 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_IMMEDIATE; ;}
+    { (yyval.t) = P_IMMEDIATE; }
     break;
 
   case 99:
 
 /* Line 1455 of yacc.c  */
 #line 1642 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_POSTCOMP; ;}
+    { (yyval.t) = P_POSTCOMP; }
     break;
 
   case 100:
 
 /* Line 1455 of yacc.c  */
 #line 1643 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_ANON; ;}
+    { (yyval.t) = P_ANON; }
     break;
 
   case 101:
 
 /* Line 1455 of yacc.c  */
 #line 1644 "compilers/imcc/imcc.y"
-    { (yyval.t) = P_NEED_LEX; ;}
+    { (yyval.t) = P_NEED_LEX; }
     break;
 
   case 109:
@@ -3960,7 +4089,7 @@
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
-         ;}
+         }
     break;
 
   case 110:
@@ -3969,7 +4098,7 @@
 #line 1661 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 111:
@@ -3979,7 +4108,7 @@
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
-         ;}
+         }
     break;
 
   case 112:
@@ -3988,7 +4117,7 @@
 #line 1670 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 113:
@@ -3997,7 +4126,7 @@
 #line 1674 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
-         ;}
+         }
     break;
 
   case 114:
@@ -4007,7 +4136,7 @@
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
-         ;}
+         }
     break;
 
   case 115:
@@ -4017,35 +4146,35 @@
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
-         ;}
+         }
     break;
 
   case 116:
 
 /* Line 1455 of yacc.c  */
 #line 1691 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+    { (yyval.sr) = 0; }
     break;
 
   case 117:
 
 /* Line 1455 of yacc.c  */
 #line 1692 "compilers/imcc/imcc.y"
-    { add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); ;}
+    { add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
     break;
 
   case 118:
 
 /* Line 1455 of yacc.c  */
 #line 1696 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (2)].sr); ;}
+    { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 119:
 
 /* Line 1455 of yacc.c  */
 #line 1701 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+    { (yyval.sr) = 0; }
     break;
 
   case 120:
@@ -4055,21 +4184,21 @@
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 121:
 
 /* Line 1455 of yacc.c  */
 #line 1710 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); ;}
+    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 122:
 
 /* Line 1455 of yacc.c  */
 #line 1711 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->is_def = 1; ;}
+    { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 123:
@@ -4086,91 +4215,91 @@
            UNUSED(ignored);
            IMCC_INFO(interp)->is_def = 0;
            (yyval.sr) = 0;
-         ;}
+         }
     break;
 
   case 124:
 
 /* Line 1455 of yacc.c  */
 #line 1726 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+    { (yyval.t) = 0; }
     break;
 
   case 125:
 
 /* Line 1455 of yacc.c  */
 #line 1727 "compilers/imcc/imcc.y"
-    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); ;}
+    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 126:
 
 /* Line 1455 of yacc.c  */
 #line 1731 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_FLAT;   ;}
+    { (yyval.t) = VT_FLAT;   }
     break;
 
   case 127:
 
 /* Line 1455 of yacc.c  */
 #line 1732 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_OPTIONAL; ;}
+    { (yyval.t) = VT_OPTIONAL; }
     break;
 
   case 128:
 
 /* Line 1455 of yacc.c  */
 #line 1733 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_OPT_FLAG; ;}
+    { (yyval.t) = VT_OPT_FLAG; }
     break;
 
   case 129:
 
 /* Line 1455 of yacc.c  */
 #line 1734 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_NAMED; ;}
+    { (yyval.t) = VT_NAMED; }
     break;
 
   case 130:
 
 /* Line 1455 of yacc.c  */
 #line 1735 "compilers/imcc/imcc.y"
-    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; mem_sys_free((yyvsp[(3) - (4)].s)); ;}
+    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
   case 131:
 
 /* Line 1455 of yacc.c  */
 #line 1736 "compilers/imcc/imcc.y"
-    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; mem_sys_free((yyvsp[(3) - (4)].s)); ;}
+    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
   case 132:
 
 /* Line 1455 of yacc.c  */
 #line 1737 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_UNIQUE_REG; ;}
+    { (yyval.t) = VT_UNIQUE_REG; }
     break;
 
   case 133:
 
 /* Line 1455 of yacc.c  */
 #line 1738 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_CALL_SIG; ;}
+    { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 134:
 
 /* Line 1455 of yacc.c  */
 #line 1743 "compilers/imcc/imcc.y"
-    { begin_return_or_yield(interp, 0); ;}
+    { begin_return_or_yield(interp, 0); }
     break;
 
   case 135:
 
 /* Line 1455 of yacc.c  */
 #line 1745 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; ;}
+    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 136:
@@ -4180,28 +4309,28 @@
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
-         ;}
+         }
     break;
 
   case 137:
 
 /* Line 1455 of yacc.c  */
 #line 1754 "compilers/imcc/imcc.y"
-    { begin_return_or_yield(interp, 1); ;}
+    { begin_return_or_yield(interp, 1); }
     break;
 
   case 138:
 
 /* Line 1455 of yacc.c  */
 #line 1756 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; ;}
+    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 139:
 
 /* Line 1455 of yacc.c  */
 #line 1760 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+    { (yyval.sr) = 0; }
     break;
 
   case 140:
@@ -4211,7 +4340,7 @@
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
-         ;}
+         }
     break;
 
   case 141:
@@ -4221,14 +4350,14 @@
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 142:
 
 /* Line 1455 of yacc.c  */
 #line 1774 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+    { (yyval.sr) = 0; }
     break;
 
   case 143:
@@ -4238,7 +4367,7 @@
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
-         ;}
+         }
     break;
 
   case 144:
@@ -4248,21 +4377,21 @@
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
-         ;}
+         }
     break;
 
   case 145:
 
 /* Line 1455 of yacc.c  */
 #line 1788 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); ;}
+    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 146:
 
 /* Line 1455 of yacc.c  */
 #line 1792 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); ;}
+    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 147:
@@ -4272,7 +4401,7 @@
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
-        ;}
+        }
     break;
 
   case 148:
@@ -4282,28 +4411,28 @@
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
-        ;}
+        }
     break;
 
   case 149:
 
 /* Line 1455 of yacc.c  */
 #line 1809 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+    { (yyval.t) = 0; }
     break;
 
   case 150:
 
 /* Line 1455 of yacc.c  */
 #line 1810 "compilers/imcc/imcc.y"
-    { (yyval.t) = 1; ;}
+    { (yyval.t) = 1; }
     break;
 
   case 151:
 
 /* Line 1455 of yacc.c  */
 #line 1814 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 152:
@@ -4318,7 +4447,7 @@
            }
            else
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 153:
@@ -4328,7 +4457,7 @@
     {
             SymReg * const name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S');
             add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 154:
@@ -4343,7 +4472,7 @@
              }
              else
                  add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 155:
@@ -4353,63 +4482,63 @@
     {
            SymReg * const name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S');
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr));
-         ;}
+         }
     break;
 
   case 158:
 
 /* Line 1455 of yacc.c  */
 #line 1862 "compilers/imcc/imcc.y"
-    { clear_state(interp); ;}
+    { clear_state(interp); }
     break;
 
   case 159:
 
 /* Line 1455 of yacc.c  */
 #line 1867 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(2) - (2)].i); ;}
+    { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 160:
 
 /* Line 1455 of yacc.c  */
 #line 1868 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 161:
 
 /* Line 1455 of yacc.c  */
 #line 1869 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 162:
 
 /* Line 1455 of yacc.c  */
 #line 1870 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 163:
 
 /* Line 1455 of yacc.c  */
 #line 1871 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 164:
 
 /* Line 1455 of yacc.c  */
 #line 1872 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 165:
 
 /* Line 1455 of yacc.c  */
 #line 1876 "compilers/imcc/imcc.y"
-    { (yyval.i) = NULL; ;}
+    { (yyval.i) = NULL; }
     break;
 
   case 169:
@@ -4420,14 +4549,14 @@
              Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
              mem_sys_free((yyvsp[(1) - (1)].s));
              (yyval.i) = i;
-         ;}
+         }
     break;
 
   case 170:
 
 /* Line 1455 of yacc.c  */
 #line 1897 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(2) - (3)].i); ;}
+    { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
   case 171:
@@ -4440,7 +4569,7 @@
                YYABORT;
            }
            yyerrok;
-         ;}
+         }
     break;
 
   case 172:
@@ -4451,7 +4580,7 @@
            IdList* const l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
            (yyval.idlist) = l;
-         ;}
+         }
     break;
 
   case 173:
@@ -4462,7 +4591,7 @@
            IdList* const l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
            (yyval.idlist) = l;
-         ;}
+         }
     break;
 
   case 174:
@@ -4474,28 +4603,28 @@
            l->id           = (yyvsp[(1) - (2)].s);
            l->unique_reg   = (yyvsp[(2) - (2)].t);
            (yyval.idlist) = l;
-         ;}
+         }
     break;
 
   case 175:
 
 /* Line 1455 of yacc.c  */
 #line 1935 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+    { (yyval.t) = 0; }
     break;
 
   case 176:
 
 /* Line 1455 of yacc.c  */
 #line 1936 "compilers/imcc/imcc.y"
-    { (yyval.t) = 1; ;}
+    { (yyval.t) = 1; }
     break;
 
   case 179:
 
 /* Line 1455 of yacc.c  */
 #line 1943 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->is_def = 1; ;}
+    { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 180:
@@ -4516,7 +4645,7 @@
                mem_sys_free(l1);
            }
            IMCC_INFO(interp)->is_def = 0; (yyval.i) = 0;
-         ;}
+         }
     break;
 
   case 181:
@@ -4538,7 +4667,7 @@
                mem_sys_free((yyvsp[(2) - (4)].s));
                mem_sys_free(name);
             }
-         ;}
+         }
     break;
 
   case 182:
@@ -4556,14 +4685,14 @@
                set_lexical(interp, (yyvsp[(4) - (4)].sr), n); (yyval.i) = 0;
                mem_sys_free((yyvsp[(2) - (4)].s));
             }
-         ;}
+         }
     break;
 
   case 183:
 
 /* Line 1455 of yacc.c  */
 #line 1989 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->is_def = 1; ;}
+    { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 184:
@@ -4574,14 +4703,14 @@
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            IMCC_INFO(interp)->is_def = 0;
            mem_sys_free((yyvsp[(4) - (6)].s));
-         ;}
+         }
     break;
 
   case 186:
 
 /* Line 1455 of yacc.c  */
 #line 1997 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->is_def = 1; ;}
+    { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 187:
@@ -4592,7 +4721,7 @@
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            IMCC_INFO(interp)->is_def = 0;
            mem_sys_free((yyvsp[(4) - (6)].s));
-         ;}
+         }
     break;
 
   case 188:
@@ -4603,7 +4732,7 @@
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
            IMCC_INFO(interp)->cur_call = NULL;
-         ;}
+         }
     break;
 
   case 189:
@@ -4612,7 +4741,7 @@
 #line 2010 "compilers/imcc/imcc.y"
     {
             (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
-         ;}
+         }
     break;
 
   case 190:
@@ -4629,63 +4758,63 @@
                     IMCC_INFO(interp)->keyvec,
                     1);
            mem_sys_free((yyvsp[(1) - (2)].s));
-         ;}
+         }
     break;
 
   case 191:
 
 /* Line 1455 of yacc.c  */
 #line 2025 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); ;}
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
   case 192:
 
 /* Line 1455 of yacc.c  */
 #line 2026 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; ;}
+    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 193:
 
 /* Line 1455 of yacc.c  */
 #line 2027 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; ;}
+    { (yyval.i) = 0; }
     break;
 
   case 196:
 
 /* Line 1455 of yacc.c  */
 #line 2030 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0;;}
+    { (yyval.i) = 0;}
     break;
 
   case 197:
 
 /* Line 1455 of yacc.c  */
 #line 2034 "compilers/imcc/imcc.y"
-    { (yyval.t) = 'I'; ;}
+    { (yyval.t) = 'I'; }
     break;
 
   case 198:
 
 /* Line 1455 of yacc.c  */
 #line 2035 "compilers/imcc/imcc.y"
-    { (yyval.t) = 'N'; ;}
+    { (yyval.t) = 'N'; }
     break;
 
   case 199:
 
 /* Line 1455 of yacc.c  */
 #line 2036 "compilers/imcc/imcc.y"
-    { (yyval.t) = 'S'; ;}
+    { (yyval.t) = 'S'; }
     break;
 
   case 200:
 
 /* Line 1455 of yacc.c  */
 #line 2037 "compilers/imcc/imcc.y"
-    { (yyval.t) = 'P'; ;}
+    { (yyval.t) = 'P'; }
     break;
 
   case 201:
@@ -4700,49 +4829,49 @@
                IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "Unknown PMC type '%s'\n", (yyvsp[(1) - (1)].s));
            }
-         ;}
+         }
     break;
 
   case 202:
 
 /* Line 1455 of yacc.c  */
 #line 2055 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  ;}
+    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  }
     break;
 
   case 203:
 
 /* Line 1455 of yacc.c  */
 #line 2057 "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));  ;}
+    { (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 204:
 
 /* Line 1455 of yacc.c  */
 #line 2059 "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)); ;}
+    { (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 205:
 
 /* Line 1455 of yacc.c  */
 #line 2061 "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)); ;}
+    { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
     break;
 
   case 206:
 
 /* Line 1455 of yacc.c  */
 #line 2063 "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)); ;}
+    { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
   case 207:
 
 /* Line 1455 of yacc.c  */
 #line 2068 "compilers/imcc/imcc.y"
-    { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); ;}
+    { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); }
     break;
 
   case 208:
@@ -4753,7 +4882,7 @@
            add_pcc_result(interp, (yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
            (yyval.i) = 0;
-         ;}
+         }
     break;
 
   case 209:
@@ -4762,7 +4891,7 @@
 #line 2077 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
-         ;}
+         }
     break;
 
   case 210:
@@ -4772,7 +4901,7 @@
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
-         ;}
+         }
     break;
 
   case 214:
@@ -4781,189 +4910,189 @@
 #line 2089 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
-         ;}
+         }
     break;
 
   case 215:
 
 /* Line 1455 of yacc.c  */
 #line 2096 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"not"; ;}
+    { (yyval.s) = (char *)"not"; }
     break;
 
   case 216:
 
 /* Line 1455 of yacc.c  */
 #line 2097 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bnot"; ;}
+    { (yyval.s) = (char *)"bnot"; }
     break;
 
   case 217:
 
 /* Line 1455 of yacc.c  */
 #line 2098 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"neg"; ;}
+    { (yyval.s) = (char *)"neg"; }
     break;
 
   case 218:
 
 /* Line 1455 of yacc.c  */
 #line 2102 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"sub"; ;}
+    { (yyval.s) = (char *)"sub"; }
     break;
 
   case 219:
 
 /* Line 1455 of yacc.c  */
 #line 2103 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"add"; ;}
+    { (yyval.s) = (char *)"add"; }
     break;
 
   case 220:
 
 /* Line 1455 of yacc.c  */
 #line 2104 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"mul"; ;}
+    { (yyval.s) = (char *)"mul"; }
     break;
 
   case 221:
 
 /* Line 1455 of yacc.c  */
 #line 2105 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"div"; ;}
+    { (yyval.s) = (char *)"div"; }
     break;
 
   case 222:
 
 /* Line 1455 of yacc.c  */
 #line 2106 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"mod"; ;}
+    { (yyval.s) = (char *)"mod"; }
     break;
 
   case 223:
 
 /* Line 1455 of yacc.c  */
 #line 2107 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"fdiv"; ;}
+    { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 224:
 
 /* Line 1455 of yacc.c  */
 #line 2108 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"pow"; ;}
+    { (yyval.s) = (char *)"pow"; }
     break;
 
   case 225:
 
 /* Line 1455 of yacc.c  */
 #line 2109 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"concat"; ;}
+    { (yyval.s) = (char *)"concat"; }
     break;
 
   case 226:
 
 /* Line 1455 of yacc.c  */
 #line 2110 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"iseq"; ;}
+    { (yyval.s) = (char *)"iseq"; }
     break;
 
   case 227:
 
 /* Line 1455 of yacc.c  */
 #line 2111 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"isne"; ;}
+    { (yyval.s) = (char *)"isne"; }
     break;
 
   case 228:
 
 /* Line 1455 of yacc.c  */
 #line 2112 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"isgt"; ;}
+    { (yyval.s) = (char *)"isgt"; }
     break;
 
   case 229:
 
 /* Line 1455 of yacc.c  */
 #line 2113 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"isge"; ;}
+    { (yyval.s) = (char *)"isge"; }
     break;
 
   case 230:
 
 /* Line 1455 of yacc.c  */
 #line 2114 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"islt"; ;}
+    { (yyval.s) = (char *)"islt"; }
     break;
 
   case 231:
 
 /* Line 1455 of yacc.c  */
 #line 2115 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"isle"; ;}
+    { (yyval.s) = (char *)"isle"; }
     break;
 
   case 232:
 
 /* Line 1455 of yacc.c  */
 #line 2116 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"shl"; ;}
+    { (yyval.s) = (char *)"shl"; }
     break;
 
   case 233:
 
 /* Line 1455 of yacc.c  */
 #line 2117 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"shr"; ;}
+    { (yyval.s) = (char *)"shr"; }
     break;
 
   case 234:
 
 /* Line 1455 of yacc.c  */
 #line 2118 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"lsr"; ;}
+    { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 235:
 
 /* Line 1455 of yacc.c  */
 #line 2119 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"and"; ;}
+    { (yyval.s) = (char *)"and"; }
     break;
 
   case 236:
 
 /* Line 1455 of yacc.c  */
 #line 2120 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"or"; ;}
+    { (yyval.s) = (char *)"or"; }
     break;
 
   case 237:
 
 /* Line 1455 of yacc.c  */
 #line 2121 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"xor"; ;}
+    { (yyval.s) = (char *)"xor"; }
     break;
 
   case 238:
 
 /* Line 1455 of yacc.c  */
 #line 2122 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"band"; ;}
+    { (yyval.s) = (char *)"band"; }
     break;
 
   case 239:
 
 /* Line 1455 of yacc.c  */
 #line 2123 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bor"; ;}
+    { (yyval.s) = (char *)"bor"; }
     break;
 
   case 240:
 
 /* Line 1455 of yacc.c  */
 #line 2124 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bxor"; ;}
+    { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 241:
@@ -4974,112 +5103,112 @@
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
            (yyval.i)->type |= ITRESULT;
-         ;}
+         }
     break;
 
   case 242:
 
 /* Line 1455 of yacc.c  */
 #line 2135 "compilers/imcc/imcc.y"
-    {  (yyval.i) = 0; ;}
+    {  (yyval.i) = 0; }
     break;
 
   case 243:
 
 /* Line 1455 of yacc.c  */
 #line 2142 "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)); ;}
+    { (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 244:
 
 /* Line 1455 of yacc.c  */
 #line 2146 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"add"; ;}
+    { (yyval.s) = (char *)"add"; }
     break;
 
   case 245:
 
 /* Line 1455 of yacc.c  */
 #line 2147 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"sub"; ;}
+    { (yyval.s) = (char *)"sub"; }
     break;
 
   case 246:
 
 /* Line 1455 of yacc.c  */
 #line 2148 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"mul"; ;}
+    { (yyval.s) = (char *)"mul"; }
     break;
 
   case 247:
 
 /* Line 1455 of yacc.c  */
 #line 2149 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"div"; ;}
+    { (yyval.s) = (char *)"div"; }
     break;
 
   case 248:
 
 /* Line 1455 of yacc.c  */
 #line 2150 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"mod"; ;}
+    { (yyval.s) = (char *)"mod"; }
     break;
 
   case 249:
 
 /* Line 1455 of yacc.c  */
 #line 2151 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"fdiv"; ;}
+    { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 250:
 
 /* Line 1455 of yacc.c  */
 #line 2152 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"concat"; ;}
+    { (yyval.s) = (char *)"concat"; }
     break;
 
   case 251:
 
 /* Line 1455 of yacc.c  */
 #line 2153 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"band"; ;}
+    { (yyval.s) = (char *)"band"; }
     break;
 
   case 252:
 
 /* Line 1455 of yacc.c  */
 #line 2154 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bor"; ;}
+    { (yyval.s) = (char *)"bor"; }
     break;
 
   case 253:
 
 /* Line 1455 of yacc.c  */
 #line 2155 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"bxor"; ;}
+    { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 254:
 
 /* Line 1455 of yacc.c  */
 #line 2156 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"shr"; ;}
+    { (yyval.s) = (char *)"shr"; }
     break;
 
   case 255:
 
 /* Line 1455 of yacc.c  */
 #line 2157 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"shl"; ;}
+    { (yyval.s) = (char *)"shl"; }
     break;
 
   case 256:
 
 /* Line 1455 of yacc.c  */
 #line 2158 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"lsr"; ;}
+    { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 257:
@@ -5092,28 +5221,28 @@
                       IMCC_INFO(interp) -> nargs,
                       IMCC_INFO(interp) -> keyvec, 1);
          mem_sys_free((yyvsp[(3) - (4)].s));
-       ;}
+       }
     break;
 
   case 258:
 
 /* Line 1455 of yacc.c  */
 #line 2174 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));       mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));       mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 259:
 
 /* Line 1455 of yacc.c  */
 #line 2175 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 260:
 
 /* Line 1455 of yacc.c  */
 #line 2176 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));     mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));     mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 261:
@@ -5124,7 +5253,7 @@
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
                IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "Sub isn't a PMC");
-         ;}
+         }
     break;
 
   case 262:
@@ -5143,7 +5272,7 @@
 
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = (yyvsp[(3) - (3)].sr);
-        ;}
+        }
     break;
 
   case 263:
@@ -5154,7 +5283,7 @@
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'U');
             mem_sys_free((yyvsp[(3) - (3)].s));
-         ;}
+         }
     break;
 
   case 264:
@@ -5165,14 +5294,14 @@
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
             mem_sys_free((yyvsp[(3) - (3)].s));
-         ;}
+         }
     break;
 
   case 265:
 
 /* Line 1455 of yacc.c  */
 #line 2209 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); ;}
+    { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
     break;
 
   case 266:
@@ -5182,21 +5311,21 @@
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 267:
 
 /* Line 1455 of yacc.c  */
 #line 2219 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(2) - (5)].i); ;}
+    { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
   case 268:
 
 /* Line 1455 of yacc.c  */
 #line 2223 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+    { (yyval.sr) = 0; }
     break;
 
   case 269:
@@ -5211,7 +5340,7 @@
            }
            else
                add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 270:
@@ -5226,7 +5355,7 @@
            }
            else
                add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 271:
@@ -5238,7 +5367,7 @@
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
                 mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
            mem_sys_free((yyvsp[(3) - (5)].s));
-         ;}
+         }
     break;
 
   case 272:
@@ -5248,7 +5377,7 @@
     {
            (yyval.sr) = 0;
            add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 273:
@@ -5260,70 +5389,70 @@
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
                 mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
-         ;}
+         }
     break;
 
   case 274:
 
 /* Line 1455 of yacc.c  */
 #line 2266 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); ;}
+    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 275:
 
 /* Line 1455 of yacc.c  */
 #line 2270 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+    { (yyval.t) = 0; }
     break;
 
   case 276:
 
 /* Line 1455 of yacc.c  */
 #line 2271 "compilers/imcc/imcc.y"
-    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); ;}
+    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 277:
 
 /* Line 1455 of yacc.c  */
 #line 2275 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_FLAT;     ;}
+    { (yyval.t) = VT_FLAT;     }
     break;
 
   case 278:
 
 /* Line 1455 of yacc.c  */
 #line 2276 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_NAMED;    ;}
+    { (yyval.t) = VT_NAMED;    }
     break;
 
   case 279:
 
 /* Line 1455 of yacc.c  */
 #line 2277 "compilers/imcc/imcc.y"
-    { (yyval.t) = VT_CALL_SIG; ;}
+    { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 280:
 
 /* Line 1455 of yacc.c  */
 #line 2280 "compilers/imcc/imcc.y"
-    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; ;}
+    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 281:
 
 /* Line 1455 of yacc.c  */
 #line 2281 "compilers/imcc/imcc.y"
-    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; ;}
+    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
   case 282:
 
 /* Line 1455 of yacc.c  */
 #line 2285 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); ;}
+    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 283:
@@ -5338,7 +5467,7 @@
            }
            else
                add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
-         ;}
+         }
     break;
 
   case 284:
@@ -5349,7 +5478,7 @@
             add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
                     mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
             mem_sys_free((yyvsp[(3) - (5)].s));
-         ;}
+         }
     break;
 
   case 285:
@@ -5364,7 +5493,7 @@
            }
            else
                add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
-         ;}
+         }
     break;
 
   case 286:
@@ -5374,28 +5503,28 @@
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
-         ;}
+         }
     break;
 
   case 287:
 
 /* Line 1455 of yacc.c  */
 #line 2320 "compilers/imcc/imcc.y"
-    { (yyval.sr) = 0; ;}
+    { (yyval.sr) = 0; }
     break;
 
   case 288:
 
 /* Line 1455 of yacc.c  */
 #line 2324 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 289:
 
 /* Line 1455 of yacc.c  */
 #line 2325 "compilers/imcc/imcc.y"
-    { (yyval.i) = (yyvsp[(1) - (1)].i); ;}
+    { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 290:
@@ -5404,7 +5533,7 @@
 #line 2330 "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));
-         ;}
+         }
     break;
 
   case 291:
@@ -5413,7 +5542,7 @@
 #line 2334 "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));
-         ;}
+         }
     break;
 
   case 292:
@@ -5422,7 +5551,7 @@
 #line 2338 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
-         ;}
+         }
     break;
 
   case 293:
@@ -5431,7 +5560,7 @@
 #line 2345 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
-         ;}
+         }
     break;
 
   case 294:
@@ -5440,7 +5569,7 @@
 #line 2349 "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));
-         ;}
+         }
     break;
 
   case 295:
@@ -5449,91 +5578,91 @@
 #line 2353 "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));
-         ;}
+         }
     break;
 
   case 296:
 
 /* Line 1455 of yacc.c  */
 #line 2359 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+    { (yyval.t) = 0; }
     break;
 
   case 297:
 
 /* Line 1455 of yacc.c  */
 #line 2360 "compilers/imcc/imcc.y"
-    { (yyval.t) = 0; ;}
+    { (yyval.t) = 0; }
     break;
 
   case 298:
 
 /* Line 1455 of yacc.c  */
 #line 2364 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"eq"; ;}
+    { (yyval.s) = (char *)"eq"; }
     break;
 
   case 299:
 
 /* Line 1455 of yacc.c  */
 #line 2365 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"ne"; ;}
+    { (yyval.s) = (char *)"ne"; }
     break;
 
   case 300:
 
 /* Line 1455 of yacc.c  */
 #line 2366 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"gt"; ;}
+    { (yyval.s) = (char *)"gt"; }
     break;
 
   case 301:
 
 /* Line 1455 of yacc.c  */
 #line 2367 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"ge"; ;}
+    { (yyval.s) = (char *)"ge"; }
     break;
 
   case 302:
 
 /* Line 1455 of yacc.c  */
 #line 2368 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"lt"; ;}
+    { (yyval.s) = (char *)"lt"; }
     break;
 
   case 303:
 
 /* Line 1455 of yacc.c  */
 #line 2369 "compilers/imcc/imcc.y"
-    { (yyval.s) = (char *)"le"; ;}
+    { (yyval.s) = (char *)"le"; }
     break;
 
   case 306:
 
 /* Line 1455 of yacc.c  */
 #line 2378 "compilers/imcc/imcc.y"
-    { (yyval.sr) = NULL; ;}
+    { (yyval.sr) = NULL; }
     break;
 
   case 307:
 
 /* Line 1455 of yacc.c  */
 #line 2379 "compilers/imcc/imcc.y"
-    { (yyval.sr) = (yyvsp[(1) - (1)].sr); ;}
+    { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 308:
 
 /* Line 1455 of yacc.c  */
 #line 2383 "compilers/imcc/imcc.y"
-    { (yyval.sr) = IMCC_INFO(interp)->regs[0]; ;}
+    { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
   case 310:
 
 /* Line 1455 of yacc.c  */
 #line 2388 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); ;}
+    { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 311:
@@ -5545,7 +5674,7 @@
            IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(3) - (4)].sr);
            (yyval.sr) = (yyvsp[(1) - (4)].sr);
-         ;}
+         }
     break;
 
   case 312:
@@ -5555,49 +5684,49 @@
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
-         ;}
+         }
     break;
 
   case 314:
 
 /* Line 1455 of yacc.c  */
 #line 2404 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 315:
 
 /* Line 1455 of yacc.c  */
 #line 2405 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 316:
 
 /* Line 1455 of yacc.c  */
 #line 2409 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 317:
 
 /* Line 1455 of yacc.c  */
 #line 2410 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 318:
 
 /* Line 1455 of yacc.c  */
 #line 2414 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 319:
 
 /* Line 1455 of yacc.c  */
 #line 2415 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 324:
@@ -5606,7 +5735,7 @@
 #line 2429 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
-         ;}
+         }
     break;
 
   case 325:
@@ -5617,7 +5746,7 @@
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
                           IMCC_INFO(interp)->keys, 0);
-         ;}
+         }
     break;
 
   case 326:
@@ -5626,7 +5755,7 @@
 #line 2441 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
-         ;}
+         }
     break;
 
   case 327:
@@ -5637,14 +5766,14 @@
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
                           IMCC_INFO(interp)->keys, 1);
-         ;}
+         }
     break;
 
   case 328:
 
 /* Line 1455 of yacc.c  */
 #line 2453 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); ;}
+    { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 329:
@@ -5654,7 +5783,7 @@
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
-         ;}
+         }
     break;
 
   case 330:
@@ -5663,76 +5792,76 @@
 #line 2463 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
-         ;}
+         }
     break;
 
   case 331:
 
 /* Line 1455 of yacc.c  */
 #line 2469 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); ;}
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
   case 332:
 
 /* Line 1455 of yacc.c  */
 #line 2470 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); ;}
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
   case 333:
 
 /* Line 1455 of yacc.c  */
 #line 2471 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); ;}
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
   case 334:
 
 /* Line 1455 of yacc.c  */
 #line 2472 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); ;}
+    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
   case 335:
 
 /* Line 1455 of yacc.c  */
 #line 2473 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 336:
 
 /* Line 1455 of yacc.c  */
 #line 2477 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 337:
 
 /* Line 1455 of yacc.c  */
 #line 2478 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 338:
 
 /* Line 1455 of yacc.c  */
 #line 2479 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 339:
 
 /* Line 1455 of yacc.c  */
 #line 2480 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); ;}
+    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
 
 
 /* Line 1455 of yacc.c  */
-#line 5725 "compilers/imcc/imcparser.c"
+#line 5854 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5972,26 +6101,19 @@
      * before the newline, and thus, line is the line *after* the
      * error. Instead of duplicating code for both cases (the 'newline' and
      * non-newline case, do the test twice; efficiency is not important when
-     * we have an error anyway.
-     */
+     * we have an error anyway. */
     if (!at_eof(yyscanner)) {
-        if (*chr == '\n') {
-            IMCC_INFO(interp)->line--;
-        }
-
         IMCC_warning(interp, "error:imcc:%s", s);
+
         /* don't print the current token if it is a newline */
-        if (*chr != '\n') {
+        if (*chr != '\n')
             IMCC_warning(interp, " ('%s')", chr);
-        }
-        IMCC_print_inc(interp);
-
-        if (*chr == '\n') {
-            IMCC_INFO(interp)->line++;
-        }
 
+        IMCC_print_inc(interp);
     }
-    else { /* scanner is at end of file; just to be sure, do not print "current" token. */
+
+    /* scanner is at EOF; just to be sure, don't print "current" token */
+    else {
         IMCC_warning(interp, "error:imcc:%s", s);
         IMCC_print_inc(interp);
     }

Modified: branches/avl_string_cache/compilers/imcc/imcparser.h
==============================================================================
--- branches/avl_string_cache/compilers/imcc/imcparser.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/imcparser.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -52,125 +52,248 @@
    enum yytokentype {
      LOW_PREC = 258,
      PARAM = 259,
-     HLL = 260,
-     TK_LINE = 261,
-     TK_FILE = 262,
-     GOTO = 263,
-     ARG = 264,
-     IF = 265,
-     UNLESS = 266,
-     PNULL = 267,
-     SET_RETURN = 268,
-     SET_YIELD = 269,
-     ADV_FLAT = 270,
-     ADV_SLURPY = 271,
-     ADV_OPTIONAL = 272,
-     ADV_OPT_FLAG = 273,
-     ADV_NAMED = 274,
-     ADV_ARROW = 275,
-     NEW = 276,
-     ADV_INVOCANT = 277,
-     ADV_CALL_SIG = 278,
-     NAMESPACE = 279,
-     DOT_METHOD = 280,
-     SUB = 281,
-     SYM = 282,
-     LOCAL = 283,
-     LEXICAL = 284,
-     CONST = 285,
-     ANNOTATE = 286,
-     INC = 287,
-     DEC = 288,
-     GLOBAL_CONST = 289,
-     PLUS_ASSIGN = 290,
-     MINUS_ASSIGN = 291,
-     MUL_ASSIGN = 292,
-     DIV_ASSIGN = 293,
-     CONCAT_ASSIGN = 294,
-     BAND_ASSIGN = 295,
-     BOR_ASSIGN = 296,
-     BXOR_ASSIGN = 297,
-     FDIV = 298,
-     FDIV_ASSIGN = 299,
-     MOD_ASSIGN = 300,
-     SHR_ASSIGN = 301,
-     SHL_ASSIGN = 302,
-     SHR_U_ASSIGN = 303,
-     SHIFT_LEFT = 304,
-     SHIFT_RIGHT = 305,
-     INTV = 306,
-     FLOATV = 307,
-     STRINGV = 308,
-     PMCV = 309,
-     LOG_XOR = 310,
-     RELOP_EQ = 311,
-     RELOP_NE = 312,
-     RELOP_GT = 313,
-     RELOP_GTE = 314,
-     RELOP_LT = 315,
-     RELOP_LTE = 316,
-     RESULT = 317,
-     RETURN = 318,
-     TAILCALL = 319,
-     YIELDT = 320,
-     GET_RESULTS = 321,
-     POW = 322,
-     SHIFT_RIGHT_U = 323,
-     LOG_AND = 324,
-     LOG_OR = 325,
-     COMMA = 326,
-     ESUB = 327,
-     DOTDOT = 328,
-     PCC_BEGIN = 329,
-     PCC_END = 330,
-     PCC_CALL = 331,
-     PCC_SUB = 332,
-     PCC_BEGIN_RETURN = 333,
-     PCC_END_RETURN = 334,
-     PCC_BEGIN_YIELD = 335,
-     PCC_END_YIELD = 336,
-     NCI_CALL = 337,
-     METH_CALL = 338,
-     INVOCANT = 339,
-     MAIN = 340,
-     LOAD = 341,
-     INIT = 342,
-     IMMEDIATE = 343,
-     POSTCOMP = 344,
-     METHOD = 345,
-     ANON = 346,
-     OUTER = 347,
-     NEED_LEX = 348,
-     MULTI = 349,
-     VTABLE_METHOD = 350,
-     LOADLIB = 351,
-     SUB_INSTANCE_OF = 352,
-     SUBID = 353,
-     NS_ENTRY = 354,
-     UNIQUE_REG = 355,
-     LABEL = 356,
-     EMIT = 357,
-     EOM = 358,
-     IREG = 359,
-     NREG = 360,
-     SREG = 361,
-     PREG = 362,
-     IDENTIFIER = 363,
-     REG = 364,
-     MACRO = 365,
-     ENDM = 366,
-     STRINGC = 367,
-     INTC = 368,
-     FLOATC = 369,
-     USTRINGC = 370,
-     PARROT_OP = 371,
-     VAR = 372,
-     LINECOMMENT = 373,
-     FILECOMMENT = 374,
-     DOT = 375,
-     CONCAT = 376
+     SOL = 260,
+     HLL = 261,
+     TK_LINE = 262,
+     TK_FILE = 263,
+     GOTO = 264,
+     ARG = 265,
+     IF = 266,
+     UNLESS = 267,
+     PNULL = 268,
+     SET_RETURN = 269,
+     SET_YIELD = 270,
+     ADV_FLAT = 271,
+     ADV_SLURPY = 272,
+     ADV_OPTIONAL = 273,
+     ADV_OPT_FLAG = 274,
+     ADV_NAMED = 275,
+     ADV_ARROW = 276,
+     NEW = 277,
+     ADV_INVOCANT = 278,
+     ADV_CALL_SIG = 279,
+     NAMESPACE = 280,
+     DOT_METHOD = 281,
+     SUB = 282,
+     SYM = 283,
+     LOCAL = 284,
+     LEXICAL = 285,
+     CONST = 286,
+     ANNOTATE = 287,
+     INC = 288,
+     DEC = 289,
+     GLOBAL_CONST = 290,
+     PLUS_ASSIGN = 291,
+     MINUS_ASSIGN = 292,
+     MUL_ASSIGN = 293,
+     DIV_ASSIGN = 294,
+     CONCAT_ASSIGN = 295,
+     BAND_ASSIGN = 296,
+     BOR_ASSIGN = 297,
+     BXOR_ASSIGN = 298,
+     FDIV = 299,
+     FDIV_ASSIGN = 300,
+     MOD_ASSIGN = 301,
+     SHR_ASSIGN = 302,
+     SHL_ASSIGN = 303,
+     SHR_U_ASSIGN = 304,
+     SHIFT_LEFT = 305,
+     SHIFT_RIGHT = 306,
+     INTV = 307,
+     FLOATV = 308,
+     STRINGV = 309,
+     PMCV = 310,
+     LOG_XOR = 311,
+     RELOP_EQ = 312,
+     RELOP_NE = 313,
+     RELOP_GT = 314,
+     RELOP_GTE = 315,
+     RELOP_LT = 316,
+     RELOP_LTE = 317,
+     RESULT = 318,
+     RETURN = 319,
+     TAILCALL = 320,
+     YIELDT = 321,
+     GET_RESULTS = 322,
+     POW = 323,
+     SHIFT_RIGHT_U = 324,
+     LOG_AND = 325,
+     LOG_OR = 326,
+     COMMA = 327,
+     ESUB = 328,
+     DOTDOT = 329,
+     PCC_BEGIN = 330,
+     PCC_END = 331,
+     PCC_CALL = 332,
+     PCC_SUB = 333,
+     PCC_BEGIN_RETURN = 334,
+     PCC_END_RETURN = 335,
+     PCC_BEGIN_YIELD = 336,
+     PCC_END_YIELD = 337,
+     NCI_CALL = 338,
+     METH_CALL = 339,
+     INVOCANT = 340,
+     MAIN = 341,
+     LOAD = 342,
+     INIT = 343,
+     IMMEDIATE = 344,
+     POSTCOMP = 345,
+     METHOD = 346,
+     ANON = 347,
+     OUTER = 348,
+     NEED_LEX = 349,
+     MULTI = 350,
+     VTABLE_METHOD = 351,
+     LOADLIB = 352,
+     SUB_INSTANCE_OF = 353,
+     SUBID = 354,
+     NS_ENTRY = 355,
+     UNIQUE_REG = 356,
+     LABEL = 357,
+     EMIT = 358,
+     EOM = 359,
+     IREG = 360,
+     NREG = 361,
+     SREG = 362,
+     PREG = 363,
+     IDENTIFIER = 364,
+     REG = 365,
+     MACRO = 366,
+     ENDM = 367,
+     STRINGC = 368,
+     INTC = 369,
+     FLOATC = 370,
+     USTRINGC = 371,
+     PARROT_OP = 372,
+     VAR = 373,
+     LINECOMMENT = 374,
+     FILECOMMENT = 375,
+     DOT = 376,
+     CONCAT = 377
    };
 #endif
+/* Tokens.  */
+#define LOW_PREC 258
+#define PARAM 259
+#define SOL 260
+#define HLL 261
+#define TK_LINE 262
+#define TK_FILE 263
+#define GOTO 264
+#define ARG 265
+#define IF 266
+#define UNLESS 267
+#define PNULL 268
+#define SET_RETURN 269
+#define SET_YIELD 270
+#define ADV_FLAT 271
+#define ADV_SLURPY 272
+#define ADV_OPTIONAL 273
+#define ADV_OPT_FLAG 274
+#define ADV_NAMED 275
+#define ADV_ARROW 276
+#define NEW 277
+#define ADV_INVOCANT 278
+#define ADV_CALL_SIG 279
+#define NAMESPACE 280
+#define DOT_METHOD 281
+#define SUB 282
+#define SYM 283
+#define LOCAL 284
+#define LEXICAL 285
+#define CONST 286
+#define ANNOTATE 287
+#define INC 288
+#define DEC 289
+#define GLOBAL_CONST 290
+#define PLUS_ASSIGN 291
+#define MINUS_ASSIGN 292
+#define MUL_ASSIGN 293
+#define DIV_ASSIGN 294
+#define CONCAT_ASSIGN 295
+#define BAND_ASSIGN 296
+#define BOR_ASSIGN 297
+#define BXOR_ASSIGN 298
+#define FDIV 299
+#define FDIV_ASSIGN 300
+#define MOD_ASSIGN 301
+#define SHR_ASSIGN 302
+#define SHL_ASSIGN 303
+#define SHR_U_ASSIGN 304
+#define SHIFT_LEFT 305
+#define SHIFT_RIGHT 306
+#define INTV 307
+#define FLOATV 308
+#define STRINGV 309
+#define PMCV 310
+#define LOG_XOR 311
+#define RELOP_EQ 312
+#define RELOP_NE 313
+#define RELOP_GT 314
+#define RELOP_GTE 315
+#define RELOP_LT 316
+#define RELOP_LTE 317
+#define RESULT 318
+#define RETURN 319
+#define TAILCALL 320
+#define YIELDT 321
+#define GET_RESULTS 322
+#define POW 323
+#define SHIFT_RIGHT_U 324
+#define LOG_AND 325
+#define LOG_OR 326
+#define COMMA 327
+#define ESUB 328
+#define DOTDOT 329
+#define PCC_BEGIN 330
+#define PCC_END 331
+#define PCC_CALL 332
+#define PCC_SUB 333
+#define PCC_BEGIN_RETURN 334
+#define PCC_END_RETURN 335
+#define PCC_BEGIN_YIELD 336
+#define PCC_END_YIELD 337
+#define NCI_CALL 338
+#define METH_CALL 339
+#define INVOCANT 340
+#define MAIN 341
+#define LOAD 342
+#define INIT 343
+#define IMMEDIATE 344
+#define POSTCOMP 345
+#define METHOD 346
+#define ANON 347
+#define OUTER 348
+#define NEED_LEX 349
+#define MULTI 350
+#define VTABLE_METHOD 351
+#define LOADLIB 352
+#define SUB_INSTANCE_OF 353
+#define SUBID 354
+#define NS_ENTRY 355
+#define UNIQUE_REG 356
+#define LABEL 357
+#define EMIT 358
+#define EOM 359
+#define IREG 360
+#define NREG 361
+#define SREG 362
+#define PREG 363
+#define IDENTIFIER 364
+#define REG 365
+#define MACRO 366
+#define ENDM 367
+#define STRINGC 368
+#define INTC 369
+#define FLOATC 370
+#define USTRINGC 371
+#define PARROT_OP 372
+#define VAR 373
+#define LINECOMMENT 374
+#define FILECOMMENT 375
+#define DOT 376
+#define CONCAT 377
+
 
 
 
@@ -178,7 +301,7 @@
 typedef union YYSTYPE
 {
 
-/* Line 1740 of yacc.c  */
+/* Line 1676 of yacc.c  */
 #line 1075 "compilers/imcc/imcc.y"
 
     IdList * idlist;
@@ -189,8 +312,8 @@
 
 
 
-/* Line 1740 of yacc.c  */
-#line 183 "compilers/imcc/imcparser.h"
+/* Line 1676 of yacc.c  */
+#line 306 "compilers/imcc/imcparser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */

Modified: branches/avl_string_cache/compilers/imcc/instructions.c
==============================================================================
--- branches/avl_string_cache/compilers/imcc/instructions.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/instructions.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -813,6 +813,8 @@
 
 =item C<static int e_file_close(PARROT_INTERP, void *param)>
 
+Close STDOUT
+
 =cut
 
 */
@@ -832,6 +834,8 @@
 =item C<static int e_file_emit(PARROT_INTERP, void *param, const IMC_Unit *unit,
 const Instruction *ins)>
 
+emit the Instruction C<ins> to the given IMC_Unit C<unit>, passing C<param>
+
 =cut
 
 */

Modified: branches/avl_string_cache/compilers/imcc/main.c
==============================================================================
--- branches/avl_string_cache/compilers/imcc/main.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/main.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -78,7 +78,7 @@
     int obj_file,
     ARGIN_NULLOK(const char *output_file),
     int argc,
-    ARGIN(char **argv))
+    ARGIN(const char **argv))
         __attribute__nonnull__(1)
         __attribute__nonnull__(5);
 
@@ -462,7 +462,7 @@
 /*
 
 =item C<static void imcc_run_pbc(PARROT_INTERP, int obj_file, const char
-*output_file, int argc, char **argv)>
+*output_file, int argc, const char **argv)>
 
 Write out or run Parrot bytecode.
 
@@ -472,7 +472,7 @@
 
 static void
 imcc_run_pbc(PARROT_INTERP, int obj_file, ARGIN_NULLOK(const char *output_file),
-        int argc, ARGIN(char **argv))
+        int argc, ARGIN(const char **argv))
 {
     ASSERT_ARGS(imcc_run_pbc)
     if (IMCC_INFO(interp)->imcc_warn)
@@ -692,7 +692,7 @@
 
 /*
 
-=item C<int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, char
+=item C<int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, const char
 **argv)>
 
 Entry point of IMCC, as invoked by Parrot's main function.
@@ -705,7 +705,7 @@
 
 int
 imcc_run(PARROT_INTERP, ARGIN(const char *sourcefile), int argc,
-        ARGIN(char **argv))
+        ARGIN(const char **argv))
 {
     int                obj_file;
     yyscan_t           yyscanner   = IMCC_INFO(interp)->yyscanner;

Modified: branches/avl_string_cache/compilers/imcc/optimizer.c
==============================================================================
--- branches/avl_string_cache/compilers/imcc/optimizer.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/optimizer.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  */
 
 /*
@@ -256,6 +256,10 @@
 
 =item C<int optimize(PARROT_INTERP, IMC_Unit *unit)>
 
+Runs after the CFG is built and handles constant propogation.
+
+used_once ... deletes assignments, when LHS is unused
+
 =cut
 
 */
@@ -1225,6 +1229,11 @@
 =item C<static int branch_cond_loop_swap(PARROT_INTERP, IMC_Unit *unit,
 Instruction *branch, Instruction *start, Instruction *cond)>
 
+Converts conditional loops to post-test
+
+Returns TRUE if any optimizations were performed. Otherwise, returns
+FALSE.
+
 =cut
 
 */
@@ -1461,6 +1470,10 @@
 
 =item C<static int dead_code_remove(PARROT_INTERP, IMC_Unit *unit)>
 
+dead code elimination
+... unreachable blocks
+... unreachable instructions
+
 =cut
 
 */
@@ -1541,6 +1554,8 @@
 
 =item C<static int used_once(PARROT_INTERP, IMC_Unit *unit)>
 
+used_once ... deletes assignments, when LHS is unused
+
 =cut
 
 */

Modified: branches/avl_string_cache/compilers/imcc/parser_util.c
==============================================================================
--- branches/avl_string_cache/compilers/imcc/parser_util.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/parser_util.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -708,7 +708,7 @@
         sub_data->seg        = new_cs;
         sub_data->start_offs = 0;
         sub_data->end_offs   = new_cs->base.size;
-        sub_data->name       = Parrot_str_copy(interp, name);
+        sub_data->name       = name;
 
         *error_message = NULL;
     }
@@ -935,11 +935,13 @@
     IMCC_push_parser_state(interp);
     {
         /* Store a copy, in order to know how to free it later */
-        char *copyname = mem_sys_strdup(fullname);
+        char *copyname                 = mem_sys_strdup(fullname);
         IMCC_INFO(interp)->state->file = copyname;
         ext                            = strrchr(copyname, '.');
     }
-    IMCC_INFO(interp)->line        = 1;
+
+    /* start over; let the start of line rule increment this to 1 */
+    IMCC_INFO(interp)->line = 0;
 
     /*
      * the Parrot_str_compare() called from pmc_type() triggers GC

Modified: branches/avl_string_cache/compilers/imcc/pbc.c
==============================================================================
--- branches/avl_string_cache/compilers/imcc/pbc.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/pbc.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1064,8 +1064,7 @@
     if (!pcc_sub->multi[0])
         return Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
 
-    multi_sig = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
-    VTABLE_set_integer_native(interp, multi_sig, n);
+    multi_sig = Parrot_pmc_new_init_int(interp, enum_class_FixedPMCArray, n);
     ct        = interp->code->const_table;
 
     for (i = 0; i < n; ++i) {
@@ -1337,8 +1336,10 @@
         unit->subid = r;
     else {
         /* trim the quotes  */
+        char *oldname     = unit->subid->name;
         unit->subid->name = mem_sys_strdup(unit->subid->name + 1);
         unit->subid->name[strlen(unit->subid->name) - 1] = 0;
+        mem_sys_free(oldname);
 
         /* create string constant for it. */
         unit->subid->color = add_const_str(interp, unit->subid);
@@ -1541,7 +1542,7 @@
     SymReg   *reg;
 
     char      s_key[KEYLEN * 10];
-    opcode_t  key[KEYLEN];
+    opcode_t  key[KEYLEN + 1]; /* [0] -> length, [1..] -> keys */
     opcode_t  size;
     int       key_length;     /* P0["hi;there"; S0; 2] has length 3 */
     int       k;

Modified: branches/avl_string_cache/compilers/imcc/symreg.h
==============================================================================
--- branches/avl_string_cache/compilers/imcc/symreg.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/imcc/symreg.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -456,14 +456,15 @@
 typedef enum {
     P_NONE           = 0x00,                  /* 0<<0 */
     P_NEED_LEX       = 0x01,                  /* 1<<0 */
-    P_VTABLE         = 0x02,                  /* 1<<1 */
-    P_METHOD         = 0x04,                  /* 1<<2 */
+    P_VTABLE         = SUB_COMP_FLAG_VTABLE,  /* 1<<1 0x2 */
+    P_METHOD         = SUB_COMP_FLAG_METHOD,  /* 1<<2 0x4 */
     P_ANON           = SUB_FLAG_PF_ANON,      /* 1<<3 0x8    - private3 */
     P_MAIN           = SUB_FLAG_PF_MAIN,      /* 1<<4 0x10   - private4 */
     P_LOAD           = SUB_FLAG_PF_LOAD,      /* 1<<5 0x20   - private5 */
     P_IMMEDIATE      = SUB_FLAG_PF_IMMEDIATE, /* 1<<6 0x40   - private6 */
     P_POSTCOMP       = SUB_FLAG_PF_POSTCOMP,  /* 1<<7 0x80   - private7 */
-    P_INIT           = SUB_COMP_FLAG_PF_INIT  /* 1<<10 0x400 - 10       */
+    P_INIT           = SUB_COMP_FLAG_PF_INIT, /* 1<<10 0x400 - 10       */
+    P_NSENTRY        = SUB_COMP_FLAG_NSENTRY  /* 1<<11 0x800 - 11       */
 } pragma_enum_t;
 
 typedef enum {

Modified: branches/avl_string_cache/compilers/pge/PGE/Exp.pir
==============================================================================
--- branches/avl_string_cache/compilers/pge/PGE/Exp.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/pge/PGE/Exp.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -163,7 +163,7 @@
     .local string returnop
     returnop = '.yield'
     code.'emit'(<<"        CODE", name, pirflags, namecorou, .INTERPINFO_CURRENT_SUB)
-      .sub %0 :method %1
+      .sub %0 :method :nsentry %1
           .param pmc adverbs   :slurpy :named
           .local pmc mob
           .const 'Sub' corou = %2
@@ -192,7 +192,7 @@
     ##   Initial code for a rule that cannot be backtracked into.
     returnop = '.return'
     code.'emit'(<<"        CODE", name, pirflags)
-      .sub %0 :method %1
+      .sub %0 :method :nsentry %1
           .param pmc adverbs      :unique_reg :slurpy :named
           .local pmc mob
           .local string target    :unique_reg
@@ -718,7 +718,7 @@
 
 .namespace [ 'PGE';'Exp';'CGroup' ]
 
-.sub 'pir' :method
+.sub 'pir' :method :nsentry
     .param pmc code
     .param string label
     .param string next

Modified: branches/avl_string_cache/compilers/pge/PGE/Regex.pir
==============================================================================
--- branches/avl_string_cache/compilers/pge/PGE/Regex.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/compilers/pge/PGE/Regex.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -37,7 +37,7 @@
 
 =cut
 
-.sub 'ident' :method
+.sub 'ident' :method :nsentry('ident')
     .param pmc adverbs         :slurpy :named
     .local string target
     .local pmc mob, mfrom, mpos

Modified: branches/avl_string_cache/config/auto/arch.pm
==============================================================================
--- branches/avl_string_cache/config/auto/arch.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/auto/arch.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -29,6 +29,13 @@
     my %data;
     $data{description} = q{Determine CPU architecture and OS};
     $data{result}      = q{};
+    my $unamep;
+    eval {
+       chomp( $unamep  = `uname -p` ) unless ($^O eq 'MSWin32');
+    };
+    $data{unamep} = (! $@ and $unamep)
+        ? $unamep
+        : undef;
     return \%data;
 }
 
@@ -60,12 +67,9 @@
     # the above split fails because archname is "darwin-thread-multi-2level".
     if ( $cpuarch =~ /darwin/ ) {
         $osname = 'darwin';
-         if ( $conf->data->get('byteorder') =~ /^1234/ ) {
-            $cpuarch = 'i386';
-        }
-        else {
-            $cpuarch = 'ppc';
-        }
+        $cpuarch = ( $self->{unamep} eq 'powerpc' )
+            ? 'ppc'
+            : 'i386';
     }
 
     # cpuarch and osname are reversed in archname on windows

Modified: branches/avl_string_cache/config/auto/attributes.pm
==============================================================================
--- branches/avl_string_cache/config/auto/attributes.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/auto/attributes.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -40,8 +40,11 @@
     HASATTRIBUTE_PURE
     HASATTRIBUTE_UNUSED
     HASATTRIBUTE_WARN_UNUSED_RESULT
+    HASATTRIBUTE_HOT
+    HASATTRIBUTE_COLD
     HASATTRIBUTE_NEVER_WORKS
 );
+# HASATTRIBUTE_NEVER_WORKS is at the end just to prove that it's possible to fail.
 
 sub runstep {
     my ( $self, $conf ) = @_;

Modified: branches/avl_string_cache/config/auto/attributes/test_c.in
==============================================================================
--- branches/avl_string_cache/config/auto/attributes/test_c.in	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/auto/attributes/test_c.in	Thu Apr 22 09:55:26 2010	(r45889)
@@ -32,6 +32,16 @@
 purefunc(int x);
 
 
+__attribute__hot__
+int
+hotfunc(int x);
+
+
+__attribute__cold__
+int
+coldfunc(int x);
+
+
 static int
 useless(void) { int x __attribute__unused__; return 0; }
 

Deleted: branches/avl_string_cache/config/auto/crypto.pm
==============================================================================
--- branches/avl_string_cache/config/auto/crypto.pm	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,93 +0,0 @@
-# Copyright (C) 2008, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-config/auto/crypto.pm - Test for crypto library (libssl)
-
-=head1 DESCRIPTION
-
-This library is linked to a dynamic PMC.
-
-See L<http://www.openssl.org>
-
-=cut
-
-package auto::crypto;
-
-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{Does your platform support crypto};
-    $data{result}      = q{};
-    return \%data;
-}
-
-sub runstep {
-    my ( $self, $conf ) = @_;
-
-    my ( $verbose, $without ) = $conf->options->get(
-        qw|
-            verbose
-            without-crypto
-        |
-    );
-
-    if ($without) {
-        $conf->data->set( has_crypto => 0 );
-        $self->set_result('no');
-        return 1;
-    }
-
-    my $osname = $conf->data->get('osname');
-
-    my $extra_libs = $self->_select_lib( {
-        conf            => $conf,
-        osname          => $osname,
-        cc              => $conf->data->get('cc'),
-        win32_nongcc    => 'libcrypto.lib',
-        default         => '-lcrypto',
-    } );
-
-    $conf->cc_gen('config/auto/crypto/crypto_c.in');
-    eval { $conf->cc_build( q{}, $extra_libs); };
-    my $has_crypto = 0;
-    if ( !$@ ) {
-        my $test = $conf->cc_run();
-        $has_crypto = $self->_evaluate_cc_run($conf, $test, $has_crypto, $verbose);
-    }
-    $conf->data->set( has_crypto => $has_crypto );    # for dynpmc.in & digest.t
-    $self->set_result($has_crypto ? 'yes' : 'no');
-
-    return 1;
-}
-
-sub _evaluate_cc_run {
-    my $self = shift;
-    my ($conf, $test, $has_crypto, $verbose) = @_;
-    if ( $test =~ m/^OpenSSL (\d\.\d\.\d\w?)/ ) {
-        my $version = $1;
-        $has_crypto = 1;
-        $conf->data->set( openssl_version => $version );
-        print " (yes) " if $verbose;
-        $self->set_result("yes, $version");
-    }
-    return $has_crypto;
-}
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/avl_string_cache/config/auto/crypto/crypto_c.in
==============================================================================
--- branches/avl_string_cache/config/auto/crypto/crypto_c.in	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,26 +0,0 @@
-/*
-  Copyright (C) 2008, Parrot Foundation.
-  $Id$
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <openssl/opensslv.h>
-#include <openssl/err.h>
-
-int
-main(int argc, char *argv[])
-{
-    unsigned long dummy = ERR_get_error();
-
-    printf("%s\n", OPENSSL_VERSION_TEXT);
-
-    return EXIT_SUCCESS;
-}
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Deleted: branches/avl_string_cache/config/auto/gdbm.pm
==============================================================================
--- branches/avl_string_cache/config/auto/gdbm.pm	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,96 +0,0 @@
-# Copyright (C) 2001-2005, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-config/auto/gdbm.pm - Test for GNU dbm (gdbm) library
-
-=head1 DESCRIPTION
-
-Determines whether the platform supports gdbm. This is needed for the dynamic
-GDBMHash PMC.
-
-From L<http://www.gnu.org/software/gdbm/>:  "GNU dbm is a set of database
-routines that use extensible hashing. It works similar to the standard Unix
-dbm routines."
-
-=cut
-
-package auto::gdbm;
-
-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{Does your platform support gdbm};
-    $data{result}      = q{};
-    return \%data;
-}
-
-sub runstep {
-    my ( $self, $conf ) = @_;
-
-    my ( $verbose, $without ) = $conf->options->get(
-        qw|
-            verbose
-            without-gdbm
-        |
-    );
-
-    if ($without) {
-        $conf->data->set( has_gdbm => 0 );
-        $self->set_result('no');
-        return 1;
-    }
-
-    my $osname = $conf->data->get('osname');
-
-    my $extra_libs = $self->_select_lib( {
-        conf            => $conf,
-        osname          => $osname,
-        cc              => $conf->data->get('cc'),
-        win32_gcc       => '-llibgdbm',
-        win32_nongcc    => 'gdbm.lib',
-        default         => '-lgdbm',
-    } );
-
-    $conf->cc_gen('config/auto/gdbm/gdbm_c.in');
-    eval { $conf->cc_build( q{}, $extra_libs ); };
-    my $has_gdbm = 0;
-    if ( !$@ ) {
-        my $test = $conf->cc_run();
-        unlink "gdbm_test_db";
-        $has_gdbm = $self->_evaluate_cc_run($test, $has_gdbm, $verbose);
-    }
-    $conf->data->set( has_gdbm => $has_gdbm );    # for gdbmhash.t and dynpmc.in
-    $self->set_result($has_gdbm ? 'yes' : 'no');
-
-    return 1;
-}
-
-sub _evaluate_cc_run {
-    my $self = shift;
-    my ($test, $has_gdbm, $verbose) = @_;
-    if ( $test eq "gdbm is working.\n" ) {
-        $has_gdbm = 1;
-        print " (yes) " if $verbose;
-        $self->set_result('yes');
-    }
-    return $has_gdbm;
-}
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/avl_string_cache/config/auto/gdbm/gdbm_c.in
==============================================================================
--- branches/avl_string_cache/config/auto/gdbm/gdbm_c.in	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,48 +0,0 @@
-/*
-  Copyright (C) 2001-2009, Parrot Foundation.
-  $Id$
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gdbm.h>
-
-int
-main(int argc, char *argv[])
-{
-    GDBM_FILE dbf;
-    datum key, val_in, val_out;
-
-    dbf = gdbm_open("gdbm_test_db", 0, GDBM_NEWDB, 0666, 0);
-    if (!dbf) {
-        fprintf(stderr, "File %s could not be created.\n", argv[1]);
-        exit(2);
-    }
-
-    key.dptr  = "Is gdbm funktional?";
-    key.dsize = 19;
-    val_in.dptr  = "gdbm is working.";
-    val_in.dsize = 17;
-
-    gdbm_store(dbf, key, val_in, GDBM_INSERT);
-
-    val_out = gdbm_fetch(dbf, key);
-
-    if (val_out.dsize > 0) {
-        printf("%s\n", val_out.dptr);
-        free(val_out.dptr);
-    }
-    else {
-        printf("Key not found.\n");
-    }
-    gdbm_close(dbf);
-
-    return EXIT_SUCCESS;
-}
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/avl_string_cache/config/auto/warnings.pm
==============================================================================
--- branches/avl_string_cache/config/auto/warnings.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/auto/warnings.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -113,6 +113,7 @@
         -Wcomment
         -Wdisabled-optimization
         -Wdiv-by-zero
+        -Wenum-compare
         -Wendif-labels
         -Wextra
         -Wformat
@@ -125,6 +126,7 @@
         -Winit-self
         -Winline
         -Winvalid-pch
+        -Wjump-misses-init
         -Wlogical-op
         -Wmissing-braces
         -Wmissing-field-initializers
@@ -252,6 +254,11 @@
         '-diag-disable 1572', # floating-point equality and inequality comparisons are unreliable
         '-diag-disable 2259', # non-pointer conversion from "typeA" to "typeB" may lose significant bits
     ];
+    $icc->{'cage'} = [
+        # http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/bldaps_cls/common/bldaps_svover.htm
+        '-diag-enable sc3',
+        '-diag-enable sc-include',
+    ];
 
     $data->{'warnings'}{'gcc'} = $gcc;
     $data->{'warnings'}{'g++'} = $gpp;

Modified: branches/avl_string_cache/config/gen/config_pm.pm
==============================================================================
--- branches/avl_string_cache/config/gen/config_pm.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/gen/config_pm.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -33,7 +33,7 @@
         myconfig        => 'config/gen/config_pm/myconfig.in',
         config_pir      => 'config/gen/config_pm/config_pir.in',
         Config_pm       => 'config/gen/config_pm/Config_pm.in',
-        config_lib      => 'config/gen/config_pm/config_lib_pasm.in',
+        config_lib      => 'config/gen/config_pm/config_lib_pir.in',
     };
     return \%data;
 }
@@ -84,9 +84,9 @@
 
     $template = $self->{templates}->{config_lib};
     open( $IN,  "<", $template ) or die "Can't open '$template': $!";
-    my $c_l_pasm = q{config_lib.pasm};
-    $conf->append_configure_log($c_l_pasm);
-    open( $OUT, ">", $c_l_pasm ) or die "Can't open $c_l_pasm: $!";
+    my $c_l_pir = q{config_lib.pir};
+    $conf->append_configure_log($c_l_pir);
+    open( $OUT, ">", $c_l_pir ) or die "Can't open $c_l_pir: $!";
 
     print {$OUT} <<"END";
 # ex: set ro:
@@ -115,14 +115,14 @@
                     if ( $type ) {
                         die "type of '$k' is not supported : $type\n";
                     }
-                    # Scalar
+                    # String
                     $v =~ s/(["\\])/\\$1/g;
                     $v =~ s/\n/\\n/g;
-                    print {$OUT} qq(    set P0["$k"], "$v"\n);
+                    print {$OUT} qq(    set \$P0["$k"], "$v"\n);
                 }
                 else {
-                    # Undef
-                    print {$OUT} qq(    set P0["$k"], P1\n);
+                    # Null
+                    print {$OUT} qq(    set \$P0["$k"], \$S2\n);
                 }
             }
         }
@@ -135,7 +135,7 @@
     }
 
     close $IN  or die "Can't close $template: $!";
-    close $OUT or die "Can't close $c_l_pasm: $!";
+    close $OUT or die "Can't close $c_l_pir: $!";
 
     return 1;
 }

Deleted: branches/avl_string_cache/config/gen/config_pm/config_lib_pasm.in
==============================================================================
--- branches/avl_string_cache/config/gen/config_pm/config_lib_pasm.in	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,35 +0,0 @@
-# Copyright (C) 2004-2009, Parrot Foundation.
-# $Id$
-
-.pcc_sub main:
-    get_params "(0)", P5
-    set I10, P5     # argv
-    set I11, 0      # flag
-    le I10, 1, no_arg
-    set S10, P5[1]
-    ne S10, "--install", no_arg
-    set I11, 1      # install flag
-no_arg:
-    new P0, 'Hash'
-    new P1, 'Undef'
-
-    @PCONFIG@
-
-    if I11, is_install
-    set S1, "@PWD@"
-    set P0["prefix"], S1
-    set P0["installed"], "0"
-    branch freeze_config
-is_install:
-    set P0["installed"], "1"
-freeze_config:
-
-    freeze S0, P0
-    print S0
-    end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Added: branches/avl_string_cache/config/gen/config_pm/config_lib_pir.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/config/gen/config_pm/config_lib_pir.in	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,38 @@
+# Copyright (C) 2004-2009, Parrot Foundation.
+# $Id$
+
+.include 'datatypes.pasm'
+
+.sub 'main'
+    get_params "(0)", $P5
+    set $I10, $P5     # argv
+    set $I11, 0      # flag
+    le $I10, 1, no_arg
+    set $S10, $P5[1]
+    ne $S10, "--install", no_arg
+    set $I11, 1      # install flag
+no_arg:
+    new $P0, 'Hash'
+    $P0.'set_value_type'(.DATATYPE_STRING)
+    $S2 = null
+
+    @PCONFIG@
+
+    if $I11, is_install
+    set $S1, "@PWD@"
+    set $P0["prefix"], $S1
+    set $P0["installed"], "0"
+    branch freeze_config
+is_install:
+    set $P0["installed"], "1"
+freeze_config:
+
+    freeze $S0, $P0
+    print $S0
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/config/gen/config_pm/config_pir.in
==============================================================================
--- branches/avl_string_cache/config/gen/config_pm/config_pir.in	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/gen/config_pm/config_pir.in	Thu Apr 22 09:55:26 2010	(r45889)
@@ -12,9 +12,9 @@
   # store the config data into $P0
   $P0 = _config()
   # Retrieve and print a key
-  $P1 = $P0["cc"]
+  $S1 = $P0["cc"]
   print "Your C compiler is "
-  print $P1
+  print $S1
   print "\n"
   ...
 
@@ -25,14 +25,14 @@
 config.pir is a mechanism for accessing most of the data collected by
 Configure.  It's roughly equivalent to Perl5's C<Config.pm> module.
 
-At the end of a successful C<make> of Parrot, a PASM file generated by
+At the end of a successful C<make> of Parrot, a PIR file generated by
 Configure is run to put a file, F<config.fpmc>, into the library with a
 frozen Hash of the configuration data.  This library provides a
 function, C<_config>, to unpack and return that file's data.
 
 C<_config> does not take any parameters.  It returns a single Hash
 containing the data.  Keys that were C<undef> in Configure contain a
-C<None> PMC; otherwise they contain a C<String>.
+null string; otherwise they contain a non-null, possibly empty, string.
 
 Note that the behavior of that hash when writing to any value (especially
 undefined values) is undefined, and may be rather funky.

Modified: branches/avl_string_cache/config/gen/core_pmcs.pm
==============================================================================
--- branches/avl_string_cache/config/gen/core_pmcs.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/gen/core_pmcs.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -103,6 +103,8 @@
 /* HEADERIZER STOP */
 
 #include "parrot/parrot.h"
+#include "parrot/global_setup.h"
+
 
 END_C
 
@@ -110,15 +112,6 @@
 
     print {$OUT} <<'END_C';
 
-/* This isn't strictly true, but the headerizer should not bother */
-
-void Parrot_register_core_pmcs(PARROT_INTERP, ARGIN(PMC *registry))
-    __attribute__nonnull__(1)
-    __attribute__nonnull__(2);
-
-extern void Parrot_initialize_core_pmcs(PARROT_INTERP, int pass)
-    __attribute__nonnull__(1);
-
 void Parrot_initialize_core_pmcs(PARROT_INTERP, int pass)
 {
     /* first the PMC with the highest enum

Deleted: branches/avl_string_cache/config/gen/crypto.pm
==============================================================================
--- branches/avl_string_cache/config/gen/crypto.pm	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,110 +0,0 @@
-# Copyright (C) 2008, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-config/gen/crypto.pm - Digest PMC Files
-
-=head1 DESCRIPTION
-
-Generates Digest PMC files.
-
-=cut
-
-package gen::crypto;
-
-use strict;
-use warnings;
-
-
-use base qw(Parrot::Configure::Step);
-
-use Parrot::Configure::Utils ':gen';
-
-sub _init {
-    my $self = shift;
-    my %data;
-    $data{description} = q{Generate Digest PMC files};
-    $data{result}      = q{};
-    $data{digest}      = {
-        MD2         => {
-            md_result => 'ab4f496bfb2a530b219ff33031fe06b0',
-        },
-        MD4         => {
-            md_result => 'd9130a8164549fe818874806e1c7014b',
-        },
-        MD5         => {
-            md_result => 'f96b697d7cb7938d525a2f31aaf161d0',
-        },
-        RIPEMD160   => {
-            md_result => '5d0689ef49d2fae572b881b123a85ffa21595f36',
-            md_inc => 'ripemd',
-        },
-        SHA         => {
-            md_result => 'c1b0f222d150ebb9aa36a40cafdc8bcbed830b14',,
-        },
-        SHA1        => {
-            md_result => 'c12252ceda8be8994d5fa0290a47231c1d16aae3',
-            md_inc => 'sha',
-            md_ctx => 'SHA_CTX',
-            md_digest => 'SHA_DIGEST',
-        },
-        SHA256      => {
-            md_result => 'f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650',
-            md_inc => 'sha',
-            version_needed => '0.9.8a',
-        },
-        SHA512      => {
-            md_result => '107dbf389d9e9f71a3a95f6c055b9251bc5268c2be16d6c13492ea45b0199f3309e16455ab1e96118e8a905d5597b72038ddb372a89826046de66687bb420e7c',
-            md_inc => 'sha',
-            version_needed => '0.9.8a',
-        },
-    };
-    $data{digest_pmc_template} = 'config/gen/crypto/digest_pmc.in';
-    $data{digest_t_template} = 'config/gen/crypto/digest_t.in';
-    return \%data;
-}
-
-sub runstep {
-    my ( $self, $conf ) = @_;
-
-    if ( ! $conf->data->get('has_crypto') ) {
-        $self->set_result('skipped');
-        return 1;
-    }
-
-    my $openssl_version  = $conf->data->get('openssl_version');
-
-    while (my ($md, $val) = each %{ $self->{digest} } ) {
-        my $file = lc $md;
-        $conf->data->set( TEMP_md_name => $md );
-        $conf->data->set( TEMP_md_file => $file );
-        $conf->data->set( TEMP_md_inc => $val->{md_inc} || $file );
-        $conf->data->set( TEMP_md_ctx => $val->{md_ctx} || $md . '_CTX' );
-        $conf->data->set( TEMP_md_digest => $val->{md_digest} || $md . '_DIGEST' );
-        $conf->data->set( TEMP_md_guard => (
-                ( exists $val->{version_needed} )
-                    and
-                ( $openssl_version lt $val->{version_needed} )
-            )
-            ? '#if 0'
-            : '#ifndef OPENSSL_NO_' . $md
-        );
-        $conf->data->set( TEMP_md_skip => $val->{version_needed} || '0.9' );
-        $conf->data->set( TEMP_md_result => $val->{md_result} );
-        $conf->genfile( $self->{digest_pmc_template} => "src/dynpmc/${file}.pmc" );
-        $conf->genfile( $self->{digest_t_template} => "t/dynpmc/${file}.t" );
-    }
-    $conf->cc_clean();
-
-    return 1;
-}
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/avl_string_cache/config/gen/crypto/digest_pmc.in
==============================================================================
--- branches/avl_string_cache/config/gen/crypto/digest_pmc.in	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,161 +0,0 @@
-/*
-Copyright (C) 2008-2010, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/dynpmc/@TEMP_md_file at .pmc - @TEMP_md_name@ wrapper of libcrypto (libssl)
-
-=head1 DESCRIPTION
-
-See L<www.openssl.org>
-
-=head2 Methods
-
-=over 4
-
-=cut
-
-*/
-
-#include <openssl/@TEMP_md_inc at .h>
-
-pmclass @TEMP_md_name@
-    dynpmc
-    group digest_group
-    lib crypto {
-
-/*
-
-=item C<void init()>
-
-=cut
-
-*/
-    VTABLE void init() {
- at TEMP_md_guard@
-        @TEMP_md_ctx@ *c    = mem_gc_allocate_zeroed_typed(INTERP, @TEMP_md_ctx@);
-        PMC_data(SELF) = c;
-        PObj_custom_destroy_SET(SELF);
-#else
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ILL_INHERIT,
-            "@TEMP_md_name@ is disabled");
-#endif
-    }
-
-/*
-
-=item C<void destroy()>
-
-=cut
-
-*/
-    VTABLE void destroy() {
- at TEMP_md_guard@
-        @TEMP_md_ctx@ *c = PMC_data_typed(SELF, @TEMP_md_ctx@ *);
-        if (c) {
-            mem_gc_free(INTERP, c);
-            PMC_data(SELF) = NULL;
-        }
-#endif
-    }
-
-/*
-
-=item C<PMC* clone()>
-
-=cut
-
-*/
-    VTABLE PMC* clone() {
- at TEMP_md_guard@
-        PMC     *retval  = Parrot_pmc_new_noinit(INTERP, SELF->vtable->base_type);
-        @TEMP_md_ctx@ *c       = mem_allocate_zeroed_typed(@TEMP_md_ctx@);
-
-        memcpy(c, PMC_data(SELF), sizeof (@TEMP_md_ctx@));
-        PMC_data(retval) = c;
-
-        PObj_custom_destroy_SET(retval);
-        return retval;
-#else
-        return NULL;
-#endif
-    }
-
-
-/*
-
-=back
-
-=head2 Specific Methods
-
-=over 4
-
-=item C<void Init()>
-
-=cut
-
-*/
-    METHOD void Init() {
- at TEMP_md_guard@
-        @TEMP_md_ctx@ *c = PMC_data_typed(SELF, @TEMP_md_ctx@ *);
-        (void)@TEMP_md_name at _Init(c);
-#endif
-    }
-
-/*
-
-=item C<void Update(STRING *buf)>
-
-=cut
-
-*/
-    METHOD void Update(STRING *buf) {
- at TEMP_md_guard@
-        @TEMP_md_ctx@ *c = PMC_data_typed(SELF, @TEMP_md_ctx@ *);
-        (void)@TEMP_md_name at _Update(c, (const unsigned char *)Buffer_bufstart(buf), buf->bufused);
-#endif
-    }
-
-/*
-
-=item C<STRING* Final()>
-
-=cut
-
-*/
-    METHOD STRING* Final() {
- at TEMP_md_guard@
-        unsigned char digest[@TEMP_md_digest at _LENGTH];
-        @TEMP_md_ctx@      *c = PMC_data_typed(SELF, @TEMP_md_ctx@ *);
-        STRING       *retval;
-
-        (void)@TEMP_md_name at _Final(digest, c);
-        retval = Parrot_str_new(INTERP, (char *)digest, @TEMP_md_digest at _LENGTH);
-
-        RETURN(STRING *retval);
-#else
-        return;
-#endif
-    }
-
-}
-
-/*
-
-=back
-
-=head1 AUTHORS
-
-Francois Perrad
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Deleted: branches/avl_string_cache/config/gen/crypto/digest_t.in
==============================================================================
--- branches/avl_string_cache/config/gen/crypto/digest_t.in	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,79 +0,0 @@
-#! parrot
-# Copyright (C) 2009, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/dynpmc/@TEMP_md_file at .t - test the @TEMP_md_name@ PMC (part of digest_group)
-
-=head1 SYNOPSIS
-
-        % parrot -Ilib t/dynpmc/@TEMP_md_file at .t
-
-=head1 DESCRIPTION
-
-Tests the C<digest_group> a libcrypto wrapper.
-
-=cut
-
-.sub main :main
-    .include 'test_more.pir'
-    .include 'iglobals.pasm'
-    .local pmc config_hash, interp
-
-    plan(2)
-    interp = getinterp
-    config_hash = interp[.IGLOBALS_CONFIG_HASH]
-    $S0 = config_hash['has_crypto']
-    $S1 = config_hash['openssl_version']
-    unless $S0 goto no_crypto
-    if $S1 < '@TEMP_md_skip@' goto old_openssl
-
-    test_typeof()
-    test_digest()
-    .return()
-  no_crypto:
-    skip(2, 'No crypto library available')
-    .return()
-  old_openssl:
-    skip(2, 'Too old openssl library, needs at least @TEMP_md_skip@')
-.end
-
-
-.sub test_typeof
-    $P0 = loadlib 'digest_group'
-    .local pmc md
-    md = new '@TEMP_md_name@'
-    $S0 = typeof md
-    is($S0, '@TEMP_md_name@', '@TEMP_md_name@ typeof')
-.end
-
-.sub test_digest
-    $P0 = loadlib 'digest_group'
-    .local pmc md
-    md = new '@TEMP_md_name@'
-    md.'Init'()
-    $S0 = 'message digest'
-    md.'Update'($S0)
-    $S0 = md.'Final'()
-    $P0 = split '', $S0
-    new $P1, 'FixedPMCArray'
-    set $P1, 1
-    $S3 = ''
-  L1:
-    unless $P0 goto L2
-    $S1 = shift $P0
-    $I1 = ord $S1
-    $P1[0] = $I1
-    $S2 = sprintf '%02x', $P1
-    $S3 .= $S2
-    goto L1
-  L2:
-    is($S3, '@TEMP_md_result@', '@TEMP_md_name@ digest')
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/config/gen/makefiles/docs.in
==============================================================================
--- branches/avl_string_cache/config/gen/makefiles/docs.in	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/gen/makefiles/docs.in	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2006, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 # Setup of some commands
@@ -11,6 +11,9 @@
 PERLDOC_BIN = @perldoc@
 VERSION = @VERSION@@DEVEL@
 
+# chapters in the generated PDF parrot book
+CHAPTERS = $(PERL) ../tools/docs/filename_and_chapter.pl --b_out
+
 # long list of .pod files
 POD = @TEMP_pod@
 
@@ -50,6 +53,21 @@
 html: all
 	$(PERL) -I../lib ../tools/docs/write_docs.pl --silent --version=$(VERSION)
 
+# The pdf target is to generate a parrot PDF document.
+# It will not work on Windows. It call a script which use a specific Unix
+# command. May be that will be changed.
+pdf: ../tools/docs/book-to-latex.pl ../tools/docs/filename_and_chapter.pl
+	$(MKPATH) build/modified_pod
+	$(PERL) ../tools/docs/filename_and_chapter.pl
+	$(PERL) ../tools/docs/book-to-latex.pl `$(CHAPTERS)` > build/parrot-book.tex
+	cd build && pdflatex parrot-book.tex && pdflatex parrot-book.tex
+
+#pdf-release: build/parrot-book.pdf
+#	cp build/parrot-book.pdf build/parrot-book-$$(date +"%Y.%m").pdf
+
+pdf-clean:
+	$(RM_RF) build
+
 html-clean:
 	$(RM_RF) html
 

Modified: branches/avl_string_cache/config/gen/makefiles/dynpmc.in
==============================================================================
--- branches/avl_string_cache/config/gen/makefiles/dynpmc.in	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/gen/makefiles/dynpmc.in	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2003-2009, Parrot Foundation.
+# Copyright (C) 2003-2010, Parrot Foundation.
 # $Id$
 
 PERL          = @perl@
@@ -32,31 +32,9 @@
   foo_group$(LOAD_EXT) \
   pccmethod_test$(LOAD_EXT) \
   rotest$(LOAD_EXT) \
-#IF(has_gdbm):  gdbmhash$(LOAD_EXT) \
   rational$(LOAD_EXT) \
-#IF(has_crypto):  digest_group$(LOAD_EXT) \
   subproxy$(LOAD_EXT)
 
-PMCS_DIGEST = \
-  md2.pmc \
-  md4.pmc \
-  md5.pmc \
-  ripemd160.pmc \
-  sha.pmc \
-  sha1.pmc \
-  sha256.pmc \
-  sha512.pmc
-
-OBJS_DIGEST = \
-  md2$(O) \
-  md4$(O) \
-  md5$(O) \
-  ripemd160$(O) \
-  sha$(O) \
-  sha1$(O) \
-  sha256$(O) \
-  sha512$(O)
-
 PMCS_FOO = \
   foo.pmc \
   foo2.pmc
@@ -65,14 +43,6 @@
   foo$(O) \
   foo2$(O)
 
-#IF(win32 and cc==gcc):LIB_GDBM = -llibgdbm
-#ELSIF(win32):LIB_GDBM = libgdbm.lib
-#ELSE:LIB_GDBM = -lgdbm
-
-#IF(win32 and cc==gcc):LIB_CRYPTO = -lcrypto
-#ELSIF(win32):LIB_CRYPTO = libcrypto.lib
-#ELSE:LIB_CRYPTO = -lcrypto
-
 CLEANUPS = \
   "*.c" \
   "pmc_*.h" \
@@ -165,19 +135,6 @@
 rotest.dump: rotest.pmc
 	$(PMC2CD) rotest.pmc
 
-gdbmhash$(LOAD_EXT): gdbmhash$(O)
-	$(LD) @ld_out at gdbmhash$(LOAD_EXT) gdbmhash$(O) $(LINKARGS) $(LIB_GDBM)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-gdbmhash$(O): gdbmhash.c
-	$(CC) -c @cc_o_out at gdbmhash$(O) $(INCLUDES) $(CFLAGS) gdbmhash.c
-
-gdbmhash.c: gdbmhash.dump
-	$(PMC2CC) gdbmhash.pmc
-
-gdbmhash.dump: gdbmhash.pmc
-	$(PMC2CD) gdbmhash.pmc
-
 rational$(LOAD_EXT): rational$(O)
 	$(LD) @ld_out at rational$(LOAD_EXT) rational$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -191,88 +148,6 @@
 rational.dump: rational.pmc
 	$(PMC2CD) rational.pmc
 
-digest_group$(LOAD_EXT): $(OBJS_DIGEST) lib-digest_group$(O)
-	$(LD) @ld_out at digest_group$(LOAD_EXT) lib-digest_group$(O) $(OBJS_DIGEST) $(LINKARGS) $(LIB_CRYPTO)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-lib-digest_group$(O): digest_group.c
-	$(CC) -c @cc_o_out at lib-digest_group$(O) $(INCLUDES) $(CFLAGS) digest_group.c
-
-digest_group.c: $(OBJS_DIGEST)
-	$(PMC2C) --library digest_group --c $(PMCS_DIGEST)
-
-md2$(O): md2.c
-	$(CC) -c @cc_o_out at md2$(O) $(INCLUDES) $(CFLAGS) md2.c
-
-md2.c: md2.dump
-	$(PMC2CC) md2.pmc
-
-md2.dump: md2.pmc
-	$(PMC2CD) md2.pmc
-
-md4$(O): md4.c
-	$(CC) -c @cc_o_out at md4$(O) $(INCLUDES) $(CFLAGS) md4.c
-
-md4.c: md4.dump
-	$(PMC2CC) md4.pmc
-
-md4.dump: md4.pmc
-	$(PMC2CD) md4.pmc
-
-md5$(O): md5.c
-	$(CC) -c @cc_o_out at md5$(O) $(INCLUDES) $(CFLAGS) md5.c
-
-md5.c: md5.dump
-	$(PMC2CC) md5.pmc
-
-md5.dump: md5.pmc
-	$(PMC2CD) md5.pmc
-
-ripemd160$(O): ripemd160.c
-	$(CC) -c @cc_o_out at ripemd160$(O) $(INCLUDES) $(CFLAGS) ripemd160.c
-
-ripemd160.c: ripemd160.dump
-	$(PMC2CC) ripemd160.pmc
-
-ripemd160.dump: ripemd160.pmc
-	$(PMC2CD) ripemd160.pmc
-
-sha$(O): sha.c
-	$(CC) -c @cc_o_out at sha$(O) $(INCLUDES) $(CFLAGS) sha.c
-
-sha.c: sha.dump
-	$(PMC2CC) sha.pmc
-
-sha.dump: sha.pmc
-	$(PMC2CD) sha.pmc
-
-sha1$(O): sha1.c
-	$(CC) -c @cc_o_out at sha1$(O) $(INCLUDES) $(CFLAGS) sha1.c
-
-sha1.c: sha1.dump
-	$(PMC2CC) sha1.pmc
-
-sha1.dump: sha1.pmc
-	$(PMC2CD) sha1.pmc
-
-sha256$(O): sha256.c
-	$(CC) -c @cc_o_out at sha256$(O) $(INCLUDES) $(CFLAGS) sha256.c
-
-sha256.c: sha256.dump
-	$(PMC2CC) sha256.pmc
-
-sha256.dump: sha256.pmc
-	$(PMC2CD) sha256.pmc
-
-sha512$(O): sha512.c
-	$(CC) -c @cc_o_out at sha512$(O) $(INCLUDES) $(CFLAGS) sha512.c
-
-sha512.c: sha512.dump
-	$(PMC2CC) sha512.pmc
-
-sha512.dump: sha512.pmc
-	$(PMC2CD) sha512.pmc
-
 subproxy$(LOAD_EXT): subproxy$(O)
 	$(LD) @ld_out at subproxy$(LOAD_EXT) subproxy$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2

Modified: branches/avl_string_cache/config/gen/makefiles/root.in
==============================================================================
--- branches/avl_string_cache/config/gen/makefiles/root.in	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/gen/makefiles/root.in	Thu Apr 22 09:55:26 2010	(r45889)
@@ -166,23 +166,7 @@
 #IF(has_opengl):    src/glut_nci_thunks.nci \
 #IF(has_glut):    src/glut_callbacks.c \
     src/core_pmcs.c \
-#IF(has_crypto):    src/dynpmc/md2.pmc \
-#IF(has_crypto):    src/dynpmc/md4.pmc \
-#IF(has_crypto):    src/dynpmc/md5.pmc \
-#IF(has_crypto):    src/dynpmc/ripemd160.pmc \
-#IF(has_crypto):    src/dynpmc/sha.pmc \
-#IF(has_crypto):    src/dynpmc/sha1.pmc \
-#IF(has_crypto):    src/dynpmc/sha256.pmc \
-#IF(has_crypto):    src/dynpmc/sha512.pmc \
-#IF(has_crypto):    t/dynpmc/md2.t \
-#IF(has_crypto):    t/dynpmc/md4.t \
-#IF(has_crypto):    t/dynpmc/md5.t \
-#IF(has_crypto):    t/dynpmc/ripemd160.t \
-#IF(has_crypto):    t/dynpmc/sha.t \
-#IF(has_crypto):    t/dynpmc/sha1.t \
-#IF(has_crypto):    t/dynpmc/sha256.t \
-#IF(has_crypto):    t/dynpmc/sha512.t \
-    config_lib.pasm \
+    config_lib.pir \
     parrot.pc \
     compilers/imcc/imcc.y.flag \
     compilers/imcc/imcc.l.flag \
@@ -294,12 +278,13 @@
 #IF(has_opengl):    $(LIBRARY_DIR)/OpenGL.pbc \
 #IF(has_opengl):    $(LIBRARY_DIR)/OpenGL_funcs.pbc \
 #IF(has_opengl):    $(LIBRARY_DIR)/OpenGL/Math.pbc \
+    $(LIBRARY_DIR)/osutils.pbc \
     $(LIBRARY_DIR)/P6object.pbc \
     $(LIBRARY_DIR)/ProfTest.pbc \
-	$(LIBRARY_DIR)/ProfTest/PIRProfile.pir \
-	$(LIBRARY_DIR)/ProfTest/NQPProfile.pir \
-	$(LIBRARY_DIR)/ProfTest/Matcher.pir \
-	$(LIBRARY_DIR)/ProfTest/Want.pir \
+    $(LIBRARY_DIR)/ProfTest/PIRProfile.pir \
+    $(LIBRARY_DIR)/ProfTest/NQPProfile.pir \
+    $(LIBRARY_DIR)/ProfTest/Matcher.pir \
+    $(LIBRARY_DIR)/ProfTest/Want.pir \
     $(LIBRARY_DIR)/parrotlib.pbc \
     $(LIBRARY_DIR)/pcore.pbc \
     $(LIBRARY_DIR)/pcre.pbc \
@@ -322,6 +307,9 @@
     $(LIBRARY_DIR)/Stream/Sub.pbc \
     $(LIBRARY_DIR)/Stream/Writer.pbc \
     $(LIBRARY_DIR)/String/Utils.pbc \
+    $(LIBRARY_DIR)/TAP/Formatter.pbc \
+    $(LIBRARY_DIR)/TAP/Harness.pbc \
+    $(LIBRARY_DIR)/TAP/Parser.pbc \
     $(LIBRARY_DIR)/Test/Builder/Output.pbc \
     $(LIBRARY_DIR)/Test/Builder/Test.pbc \
     $(LIBRARY_DIR)/Test/Builder/Tester.pbc \
@@ -347,6 +335,10 @@
 
 FLUID_FILES_2 = \
     $(GEN_LIBRARY) \
+    $(LIBRARY_DIR)/ProfTest/PIRProfile.pbc \
+    $(LIBRARY_DIR)/ProfTest/NQPProfile.pbc \
+    $(LIBRARY_DIR)/ProfTest/Matcher.pbc \
+    $(LIBRARY_DIR)/ProfTest/Want.pbc \
     runtime/parrot/include/parrotlib.pbc
 
 
@@ -531,6 +523,7 @@
 PIRC                = . at slash@pirc$(EXE)
 NQP_RX              = . at slash@parrot-nqp$(EXE)
 NCI_THUNK_GEN       = . at slash@parrot_nci_thunk_gen$(EXE)
+TAPIR               = . at slash@tapir$(EXE)
 
 # Installable executables
 INSTALLABLEPARROT    = . at slash@installable_parrot$(EXE)
@@ -542,6 +535,7 @@
 INSTALLABLECONFIG    = . at slash@installable_parrot_config$(EXE)
 INSTALLABLENQP       = . at slash@installable_parrot-nqp$(EXE)
 INSTALLABLENCITHUNKGEN = . at slash@installable_parrot_nci_thunk_gen$(EXE)
+INSTALLABLETAPIR    = . at slash@installable_tapir$(EXE)
 
 # Libraries
 LIBPARROT_STATIC    = @blib_dir@/@libparrot_static@
@@ -551,7 +545,7 @@
 
 # This line controls whether a static or shared library is built
 # by Parrot's make.  It is not useful otherwise (e.g., in
-# lib/Parrot/Config/Generated.pm or config_lib.pasm).
+# lib/Parrot/Config/Generated.pm or config_lib.pir).
 LIBPARROT           = @libparrot_for_makefile_only@
 
 #IF(has_icu):ICU_SHARED  = @icu_shared@
@@ -582,10 +576,8 @@
 .c$(O) : # suffix rule (limited support)
 	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
-.s$(O) : # suffix rule (limited support)
-	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
-#UNLESS(win32).S$(O) : # suffix rule (limited support)
-#UNLESS(win32)	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
+#UNLESS(win32):.s$(O) : # suffix rule (limited support)
+#UNLESS(win32):	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
 .pir.pbc : # suffix rule (limited support)
 	$(PARROT) -o $@ $<
@@ -808,16 +800,17 @@
 
 world : all parrot_utils
 
-parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O)
+parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O) $(TAPIR)
 
-installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN)
+installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN) $(INSTALLABLETAPIR)
 
 
 runtime/parrot/include/parrotlib.pbc: runtime/parrot/library/parrotlib.pir $(PARROT) $(GEN_PASM_INCLUDES)
 	$(PARROT) -o $@ runtime/parrot/library/parrotlib.pir
 
-runtime/parrot/include/config.fpmc : myconfig config_lib.pasm $(MINIPARROT)
-	$(MINIPARROT) config_lib.pasm > $@
+runtime/parrot/include/config.fpmc : myconfig config_lib.pir \
+    runtime/parrot/include/datatypes.pasm $(MINIPARROT)
+	$(MINIPARROT) -Iruntime/parrot/include config_lib.pir > $@
 
 $(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
     lib/Parrot/OpLib/core.pm src/parrot_config$(O) \
@@ -837,6 +830,12 @@
 $(NCI_THUNK_GEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE)
 	$(PBC_TO_EXE) parrot_nci_thunk_gen.pbc
 
+tapir.pbc : tools/dev/tapir.pir $(PARROT)
+	$(PARROT) -o tapir.pbc tools/dev/tapir.pir
+
+$(TAPIR) : tapir.pbc $(PARROT) $(PBC_TO_EXE)
+	$(PBC_TO_EXE) tapir.pbc
+
 $(PARROT_CONFIG) : tools/util/parrot-config.pir $(PARROT) $(PBC_TO_EXE)
 	$(PARROT) -o parrot_config.pbc tools/util/parrot-config.pir
 	$(PARROT) pbc_to_exe.pbc parrot_config.pbc
@@ -857,7 +856,7 @@
 
 $(INC_DIR)/context.h : include/pmc/pmc_callcontext.h
 
-$(INC_DIR)/pbcversion.h :
+$(INC_DIR)/pbcversion.h : PBC_COMPAT
 	$(PERL) $(BUILD_TOOLS_DIR)/pbcversion_h.pl > $(INC_DIR)/pbcversion.h
 
 src/parrot_config.c :  runtime/parrot/include/config.fpmc \
@@ -874,9 +873,9 @@
 	$(PERL) $(BUILD_TOOLS_DIR)/parrot_config_c.pl --mini > \
     src/null_config.c
 
-install_config.fpmc : myconfig config_lib.pasm $(PARROT)
+install_config.fpmc : myconfig config_lib.pir $(PARROT)
 	@echo "Invoking Parrot to generate install_config.fpmc"
-	$(PARROT) config_lib.pasm --install > $@
+	$(PARROT) config_lib.pir --install > $@
 
 src/parrot_config$(O) : $(PARROT_H_HEADERS)
 
@@ -952,6 +951,9 @@
 $(INSTALLABLENCITHUNKGEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE) src/install_config$(O)
 	$(PBC_TO_EXE) parrot_nci_thunk_gen.pbc --install
 
+$(INSTALLABLETAPIR) : tapir.pbc $(PBC_TO_EXE)
+	$(PBC_TO_EXE) tapir.pbc --install
+
 #
 # Parrot Debugger
 #
@@ -1617,6 +1619,12 @@
 htmlhelp-clean :
 	$(MAKE) docs htmlhelp-clean
 
+#UNLESS(win32):pdf:
+#UNLESS(win32):	$(MAKE) docs pdf
+
+pdf-clean:
+	$(MAKE) docs pdf-clean
+
 ###############################################################################
 #
 # dynamic PMC targets:
@@ -1897,8 +1905,10 @@
     $(INSTALLABLECONFIG) \
     $(INSTALLABLENQP) \
     $(INSTALLABLENCITHUNKGEN) \
+    $(INSTALLABLETAPIR) \
     pbc_to_exe.pbc pbc_to_exe.c pbc_to_exe$(O) pbc_to_exe$(EXE) \
     $(NCI_THUNK_GEN) parrot_nci_thunk_gen.c parrot_nci_thunk_gen$(O) parrot_nci_thunk_gen.pbc \
+    tapir.pbc tapir.c tapir$(O) tapir$(EXE) \
     parrot_config$(EXE) parrot_config.c parrot_config$(O) parrot_config.pbc \
     compilers/imcc/main$(O) \
     $(PDUMP) src/pbc_dump$(O) src/packdump$(O) \
@@ -2135,7 +2145,8 @@
 	rm -f *.ln
 	$(LINT) $(CC_INC) "-Iinclude/pmc" $(BSD_LINT_FLAGS) $(BSD_LINT_EXCLUSIONS) $(LINTABLE_CFILES)
 
-# For checking with splint see also http:////www.perlfoundation.org//parrot//index.cgi?splint
+# For checking with splint see also
+# http:////trac.parrot.org/parrot/wiki/splint
 # Splint: http:////splint.org
 SPLINT = splint
 
@@ -2147,7 +2158,7 @@
 # The dashes in the names don't make any difference to Splint, but I've
 # made them match how they are in the manual.  Otherwise, you might be
 # looking for "declundef", except that it's "decl-undef" in the docs.
-SPLINTFLAGS = \
+SPLINTFLAGS_BASE = \
     +standard \
     -hints \
     \
@@ -2169,14 +2180,16 @@
     +show-scan \
     +time-dist \
     \
+    +cpp-names \
     +ansi-reserved \
     +ansi-reserved-internal \
     -iso-reserved \
     -iso-reserved-internal \
-    -include-nest 10
+    -include-nest 10 \
 
 # Memory safety checks
-SPLINTFLAGS = $(SPLINTFLAGS) \
+# Transfer errors (-mem-trans) are too tough for us right now
+SPLINTFLAGS_MEMORY_SAFETY = \
     +bufferoverflow \
     +bufferoverflowhigh \
     +read-only-strings \
@@ -2184,9 +2197,19 @@
     +strict-destroy \
     +strict-use-released \
     +use-released \
+    -must-free \
+    -mustfreefresh \
+    -mustfreeonly \
+    +null \
+    +nullptrarith \
+    +nullret \
+    -ptr-arith \
+    +ptr-negate \
+    -zero-ptr \
+    -mem-trans
 
 # Macro safety checks
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_MACRO_SAFETY = \
     +macro-assign \
     +macro-empty \
     +macro-parens \
@@ -2195,63 +2218,44 @@
     +macro-unrecog \
 
 # Watch for unsafe comparisons
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_UNSAFE_COMPARISONS = \
     +bool-compare \
     +ptr-compare \
     +real-compare \
     +unsigned-compare
 
 # But allow us some slop in boolean comparisons
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_BOOLEAN_SLOP = \
     -pred-bool-int \
     -pred-bool-ptr \
     -pred-bool-others \
     -boolops \
 
-# Report qualifier mismatches only if dangerous
-SPLINTFLAGS = $(SPLINTFLAGS) \
+# const and other qualifiers
+# Report qualifier mismatches only if dangerous (+relax-quals)
+SPLINTFLAGS_QUALIFIERS = \
     +relax-quals
 
-# Memory checking
-SPLINTFLAGS = $(SPLINTFLAGS) \
-    -must-free \
-    -mustfreefresh \
-    -mustfreeonly \
-    +null \
-    +nullptrarith \
-    +nullret \
-    -ptr-arith \
-    +ptr-negate \
-    -zero-ptr \
-
-# Transfer errors are too tough for us right now
-SPLINTFLAGS = $(SPLINTFLAGS) \
-    -mem-trans
-
 # Symbol definitions
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_SYMBOL_DEFINITIONS = \
     +decl-undef \
     +incon-defs \
     +incon-defs-lib \
 
-# Check for conflicts with C++ compilers
-SPLINTFLAGS = $(SPLINTFLAGS) \
-    +cpp-names \
-
 # Format codes
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_FORMAT = \
     +format-code \
     +format-type \
 
 # Problems with evaluation and control structions
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_EVALUATION = \
     +controlnestdepth 15 \
-    +duplicate-case \
+    +duplicate-quals \
     +eval-order \
     +eval-order-uncon \
 
 # Types and stuff
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_TYPES = \
     +char-index \
     +char-int \
     +enum-members \
@@ -2270,13 +2274,27 @@
 # added to splint target to simplify experimentation,
 # example: make SPLINTFLAGS_TEST='-posixstrictlib +posixlib' splint
 
+SPLINTFLAGS_TEST =
+
+SPLINTFLAGS = \
+	$(SPLINTFLAGS_BASE) \
+	$(SPLINTFLAGS_MEMORY_SAFETY) \
+	$(SPLINTFLAGS_MACRO_SAFETY) \
+	$(SPLINTFLAGS_UNSAFE_COMPARISONS) \
+	$(SPLINTFLAGS_BOOLEAN_SLOP) \
+	$(SPLINTFLAGS_QUALIFIERS) \
+	$(SPLINTFLAGS_SYMBOL_DEFINITIONS) \
+	$(SPLINTFLAGS_FORMAT) \
+	$(SPLINTFLAGS_EVALUATION) \
+	$(SPLINTFLAGS_TYPES) \
+
 SPLINT_SOURCE = `echo $(O_FILES) | $(PERL) -pe @PQ at s/\.o/\.c/g at PQ@`
 
 splint-all : $(PARROT)
 	$(MKPATH) $(SPLINT_TMP)
-	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) $(SPLINTFLAGS_TEST) \
+	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) \
 	$(SPLINT_SOURCE) \
-	$(SPLINT) $(CC_INC) $(SPLINTFLAGS) $(SPLINTFLAGS_TEST) compilers/imcc/main.c
+	$(SPLINT) $(CC_INC) $(SPLINTFLAGS) compilers/imcc/main.c
 
 # "splint" is the less-thorough splint target.  For cage cleaning work,
 # you'll probably want to specify SPLINT_SOURCE rather than work on the
@@ -2285,7 +2303,7 @@
 
 splint : all
 	$(MKPATH) $(SPLINT_TMP)
-	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) $(SPLINTFLAGS_TEST) \
+	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) \
 	+partial -DNDEBUG \
 	$(SPLINT_SOURCE) \
 		| grep -v 'Source code error generation point'
@@ -2524,7 +2542,7 @@
         --links=no --totals \
         -R --exclude=blib --exclude=.svn  \
         --languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
-        -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK \
+        -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK,ARGFREE,ARGFREE_NOTNULL \
         .
 
 # this works with an old etags (XEmacs 21.5*)
@@ -2541,11 +2559,11 @@
 tags-vi: tags.vi.dummy
 	$(RM_F) tags
 	@ctags@ \
-    --links=no --totals \
-    -R --exclude=blib --exclude=.svn  \
-    --languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
-    -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK \
-    .
+	--links=no --totals \
+	-R --exclude=blib --exclude=.svn  \
+	--languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
+	-I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK,ARGFREE,ARGFREE_NOTNULL \
+	.
 	$(PERL) $(BUILD_TOOLS_DIR)/addopstags.pl $(OPS_FILES)
 
 tags.vi.dummy:
@@ -2557,6 +2575,7 @@
 
 # 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)
 
 # This target will eventually create all the headers automatically.  If you

Modified: branches/avl_string_cache/config/gen/opengl.pm
==============================================================================
--- branches/avl_string_cache/config/gen/opengl.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/gen/opengl.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -516,6 +516,7 @@
 #         "$ENV{HOME}/src/osx-insane/usr/X11/include/GL/*.h",
 #         "$ENV{HOME}/src/osx-insane/usr/X11/include/GL/internal/*.h",
 #         "$ENV{HOME}/src/osx-insane/usr/X11R6 1/include/GL/*.h",
+#         "$ENV{HOME}/src/osx-10.6.3/Headers/*.h",
     );
 
     # X freeglut only if DISPLAY is set, otherwise use native w32api GLUT
@@ -663,6 +664,9 @@
             next if     /^#/;
             next if     /\btypedef\b/;
 
+            # Work around bug in Mac OS X headers (glext.h as of 10.6.3, at least)
+            next if /^\s*extern\s+\w+\s+\(\*\s+/;
+
             # Skip where we are explicitly told to do so
             next if /\bFGUNUSED\b/;
 

Modified: branches/avl_string_cache/config/gen/platform/generic/env.c
==============================================================================
--- branches/avl_string_cache/config/gen/platform/generic/env.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/gen/platform/generic/env.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -74,7 +74,7 @@
 void
 Parrot_unsetenv(PARROT_INTERP, STRING *str_name)
 {
-    char *name = Parrot_str_to_cstring(interp, str_name);
+    char * const name = Parrot_str_to_cstring(interp, str_name);
 #ifdef PARROT_HAS_UNSETENV
     unsetenv(name);
 #else

Modified: branches/avl_string_cache/config/init/defaults.pm
==============================================================================
--- branches/avl_string_cache/config/init/defaults.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/init/defaults.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -94,9 +94,9 @@
         # Compiler -- used to turn .c files into object files.
         # (Usually cc or cl, or something like that.)
         cc      => $cc_option ? $cc_option : $Config{cc},
-        # If we specify a compiler, we can't use existing ccflags and ccwarn.
+        # If we specify a compiler, we can't use existing ccflags.
         ccflags => $cc_option ? ''         : $Config{ccflags},
-        ccwarn  => $cc_option ? ''         : $Config{ccwarn},
+        ccwarn  => '',
 
         # Flags used to indicate this object file is to be compiled
         # with position-independent code suitable for dynamic loading.

Modified: branches/avl_string_cache/config/init/hints/cygwin.pm
==============================================================================
--- branches/avl_string_cache/config/init/hints/cygwin.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/config/init/hints/cygwin.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -36,6 +36,7 @@
     # this later causes problems, it might be worth revisiting.  A. Dougherty
     # 9/9/2002
     $conf->data->set(
+        cp                  => '/bin/cp', # ExtUtils::Command::cp broken cpan #56666
         build_dir           => $build_dir,
         ld                  => $conf->data->get('ld') eq 'ld2'
                                ? 'gcc' # do not use old perl5 linker helper

Modified: branches/avl_string_cache/docs/embed.pod
==============================================================================
--- branches/avl_string_cache/docs/embed.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/embed.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1551,8 +1551,6 @@
 
 =item C<Parrot_store_sub_in_namespace>
 
-=item C<Parrot_str_append>
-
 =item C<Parrot_str_boolean>
 
 =item C<Parrot_str_byte_length>

Modified: branches/avl_string_cache/docs/parrothist.pod
==============================================================================
--- branches/avl_string_cache/docs/parrothist.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/parrothist.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -105,4 +105,6 @@
  chromatic   2.0.0 *        2010-Jan-19     "Inevitable"
  darbelo     2.1.0          2010-Feb-16     "As Scheduled"
  cotto       2.2.0          2010-Mar-16     "Like Clockwork"
+
+ Gerd        2.3.0 *        2010-Apr-20     "Samoan Lory"
 =cut

Modified: branches/avl_string_cache/docs/pdds/draft/pdd01_overview.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd01_overview.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd01_overview.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 1: Overview
@@ -190,7 +190,7 @@
 bytecode and save it for later use. Essentially, we would compile a program as
 normal, but then simply freeze the bytecode to disk for later loading.
 
-=head3 Your HLL in, Java, CLI, or whatever out
+=head3 Your HLL in; Java, CLI, or whatever out
 
 The previous section assumes that we will be emitting Parrot bytecode.
 However, there are other possibilities: we could translate the bytecode
@@ -200,7 +200,7 @@
 
 =head2 References
 
-To come.
+None.
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/draft/pdd05_opfunc.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd05_opfunc.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd05_opfunc.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 5: Opcodes
@@ -13,6 +13,10 @@
 
 {{ NOTE: standardize on underscores or no underscores? }}
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 The opcode functions are the workhorse of the Parrot engine. They control
@@ -169,34 +173,7 @@
 
 =head2 References
 
-Oploop PDD, PDD 4 (Internal types)
-
-=head2 Footnotes
-
-None.
-
-=head2 Version
-
-1.0
-
-=head3 Current
-
-    Maintainer: Dan Sugalski <dan at sidhe.org>
-    Class: Internals
-    PDD Number: 5
-    Version: 1.0
-    Status: Developing
-    Last Modified: 16 Jul 2001
-    PDD Format: 1
-    Language: English
-
-=head3 History
-
-None. First version
-
-=head2 Changes
-
-None. First version
+Oploop PDD, PDD 4 (Internal types).
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/draft/pdd06_pasm.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd06_pasm.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd06_pasm.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -7,6 +7,10 @@
 
 The format of Parrot's bytecode assembly language.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 Parrot's bytecode can be thought of as a form of machine language for a
@@ -1006,186 +1010,10 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
 =head2 References
 
 None.
 
-=head2 Version
-
-1.9
-
-=head3 Current
-
-    Maintainer: Dan Sugalski
-    Class: Internals
-    PDD Number: 6
-    Version: 1.9
-    Status: Developing
-    Last Modified: 28 February 2007
-    PDD Format: 1
-    Language: English
-
-=head3 History
-
-=over 4
-
-=item Version 1.9
-
-February 28, 2007
-
-=item Version 1.8
-
-December 11, 2002
-
-=item Version 1.7
-
-December 02, 2002
-
-=item Version 1.6
-
-November 05, 2001
-
-=item Version 1.5
-
-October 12, 2001
-
-=item Version 1.4
-
-September 24, 2001
-
-=item Version 1.3
-
-September 12, 2001
-
-=item Version 1.2
-
-August 25, 2001
-
-=item Version 1.1
-
-August 8, 2001
-
-=item version 1
-
-None. First version
-
-=back
-
-=head2 Changes
-
-=over 4
-
-=item Version 1.9
-
-=over 4
-
-=item * Removed remark on "upper case names reserved for directives"
-
-=item * Fixed ".sub" directive, should be ".pcc_sub"
-
-=item * Added constant directive in description.
-
-=item * Added grammar overview.
-
-=back
-
-=item Version 1.8
-
-=over 4
-
-=item * Added property ops
-
-=item * Fixed some bad register designations
-
-=item * Opened up opcode name character list to include numbers
-
-=back
-
-=item Version 1.7
-
-=over 4
-
-=item * Fixed stack ops; push, pop, and clear properly documented according to
-the engine's behaviour now.
-
-=back
-
-=item Version 1.6
-
-=over 4
-
-=item * Added GC opcodes
-
-=back
-
-=item Version 1.5
-
-=over 4
-
-=item * Now have a bsr in addition to a jsr
-
-=item * return is now ret
-
-=item * Added save and restore ops for saving and restoring individual
-registers
-
-=back
-
-=item Version 1.4
-
-=over 4
-
-=item * Conditional branches have just a true destination now
-
-=item * Added the I/O ops
-
-=item * Added in the threading ops
-
-=item * Added in the interpreter ops
-
-=back
-
-=item Version 1.3
-
-=over 4
-
-=item * Added in the low-level module loading ops
-
-=item * Added in transcendental functions and modulo
-
-=item * Finished the pad/global variable fetching bits
-
-=back
-
-=item Version 1.2
-
-We have an interpreter now! Yay! (Okay, a simple one, but still...) Changes
-made to reflect that.
-
-=item Version 1.1
-
-=over 4
-
-=item * Added in object
-
-=item * Changed remnants of "perl" to "Parrot"
-
-=item * Branch destination may be integer constant
-
-=item * Added L<Assembly Syntax> section
-
-=back
-
-=item Version 1.0
-
-None. First version
-
-=back
-
 =cut
 
 __END__

Modified: branches/avl_string_cache/docs/pdds/draft/pdd08_keys.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd08_keys.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd08_keys.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -8,6 +8,10 @@
 This PDD aims to clear up the confusion regarding the implementation of keyed
 access to PMCs in Parrot.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 First, let's define some terminology. An C<aggregate PMC> is one which stores
@@ -265,44 +269,9 @@
 The type values shown above are actually the C<PARROT_ARG_*> values taken from
 F<include/parrot/op.h>.
 
-=head2 Version
-
-=head3 Current
-
-   Maintainer: Simon Cozens <simon at netthink.co.uk>
-   Class: Internals
-   PDD Number: 8
-   Version: 1.3
-   Status: Developing
-   Last Modified: 25 August, 2002
-   PDD Format: 1
-   Language: English
-
-=head3 History
-
-=over 4
-
-=item Sun Aug 25 11:14:43 GMT 2002 : Version 1.3
-
-Updated to reflect Dan's decision to change keys to use PMCs instead of a
-custom data structure. Also corrects documentation of multi-level keys and how
-they are compiled and work. tom at compton.nu.
-
-=item Thu Apr 25 18:30:36 UTC 2002 : Version 1.2
-
-Renamed C<KEY_PAIR> to C<KEY_ATOM>, updated to reflect changeover to linked
-list. - steve at fink.com
-
-=item Fri Mar  8 18:47:34 GMT 2002 : Version 1.1
-
-updated to reflect Dan's comments that non-aggregates also support C<_keyed>
-variant vtable functions.
-
-=back
-
 =head2 References
 
-To come.
+None.
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/draft/pdd10_embedding.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd10_embedding.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd10_embedding.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (c) 2001-2009, Parrot Foundation.
+# Copyright (c) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD10: Embedding and Extending
@@ -219,8 +219,9 @@
 Compiling source code generated or read from the host application is also
 possible:
 
-  Parrot_PMC Parrot_compile_string( Parrot_Interp, const char *compiler,
-                                                   const char *code );
+  Parrot_PMC Parrot_compile_string( Parrot_Interp, Parrot_String compiler,
+                                                   const char *code,
+                                                   Parrot_String error );
 
 The potential return values are the same as for loading code from disk.
 
@@ -244,17 +245,9 @@
 such that it is possible to load source code written in that language or pass
 source code to an interpreter successfully.
 
-=head2 Attachments
-
-Any associated documents.
-
-=head2 Footnotes
-
-List of footnotes to the text.
-
 =head2 References
 
-List of references.
+None.
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/draft/pdd11_extending.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd11_extending.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd11_extending.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 11: Extending
@@ -9,6 +9,10 @@
 Parrot for code written in C or other compiled languages. It provides about
 the same level of access to Parrot  that bytecode programs have.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 The API presents to C programs roughly the same interface presented to
@@ -349,51 +353,10 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 F<docs/glossary.pod>
 
-=head2 Version
-
-=head3 Current
-
-    Maintainer:
-    Class: Internals
-    PDD Number: 11
-    Version: 1.0
-    Status: Developing
-    Last Modified: February 20, 2004
-    PDD Format: 1
-    Language: English
-
-=head3 History
-
-=over 4
-
-=item Version 1
-
-None. First version
-
-=back
-
-=head2 Changes
-
-=over 4
-
-=item Version 1.0
-
-None. First version
-
-=back
-
 =cut
 
 __END__

Modified: branches/avl_string_cache/docs/pdds/draft/pdd14_numbers.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd14_numbers.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd14_numbers.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 14: Numbers
@@ -574,10 +574,6 @@
 suitable opcodes.  Conversion to and from Parrot strings, conversion to and
 from floating point types, sprintf output of bignumbers.
 
-=head2 Attachments
-
-=head2 Footnotes
-
 =head2 References
 
 IBM's Standard Decimal Arithmetic, with tests

Modified: branches/avl_string_cache/docs/pdds/draft/pdd16_native_call.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd16_native_call.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd16_native_call.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 16: Native Call Interface (NCI)
@@ -8,6 +8,10 @@
 This PDD describes the native call interface, and the function signatures used
 to describe those functions.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 The NCI is designed to allow Parrot to interface to I<most> of the functions
@@ -313,50 +317,15 @@
   }
 
 The file containing this C code should be compiled as a shared library
-(specifying the C<include> directory so C<<parrot/parrot.h>> can be found.)
+(specifying the C<include> directory so F<parrot/parrot.h> can be found.)
 
 =head2 References
 
-L<pdd06_pasm.pod>
+F<pdd06_pasm.pod>
 
 =head2 See Also
 
-L<t/pmc/nci.t>, L<src/nci_test.c>
-
-=head2 Version
-
-=head3 Current
-
-    Maintainer: Dan Sugalski
-    Class: Internals
-    PDD Number: 16
-    Version: 1.3
-    Status: Developing
-    Last Modified: Feb 26, 2007
-    PDD Format: 1
-    Language: English
-
-=head3 History
-
-=over 4
-
-=item version 1.3
-
-Updated with example for callbacks
-
-=item version 1.2
-
-Updated with basic example for NCI.
-
-=item version 1.1
-
-Changed callback section to reflect current status.
-
-=item version 1
-
-None. First version
-
-=back
+F<t/pmc/nci.t>, F<src/nci_test.c>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/draft/pdd29_compiler_tools.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd29_compiler_tools.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd29_compiler_tools.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,16 +1,15 @@
-# Copyright (C) 2008-2009, Parrot Foundation.
+# Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 29: Compiler Tools
 
-=head2 Version
+=head2 Abstract
 
-$Revision$
+This PDD specifies the Parrot Compiler Tools (PCT).
 
-=head2 Maintainer
+=head2 Version
 
-Will "Coke" Coleda
-Klaas-Jan Stol
+$Revision$
 
 =head2 Definitions
 
@@ -23,10 +22,6 @@
 
 A High-Level Language. Examples are: Perl, Ruby, Python, Lua, Tcl, etc.
 
-=head2 Abstract
-
-This PDD specifies the Parrot Compiler Tools (PCT).
-
 =head2 Synopsis
 
 Creating a PCT-based compiler can be done as follows:
@@ -356,15 +351,9 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
 =head2 References
 
-docs/pdd26_ast.pod
-
-http://dev.perl.org/perl6/doc/design/syn/S05.html
+F<docs/pdd26_ast.pod>, L<http://dev.perl.org/perl6/doc/design/syn/S05.html>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/draft/pdd31_hll.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd31_hll.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd31_hll.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,17 +1,17 @@
-# Copyright (C) 2009, Parrot Foundation.
+# Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 31: HLL Compilers and Libraries
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 This PDD describes the standard compiler API and support for
 cross-library communication between high-level languages (HLLs).
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 Parrot's support for HLL interoperability is primarily focused on
@@ -299,7 +299,7 @@
 
 =head2 References
 
-L<pdd21_namespaces.pod>
+F<pdd21_namespaces.pod>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/draft/pdd31_hll_interop.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/draft/pdd31_hll_interop.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/draft/pdd31_hll_interop.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,18 +1,18 @@
-# Copyright (C) 2008-2009, Parrot Foundation.
+# Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 31: Inter-Language Calling
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 This PDD describes Parrot's conventions and support for communication between
 high-level languages (HLLs).  It is focused mostly on what implementors should
 do in order to provide this capability to their users.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 The ability to mix different high-level languages at runtime has always been

Modified: branches/avl_string_cache/docs/pdds/pdd00_pdd.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd00_pdd.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd00_pdd.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,17 +1,17 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 0: Design Document Format
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 This document defines the content and format of Parrot Design Documents
 (PDDs).
 
+=head2 Version
+
+$Revision$
+
 =head2 Synopsis
 
 Not applicable.
@@ -99,13 +99,6 @@
 Document version.  Since Parrot is currently kept in a Subversion repository,
 the $$-delimited keyword "Revision" will do nicely.
 
-=item Maintainer I<(optional)>:
-
-The name and current email address for the point of contact for the PDD. This
-is the person to whom questions, comments, and patches should generally be
-addressed. This need not be the author of the document.  By default, all PDDs
-are maintained by the Parrot Architect.
-
 =item Abstract:
 
 A quick blurb explaining the purpose of the PDD.
@@ -149,6 +142,7 @@
 Proposed PDDs should be submitted to the parrot-dev mailing list (located
 at parrot-dev at lists.parrot.org) for discussion, criticism and general
 kibitzing.
+
 Acceptance of a particular PDD is ultimately up to the Parrot Architect.
 
 =head3 PDD Translations
@@ -159,22 +153,14 @@
 
 =item *
 
-The C<Maintainer> section should record who made the translation.
-
-=item *
-
-The C<Version> section should include an additional note of the translation
+The C<Version> section should include an additional note of the translated
 version.
 
 =back
 
-=head2 Attachments
-
-(none)
-
 =head2 References
 
-(none)
+None.
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd03_calling_conventions.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd03_calling_conventions.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd03_calling_conventions.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 3: Calling Conventions
@@ -391,13 +391,9 @@
 
 =end PIR_FRAGMENT
 
-=head2 Attachments
-
-None.
-
 =head2 References
 
-L<pdd23_exceptions.pod>
+F<pdd23_exceptions.pod>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd07_codingstd.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd07_codingstd.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd07_codingstd.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 7: Conventions and Guidelines for Parrot Source Code
@@ -1006,7 +1006,7 @@
 
 =head2 References
 
-none
+None.
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd09_gc.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd09_gc.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd09_gc.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -602,36 +602,28 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 "Uniprocessor Garbage Collection Techniques"
-http://www.cs.rice.edu/~javaplt/311/Readings/wilson92uniprocessor.pdf
+L<http://www.cs.rice.edu/~javaplt/311/Readings/wilson92uniprocessor.pdf>
 
 "A unified theory of garbage collection":
-http://portal.acm.org/citation.cfm?id=1028982
+L<http://portal.acm.org/citation.cfm?id=1028982>
 
 "Scalable Locality-Conscious Multithreaded Memory Allocation":
-http://people.cs.vt.edu/~scschnei/papers/ismm06.pdf
+L<http://people.cs.vt.edu/~scschnei/papers/ismm06.pdf>
 
 "Parallel and concurrent garbage collectors":
-http://chaoticjava.com/posts/parallel-and-concurrent-garbage-collectors/
+L<http://chaoticjava.com/posts/parallel-and-concurrent-garbage-collectors/>
 
 "Region-Based Memory Management":
-http://www.irisa.fr/prive/talpin/papers/ic97.pdf
+L<http://www.irisa.fr/prive/talpin/papers/ic97.pdf>
 
 Dan's first musings on the GC subsystem:
-http://www.mail-archive.com/perl6-all@perl.org/msg14072.html
+L<http://www.mail-archive.com/perl6-all@perl.org/msg14072.html>
 
 Semi-timely and ordered destruction:
-http://www.sidhe.org/~dan/blog/archives/000199.html
+L<http://www.sidhe.org/~dan/blog/archives/000199.html>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd15_objects.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd15_objects.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd15_objects.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2007, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 15: Objects and Classes
@@ -1630,11 +1630,6 @@
 
 =end html
 
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 None.

Modified: branches/avl_string_cache/docs/pdds/pdd17_pmc.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd17_pmc.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd17_pmc.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -3,15 +3,15 @@
 
 =head1 PDD 17: Polymorphic Containers
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 This PDD describes the internal structure and behavior of the Polymorphic
 Container (PMC) data type.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 PMCs implement all internal data types more complex than a simple integer,
@@ -1809,17 +1809,9 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
-  docs/pmc2c.pod
+F<docs/pmc2c.pod>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd18_security.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd18_security.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd18_security.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2008, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 18: Security Model
@@ -217,19 +217,13 @@
 form is standard across high-level languages running on Parrot, the tools can
 be written once and applied to many languages.
 
-=head2 Attachments
-
-
-=head2 Footnotes
-
-
 =head2 References
 
-"Exploring the Broken Web": http://talks.php.net/show/osdc07
+"Exploring the Broken Web": L<http://talks.php.net/show/osdc07>
 
-"Safe ERB": http://agilewebdevelopment.com/plugins/safe_erb
+"Safe ERB": L<http://agilewebdevelopment.com/plugins/safe_erb>
 
-pecl/filter: http://us2.php.net/filter
+pecl/filter: L<http://us2.php.net/filter>
 
 Rasmus Lerdorf for the term "data firewall".
 

Modified: branches/avl_string_cache/docs/pdds/pdd19_pir.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd19_pir.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd19_pir.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,18 +1,17 @@
-# Copyright (C) 2007, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 19: Parrot Intermediate Representation (PIR)
 
-=head2 Version
-
-$Revision$
-
-
 =head2 Abstract
 
 This document outlines the architecture and core syntax of Parrot
 Intermediate Representation (PIR).
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 PIR is a stable, middle-level language intended both as a target for the
@@ -1444,18 +1443,9 @@
 
 =back
 
-
-=head2 Attachments
-
-N/A
-
-=head2 Footnotes
-
-N/A
-
 =head2 References
 
-N/A
+None.
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd20_lexical_vars.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd20_lexical_vars.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd20_lexical_vars.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,17 +1,17 @@
-# Copyright (C) 2001-2006, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 20: Lexical Variables
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 This document defines the requirements and implementation strategy for
 lexically scoped variables.
 
+=head2 Version
+
+$Revision$
+
 =head2 Synopsis
 
 =begin PIR
@@ -402,23 +402,9 @@
 
 TK.
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
-=over 4
-
-=item [1]
-
-t/op/lexicals.t
-
-=back
+F<t/op/lexicals.t>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd21_namespaces.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd21_namespaces.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd21_namespaces.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,16 +1,16 @@
-# Copyright (C) 2005-2007, Parrot Foundation.
+# Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 21: Namespaces
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 Description and implementation of Parrot namespaces.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 =over 4
@@ -737,14 +737,6 @@
 
 =end PIR
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 None.

Modified: branches/avl_string_cache/docs/pdds/pdd22_io.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd22_io.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd22_io.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 22: I/O
@@ -1038,14 +1038,6 @@
 (http://www.ietf.org/rfc/rfc4038.txt) and "Basic Socket Interface
 Extensions for IPv6" (http://www.ietf.org/rfc/rfc3493.txt).
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 Links
 
 L<http://en.wikipedia.org/wiki/Asynchronous_I/O> for a relatively
@@ -1053,14 +1045,9 @@
 
 =head2 References
 
-  F<src/io/core.c>
-  F<src/ops/io.ops>
-  F<include/parrot/io.h>
-  F<runtime/parrot/library/Stream/*>
-  F<src/io/unix.c>
-  F<src/io/win32.c>
-  Perl 5's IO::AIO
-  Perl 5's POE
+F<src/io/core.c>, F<src/ops/io.ops>, F<include/parrot/io.h>, 
+F<runtime/parrot/library/Stream/*>, F<src/io/unix.c>, F<src/io/win32.c>,
+Perl 5's IO::AIO, and POE
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd23_exceptions.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd23_exceptions.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd23_exceptions.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2007, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 23: Exceptions
@@ -447,20 +447,10 @@
 
 =end PIR_FRAGMENT
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
-  src/ops/core.ops
-  src/exceptions.c
-  src/pmc/exception.pmc
-  src/pmc/exceptionhandler.pmc
+F<src/ops/core.ops>, F<src/exceptions.c>, F<src/pmc/exception.pmc>,
+F<src/pmc/exceptionhandler.pmc>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd24_events.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd24_events.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd24_events.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2007, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 24: Events
@@ -368,17 +368,9 @@
 own implementations of timers, which may be used when performance on a
 particular platform is more important than portability.
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
-src/events.c
+F<src/events.c>
 
 L<http://www.seas.upenn.edu/~lipeng/homepage/unify.html>
 

Modified: branches/avl_string_cache/docs/pdds/pdd25_concurrency.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd25_concurrency.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd25_concurrency.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2007, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 25: Concurrency
@@ -422,40 +422,32 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 Dec 2003 - (Dan ponders threads based on POSIX and Perl 5 experience)
-<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/e64b22ab7de0a7a6/889b5d8c4cd267b7?lnk=gst&q=threads&rnum=3#889b5d8c4cd267b7>
+L<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/e64b22ab7de0a7a6/889b5d8c4cd267b7?lnk=gst&q=threads&rnum=3#889b5d8c4cd267b7>
 
 Dec. 2003 - "threads and shared interpreter data structures"
-<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/e64ea4ff287e04fd/b71333e282d3d187?lnk=gst&q=threads&rnum=9#b71333e282d3d187>
+L<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/e64ea4ff287e04fd/b71333e282d3d187?lnk=gst&q=threads&rnum=9#b71333e282d3d187>
 
 Jan. 2004 - "Threads Design. A Win32 perspective."
-<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/3209629b23306029/52ba9d37425ba015?lnk=gst&q=threads&rnum=8#52ba9d37425ba015>
+L<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/3209629b23306029/52ba9d37425ba015?lnk=gst&q=threads&rnum=8#52ba9d37425ba015>
 
 Jan. 2004 - "Start of threads proposal"
-<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/4c7de440da84d5c6/04cfb70b0d81dfba?tvc=1&q=threads#04cfb70b0d81dfba>
+L<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/4c7de440da84d5c6/04cfb70b0d81dfba?tvc=1&q=threads#04cfb70b0d81dfba>
 
 Sept. 2005 - "consider using OS threads"
-<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/40b50e3aa9255f8e/036a87b5d2b5ed2c?lnk=gst&q=threads&rnum=2#036a87b5d2b5ed2c>
+L<http://groups.google.com/group/perl.perl6.internals/browse_frm/thread/40b50e3aa9255f8e/036a87b5d2b5ed2c?lnk=gst&q=threads&rnum=2#036a87b5d2b5ed2c>
 
 Aug. 2007 - "multi-threading a work in progress"
-<http://perlmonks.org/?node_id=636466>
+L<http://perlmonks.org/?node_id=636466>
 
 Concurrency as Futures -
-<http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&entry=3336838959>
+L<http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&entry=3336838959>
 
-Io language - <http://www.iolanguage.com/about/>
+Io language - L<http://www.iolanguage.com/about/>
 
-Java memory and concurrency - http://www.cs.umd.edu/~pugh/java/memoryModel/
+Java memory and concurrency - L<http://www.cs.umd.edu/~pugh/java/memoryModel/>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd26_ast.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd26_ast.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd26_ast.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007, Parrot Foundation
+# Copyright (C) 2007-2010, Parrot Foundation
 # $Id$
 
 =head1 PDD 26: Compiler Tools - Abstract Syntax Tree
@@ -561,7 +561,7 @@
 
 =head2 References
 
-NA.
+None.
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd27_multiple_dispatch.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd27_multiple_dispatch.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd27_multiple_dispatch.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 27: Multiple Dispatch
@@ -256,15 +256,9 @@
 Multiple dispatch calls from within vtable functions call the
 C<Parrot_mmd_invoke> routine from the public MMD API.
 
-=head2 Attachments
-
-None.
-
 =head2 References
 
-docs/mmd.pod
-src/multidispatch.c
-src/pmc/multisub.pmc
+F<docs/mmd.pod>, F<src/multidispatch.c>, F<src/pmc/multisub.pmc>
 
 =cut
 

Modified: branches/avl_string_cache/docs/pdds/pdd28_strings.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd28_strings.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd28_strings.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2009, Parrot Foundation.
+# Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 28: Strings
@@ -379,13 +379,6 @@
 value of flags. If both string arguments are null, return a new string created
 according to the integer flags.
 
-=head4 Parrot_str_append (was string_append)
-
-Append one string to another and return the result. In the default case, the
-return value is the same as the first string argument (modifying that argument
-in place). If the first argument is COW or read-only, then the return value is
-a new string.
-
 =head4 Parrot_str_new (was string_from_cstring)
 
 Return a new string with the default encoding and character set. Accepts two
@@ -826,15 +819,15 @@
 
 =head2 References
 
-http://sirviente.9grid.es/sources/plan9/sys/doc/utf.ps - Plan 9's Runes are
+L<http://sirviente.9grid.es/sources/plan9/sys/doc/utf.ps> - Plan 9's Runes are
 not dissimilar to NFG strings, and this is a good introduction to the Unicode
 world.
 
-http://www.unicode.org/reports/tr15/ - The Unicode Consortium's
+L<http://www.unicode.org/reports/tr15/> - The Unicode Consortium's
 explanation of different normalization forms.
 
-http://unicode.org/reports/tr29/ - "grapheme clusters" in the Unicode Standard
-Annex
+L<http://unicode.org/reports/tr29/> - "grapheme clusters" in the Unicode
+Standard Annex
 
 "Unicode: A Primer", Tony Graham - Arguably the most readable book on
 how Unicode works.

Modified: branches/avl_string_cache/docs/pdds/pdd30_install.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd30_install.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd30_install.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -160,14 +160,6 @@
 good choice, and can be combined with Autoconf, CMake, Perl, Python,
 etc. for more complex conditional builds).
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 None.

Modified: branches/avl_string_cache/docs/pdds/pdd_template.pod
==============================================================================
--- branches/avl_string_cache/docs/pdds/pdd_template.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/pdds/pdd_template.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,16 +1,16 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 Design Document Template
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 Summary of the contents of the PDD.
 
+=head2 Version
+
+$Revision$
+
 =head2 Synopsis I<(optional)>
 
 Code snippets showing the semantics of the PDD (if applicable).
@@ -33,11 +33,11 @@
 
 =head2 Attachments
 
-Any associated documents.
+Any associated documents. (optional)
 
 =head2 Footnotes
 
-List of footnotes to the text.
+List of footnotes to the text. (optional)
 
 =head2 References
 

Modified: branches/avl_string_cache/docs/project/release_manager_guide.pod
==============================================================================
--- branches/avl_string_cache/docs/project/release_manager_guide.pod	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/docs/project/release_manager_guide.pod	Thu Apr 22 09:55:26 2010	(r45889)
@@ -213,10 +213,10 @@
 
  $ mkdir ~/ftp/releases/devel/a.b.c
 
-If the release is in the stable series (L<Appendix 1 - Upcoming releases>)
-create the new directory in F<~/ftp/releases/stable> instead.
+If the release is in the supported series (L<Appendix 1 - Upcoming releases>)
+create the new directory in F<~/ftp/releases/supported> instead.
 
- $ mkdir ~/ftp/releases/stable/a.b.c
+ $ mkdir ~/ftp/releases/supported/a.b.c
 
 Copy the different compressed tarballs from your machine into the new directory.
 
@@ -283,10 +283,10 @@
 =item e
 
 Under "Administer" -> "Site building" -> "URL Redirects", change the URL for
-"release/current" to the FTP directory for the new release (for example,
-F<ftp://ftp.parrot.org/pub/parrot/releases/devel/0.8.1>). Also update
-the URL for "release/developer" or "release/supported" depending on
-which type of release this is.
+"release/current" to the FTP file for the new release (for example,
+F<ftp://ftp.parrot.org/pub/parrot/releases/devel/0.8.1/parrot-0.8.1.tar.gz>).
+Also update the URL for "release/developer" or "release/supported" depending
+on which type of release this is.
 
 =item f
 
@@ -294,9 +294,9 @@
 the resources/ and html/ directories created in docs/.
 ssh into the parrotvm, and in the
 webroot for docs.parrot.org, expand these into a release directory (e.g.
-1.4.0). in <webroot>/parrot, there are symbolic links for latest, stable,
+1.4.0). in <webroot>/parrot, there are symbolic links for latest, supported,
 and devel. Update the latest symlink to point to your new directory.
-If this is a stable release, also update the stable symlink. Do not delete
+If this is a supported release, also update the supported symlink. Do not delete
 any old copies of the docs.
 
 =back
@@ -394,10 +394,11 @@
 visible at
 L<http://www.google.com/calendar/render?cid=ldhctdamsgfg5a1cord52po9h8@group.calendar.google.com>.
 
- - Apr 20, 2010 - 2.3* - gerd
  - May 18, 2010 - 2.4  - whiteknight
  - Jun 15, 2010 - 2.5  - gerd
  - Jul 20, 2010 - 2.6* - coke
+ - Aug 17, 2010 - 2.7  - ??
+ - Sep 21, 2010 - 2.8  - gerd
 
 =cut
 

Modified: branches/avl_string_cache/examples/languages/abc/setup.pir
==============================================================================
--- branches/avl_string_cache/examples/languages/abc/setup.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/examples/languages/abc/setup.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -40,7 +40,7 @@
     $P1 = new 'Hash'
     $P1['src/gen_grammar.pir'] = 'src/parser/grammar.nqp'
     $P1['src/gen_actions.pir'] = 'src/parser/actions.nqp'
-    $P0['pir_nqp-rx'] = $P1
+    $P0['pir_nqprx'] = $P1
 
     $P2 = new 'Hash'
     $P3 = split "\n", <<'SOURCES'
@@ -58,6 +58,9 @@
     $P0['exe_pbc'] = $P4
     $P0['installable_pbc'] = $P4
 
+    # test
+    $P0['test_exec'] = 'perl'
+
     # dist
     $P4 = glob('t/abc_*')
     $P0['manifest_includes'] = $P4

Modified: branches/avl_string_cache/examples/pir/befunge/setup.pir
==============================================================================
--- branches/avl_string_cache/examples/pir/befunge/setup.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/examples/pir/befunge/setup.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -55,6 +55,9 @@
     $P0['exe_pbc'] = $P3
     $P0['installable_pbc'] = $P3
 
+    # test
+    $P0['test_exec'] = 'perl'
+
     # dist
     $P4 = glob('*.bef')
     $P0['manifest_includes'] = $P4

Deleted: branches/avl_string_cache/ext/SQLite3/DBDI.pm
==============================================================================
--- branches/avl_string_cache/ext/SQLite3/DBDI.pm	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,41 +0,0 @@
-# Basic Perl 6 database layer
-# $Id$
-# Copyright (C) 2008, Parrot Foundation.
-
-use v6;
-
-class DBDI::DriverManager {
-    method getConnection($url, $login, $password) {
-        my $c1 = $url.index(":");
-        my $schema = substr($url, 0, $c1);
-        if ($schema ne "dbdi") { die "Unknown schema "~$schema }
-        my $rurl = substr($url, $c1+1);
-        #say "Remainder was "~$rurl;
-
-        my $c2 = $rurl.index(":");
-        my $driver = "DBDI::Driver::"~substr($rurl, 0, $c2);
-        eval "use "~$driver;
-        if ($!) { die "Couldn't load "~$driver~": "~$!; }
-
-        my $r = substr($rurl, $c2+1);
-        return (eval $driver).getConnection($r, $login, $password);
-        #return ::($driver).getConnection($r, $login, $password);
-    }
-}
-
-class DBDI::Driver { }
-class DBDI::Statement { }
-class DBDI::PreparedStatement { }
-
-class DBDI::ResultSet {
-    has $.statement;
-    method next() { return $.statement.next(); }
-    multi method getCol(Num $col) {
-        $.statement.getCol($col);
-    }
-    multi method getCol(Str $col) {
-        my $n = $.statement.lookupCol($col);
-        if ($n > -1) { return self.getCol($n) }
-        die "Couldn't find column "~$col;
-    }
-}

Deleted: branches/avl_string_cache/ext/SQLite3/DBDI/Driver/SQLite3.pm
==============================================================================
--- branches/avl_string_cache/ext/SQLite3/DBDI/Driver/SQLite3.pm	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,96 +0,0 @@
-# SQLite3 Database Backend for DBDI
-# $Id$
-# Copyright (C) 2008, Parrot Foundation.
-
-use v6;
-
-use SQLite3;
-use DBDI;
-
-class DBDI::Driver::SQLite3 is DBDI::Driver {
-    has $dbHandle;
-    # This bit of hackery is to get around the fact that you can't use
-    # $foo = <pointer>, only $foo := <pointer>
-    method dbHandle { return $dbHandle }
-
-    method getConnection ($db, $username, $password) {
-        my $o = DBDI::Driver::SQLite3.new(:dbHandle(SQLite::open($db)));
-        return $o;
-    }
-
-    method createStatement() {
-        return DBDI::Statement::SQLite3.new(:connection(self));
-    }
-
-    method prepareStatement($sql) {
-        my $sth := SQLite::prepare($.dbHandle, $sql);
-        my $p = DBDI::PreparedStatement::SQLite3.new(:connection(self), :sql($sql), :stHandle($sth));
-        return $p;
-    }
-}
-
-class DBDI::Statement::SQLite3 is DBDI::Statement {
-    has $connection;
-
-    method executeQuery($sql) {
-        my $temp_statement = $connection.prepareStatement($sql);
-        return DBDI::ResultSet.new(:statement($temp_statement));
-    }
-
-    method executeUpdate($sql) {
-        my $temp_statement = $connection.prepareStatement($sql);
-        $temp_statement.next();
-        $temp_statement.finalize();
-    }
-}
-
-class DBDI::PreparedStatement::SQLite3 is DBDI::PreparedStatement {
-    has $connection;
-    has $stHandle;
-    has @columns;
-    has %columns;
-    has @bind_params;
-    has $!sql;
-
-    method executeUpdate() {
-        self.next();
-        self.finalize();
-    }
-
-    my method errorCheck () {
-        my $res = SQLite::errcode($connection.dbHandle);
-        my $res_c = SQLite::errmsg($connection.dbHandle);
-        if ($res > 0 and $res < 100) { die $res_c }
-        return $res;
-    }
-
-    my method fillColumns () {
-        # Won't work in any useful way at the moment
-        my $cn; my $i =0;
-        while ($cn = SQLite::column_name($stHandle, $i)) {
-            %columns{$cn} = $i++;
-            push @columns, $cn;
-        }
-    }
-
-    method next () {
-        SQLite::step($stHandle);
-        if (! + at columns) { self!fillColumns(); }
-        my $res = self!errorCheck();
-        return $res == 100;
-    }
-    method finalize () {
-        SQLite::finalize($stHandle);
-        return self!errorCheck();
-    }
-
-    method bind($num, $data) {
-        @bind_params[$num] = $data;
-        SQLite::bind_text($stHandle, $num, $data, chars($data), -1);
-        return self!errorCheck();
-    }
-
-    method lookupCol ($name) { return %columns{$name} // -1; }
-
-    method getCol ($num) { return SQLite::column_text($stHandle, $num); }
-}

Deleted: branches/avl_string_cache/ext/SQLite3/Makefile.PL
==============================================================================
--- branches/avl_string_cache/ext/SQLite3/Makefile.PL	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,5 +0,0 @@
-use lib '../../lib';
-use Parrot::Configure;
-my $pc = Parrot::Configure->new();
-$pc->data->get_PConfig();
-$pc->genfile("Makefile.in" => "Makefile");

Deleted: branches/avl_string_cache/ext/SQLite3/Makefile.in
==============================================================================
--- branches/avl_string_cache/ext/SQLite3/Makefile.in	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,86 +0,0 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
-
-TARGET_NAME = sqlite3s
-
-C_FILES = sqlite3s.c
-O_FILES = sqlite3s.o
-
-BUILDPREFIX     =
-PARROT_ROOT     = @build_dir@
-PREFIX          = @prefix@
-EXEC_PREFIX     = @exec_prefix@
-DESTDIR         =
-BIN_DIR         = @bindir@
-LIB_DIR         = @libdir@
-INCLUDE_DIR     = @includedir@
-DOC_DIR         = @docdir@
-INC_DIR         = @inc@
-RM_F             = @rm_f@
-RM_RF            = @rm_rf@
-AR_CR            = @ar@ @ar_flags@
-RANLIB           = @ranlib@
-PERL             = @perl@
-CP               = @cp@
-CHMOD            = @chmod@
-TOUCH            = @touch@
-YACC             = @yacc@
-LEX              = @lex@
-MKPATH           = @mkpath@
-AS               = @as@
-CC               = @cc@
-CC_INC           = @cc_inc@
-C_LIBS           = @libs@
-CC_SHARED        = @cc_shared@
-CFLAGS           = $(CC_INC) @ccflags@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@ $(CC_SHARED)
-LINK_DYNAMIC     = @link_dynamic@
-LINK             = @link@
-LINKFLAGS        = @linkflags@ @link_debug@ @ld_debug@
-LD               = @ld@
-LDFLAGS          = @ldflags@ @ld_debug@
-#IF(darwin):export MACOSX_DEPLOYMENT_TARGET := @osx_version@
-O                = @o@
-EXE              = @exe@
-SHARE_EXT        = @share_ext@
-LOAD_EXT         = @load_ext@
-A                = @a@
-LD_SHARE_FLAGS   = @ld_share_flags@
-LD_LOAD_FLAGS    = @ld_load_flags@
-DYNEXT_DIR          = runtime/parrot/dynext
-
- at make_set_make@
-MAKE = @make_c@
-SHARED_LIB = $(TARGET_NAME)$(SHARE_EXT)
-
-.SUFFIXES : .c .h .pmc .dump $(O) .str .pir .pbc
-
-# Passing an empty argument in @ARGV to cc_flags.pl to indicate where extra -Is
-# (etc) should go. Otherwise it will insert them after the first space, which
-# makes life go horribly wrong if $(CC) contains spaces but can't have -I
-# arguments (etc) injected in the middle.
-# There is probably a better way to do this, but I can't work it out right now.
-.c$(O) :
-	@$(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
-
-PERL6=../../parrot ../../languages/rakudo/perl6.pbc
-
-all :
-	cd ../..; make all
-	cd ../../compilers/ncigen; $(PERL6) ../../ext/SQLite3/gen_sqlite3.pl /usr/include/sqlite3.h > ../../ext/SQLite3/genSQLite3.pir
-
-test:
-	$(RM_F) test.db t/test.db
-	PERL6LIB=../../languages/rakudo $(PERL6) t/test.p6
-
-$(SHARED_LIB) : $(C_FILES)
-	$(MKPATH) @blib_dir@
-	$(CC) $(CC_INC) $(LD_SHARE_FLAGS) $(LDFLAGS) @ld_out@$@ \
-#IF(cygwin):		-Wl,--out-implib=lib$(TARGET_NAME).dll.a \
-#IF(win32 and cc==gcc):		-Wl,--out-implib=lib$(TARGET_NAME).lib \
-		$(C_FILES) $(C_LIBS) $(ICU_SHARED)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-
-clean : 
-	$(RM_F) $(SHARED_LIB) @blib_dir@ $(O_FILES) Makefile
-#IF(cygwin):	$(RM_F) lib$(TARGET_NAME).dll.a
-#IF(win32 and cc==gcc):	$(RM_F) lib$(TARGET_NAME).lib

Deleted: branches/avl_string_cache/ext/SQLite3/SQLite3.pir
==============================================================================
--- branches/avl_string_cache/ext/SQLite3/SQLite3.pir	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,135 +0,0 @@
-# Copyright (C) 2008-2009, Parrot Foundation.
-# $Id$
-
-.namespace ['SQLite3']
-
-.const int SQLITE_OK         =   0   # Successful result
-# beginning-of-error-codes
-.const int SQLITE_ERROR      =   1   # SQL error or missing database
-.const int SQLITE_INTERNAL   =   2   # Internal logic error in SQLite
-.const int SQLITE_PERM       =   3   # Access permission denied
-.const int SQLITE_ABORT      =   4   # Callback routine requested an abort
-.const int SQLITE_BUSY       =   5   # The database file is locked
-.const int SQLITE_LOCKED     =   6   # A table in the database is locked
-.const int SQLITE_NOMEM      =   7   # A malloc() failed
-.const int SQLITE_READONLY   =   8   # Attempt to write a readonly database
-.const int SQLITE_INTERRUPT  =   9   # Operation terminated by sqlite3_interrupt()
-.const int SQLITE_IOERR      =  10   # Some kind of disk I/O error occurred
-.const int SQLITE_CORRUPT    =  11   # The database disk image is malformed
-.const int SQLITE_NOTFOUND   =  12   # NOT USED. Table or record not found
-.const int SQLITE_FULL       =  13   # Insertion failed because database is full
-.const int SQLITE_CANTOPEN   =  14   # Unable to open the database file
-.const int SQLITE_PROTOCOL   =  15   # NOT USED. Database lock protocol error
-.const int SQLITE_EMPTY      =  16   # Database is empty
-.const int SQLITE_SCHEMA     =  17   # The database schema changed
-.const int SQLITE_TOOBIG     =  18   # String or BLOB exceeds size limit
-.const int SQLITE_CONSTRAINT =  19   # Abort due to constraint violation
-.const int SQLITE_MISMATCH   =  20   # Data type mismatch
-.const int SQLITE_MISUSE     =  21   # Library used incorrectly
-.const int SQLITE_NOLFS      =  22   # Uses OS features not supported on host
-.const int SQLITE_AUTH       =  23   # Authorization denied
-.const int SQLITE_FORMAT     =  24   # Auxiliary database format error
-.const int SQLITE_RANGE      =  25   # 2nd parameter to sqlite3_bind out of range
-.const int SQLITE_NOTADB     =  26   # File opened that is not a database file
-.const int SQLITE_ROW        =  100  # sqlite3_step() has another row ready
-.const int SQLITE_DONE       =  101  # sqlite3_step() has finished executing
-
-.sub '_sqlite_init' :load
-    .local pmc libname
-    .local pmc function
-    .local pmc sqlite_funcs
-
-    libname = loadlib 'libsqlite3'
-    set_global '_sqlite3', libname
-
-    sqlite_funcs = new 'ResizableStringArray'
-    push sqlite_funcs, 'step'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'finalize'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'close'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'errmsg'
-    push sqlite_funcs, 'tp'
-    push sqlite_funcs, 'errcode'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'bind_int'
-    push sqlite_funcs, 'ipii'
-    push sqlite_funcs, 'bind_double'
-    push sqlite_funcs, 'ipid'
-    push sqlite_funcs, 'bind_text'
-    push sqlite_funcs, 'ipitii'
-    push sqlite_funcs, 'column_name'
-    push sqlite_funcs, 'tpi'
-    push sqlite_funcs, 'column_count'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'column_type'
-    push sqlite_funcs, 'ipi'
-    push sqlite_funcs, 'column_int'
-    push sqlite_funcs, 'ipi'
-    push sqlite_funcs, 'column_double'
-    push sqlite_funcs, 'lpi'
-    push sqlite_funcs, 'column_text'
-    push sqlite_funcs, 'tpi'
-
-    function  = dlfunc libname, 'sqlite3_open', 'itV'
-    set_global 'open_raw', function
-
-    function  = dlfunc libname, 'sqlite3_prepare_v2', 'iptiVp'
-    set_global 'prepare_raw', function
-
-    .local pmc list_iter
-    list_iter = iter sqlite_funcs
-    .local string func_name, signature
-    .local pmc    function
-
-  list_loop:
-    unless list_iter goto done
-    func_name = shift list_iter
-    signature = shift list_iter
-    $S0 = concat 'sqlite3_', func_name
-    function  = dlfunc libname, $S0, signature
-    set_global func_name, function
-    goto list_loop
-
-  done:
-
-.end
-
-.sub 'open'
-  .param string connectstr
-  .local pmc dbhandle
-  .local pmc open_raw
-  .local int rc
-
-  open_raw = get_global 'open_raw'
-  dbhandle = new 'Pointer'
-  rc = open_raw(connectstr, dbhandle)
-
-  .return(dbhandle)
-.end
-
-.sub 'prepare'
-  .param pmc dbhandle
-  .param string psstr
-  .local int psstrlen
-  .local pmc pshandle
-  .local pmc dummy
-  .local pmc prepare_raw
-  .local int rc
-
-  prepare_raw = get_global 'prepare_raw'
-
-  pshandle = new 'Pointer'
-  dummy = new 'Pointer'
-  psstrlen = length psstr
-  rc = prepare_raw(dbhandle, psstr, psstrlen, pshandle, dummy)
-
-  .return(pshandle)
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Deleted: branches/avl_string_cache/ext/SQLite3/gen_sqlite3.pl
==============================================================================
--- branches/avl_string_cache/ext/SQLite3/gen_sqlite3.pl	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,139 +0,0 @@
-#!/home/tewk/srcs/parrot/perl6
-
-# $Id$
-# Copyright (C) 2008, Parrot Foundation.
-
-use v6;
-use NCIGENP6;
-
-my $fn = @*ARGS[0];
-
-my %rename_table = (
-    'open'          => 'open_raw',
-    'prepare_v2'    => 'prepare_raw',
-);
-
-print preamble();
-
-for (parse_ast($fn).hash().kv) -> $k,$v {
-    #dump_node($v);
-    if ($v.WHAT eq "NCIGENAST::FuncDecl()") {
-        my @result = pir($v);
-        my $cname       = @result[0];
-        my $signature   = @result[1];
-        my $source      = @result[2];
-        my $suffix_name = @result[0];
-        $suffix_name .= subst( /sqlite3_/, '' );
-
-        my $pirname = %rename_table{$suffix_name} || $suffix_name;
-
-        say "    '_nci_init_symbol_'(lib, '$pirname', '$cname', '$signature')";
-    }
-}
-print postamble();
-
-sub preamble() {
-qq{
-##GENERATED FILE DO NOT EDIT##
-##GENERATED BY gen_sqlite3.pl##
-.namespace ['SQLite3']
-
-.const int SQLITE_OK         =   0   # Successful result
-# beginning-of-error-codes
-.const int SQLITE_ERROR      =   1   # SQL error or missing database
-.const int SQLITE_INTERNAL   =   2   # Internal logic error in SQLite
-.const int SQLITE_PERM       =   3   # Access permission denied
-.const int SQLITE_ABORT      =   4   # Callback routine requested an abort
-.const int SQLITE_BUSY       =   5   # The database file is locked
-.const int SQLITE_LOCKED     =   6   # A table in the database is locked
-.const int SQLITE_NOMEM      =   7   # A malloc() failed
-.const int SQLITE_READONLY   =   8   # Attempt to write a readonly database
-.const int SQLITE_INTERRUPT  =   9   # Operation terminated by sqlite3_interrupt()
-.const int SQLITE_IOERR      =  10   # Some kind of disk I/O error occurred
-.const int SQLITE_CORRUPT    =  11   # The database disk image is malformed
-.const int SQLITE_NOTFOUND   =  12   # NOT USED. Table or record not found
-.const int SQLITE_FULL       =  13   # Insertion failed because database is full
-.const int SQLITE_CANTOPEN   =  14   # Unable to open the database file
-.const int SQLITE_PROTOCOL   =  15   # NOT USED. Database lock protocol error
-.const int SQLITE_EMPTY      =  16   # Database is empty
-.const int SQLITE_SCHEMA     =  17   # The database schema changed
-.const int SQLITE_TOOBIG     =  18   # String or BLOB exceeds size limit
-.const int SQLITE_CONSTRAINT =  19   # Abort due to constraint violation
-.const int SQLITE_MISMATCH   =  20   # Data type mismatch
-.const int SQLITE_MISUSE     =  21   # Library used incorrectly
-.const int SQLITE_NOLFS      =  22   # Uses OS features not supported on host
-.const int SQLITE_AUTH       =  23   # Authorization denied
-.const int SQLITE_FORMAT     =  24   # Auxiliary database format error
-.const int SQLITE_RANGE      =  25   # 2nd parameter to sqlite3_bind out of range
-.const int SQLITE_NOTADB     =  26   # File opened that is not a database file
-.const int SQLITE_ROW        =  100  # sqlite3_step() has another row ready
-.const int SQLITE_DONE       =  101  # sqlite3_step() has finished executing
-
-.sub '_nci_init_symbol_'
-    .param pmc    lib
-    .param string pirname
-    .param string cname
-    .param string signature
-    .local pmc    function
-
-    function  = dlfunc lib, cname, signature
-    set_global pirname, function
-.end
-
-.sub '_sqlite_init' :load
-    .local pmc lib
-
-    lib = loadlib 'libsqlite3'
-    set_global '_sqlite3', lib
-};
-}
-
-sub postamble () {
-qq{.end
-
-.sub 'open'
-  .param string connectstr
-  .local pmc dbhandle
-  .local pmc open_raw
-  .local int rc
-
-  open_raw = get_global 'open_raw'
-  dbhandle = new 'Pointer'
-  rc = open_raw(connectstr, dbhandle)
-
-  .return(dbhandle)
-.end
-
-.sub 'prepare'
-  .param pmc dbhandle
-  .param string psstr
-  .local int psstrlen
-  .local pmc pshandle
-  .local pmc dummy
-  .local pmc prepare_raw
-  .local int rc
-
-  prepare_raw = get_global 'prepare_raw'
-
-  pshandle = new 'Pointer'
-  dummy = new 'Pointer'
-  psstrlen = length psstr
-  rc = prepare_raw(dbhandle, psstr, psstrlen, pshandle, dummy)
-
-  .return(pshandle)
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:
-};
-}
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=perl6:
-

Deleted: branches/avl_string_cache/ext/SQLite3/t/test.p6
==============================================================================
--- branches/avl_string_cache/ext/SQLite3/t/test.p6	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,35 +0,0 @@
-use DBDI;
-use Test;
-
-plan 7;
-
-my $conn = DBDI::DriverManager.getConnection("dbdi:SQLite3:test.db", "", "");
-isa_ok($conn, DBDI::Driver::SQLite3);
-my $stm = $conn.createStatement();
-isa_ok($stm, DBDI::Statement);
-my $rs = $stm.executeUpdate("CREATE TABLE foo (bar, baz)");
-### I'd also add a test that a SELECT works and returns 0 rows
-
-try {
-    $rs = $stm.executeUpdate("CREATE TABLE foo (bar, baz)");
-};
-ok($! eq "table foo already exists", "Can't create again (and did create first time)");
-my $stm = $conn.prepareStatement("INSERT INTO foo (bar, baz) VALUES (?, ?)");
-isa_ok( $stm, DBDI::PreparedStatement);
-$stm.bind(1, 123);
-$stm.bind(2, "Thingy");
-$stm.executeUpdate();
-### is( $stm->rowsAffected, 1, 'Inserted one row' );
-
-my $stm2 = $conn.createStatement();
-my $rs = $stm2.executeQuery("SELECT baz, bar FROM foo");
-while ($rs.next()) {
-    ok(($rs.getCol("baz") eq "Thingy"), "baz == Thingy");
-    ok(($rs.getCol(1) = 123), "col1 == 123");
-    try { 
-        $rs.getCol("bas");
-    };
-    ok($! eq "Couldn't find column bas", "Non-existent columns");
-}
-
-# vim: ft=perl6:

Deleted: branches/avl_string_cache/ext/SQLite3/test.pir
==============================================================================
--- branches/avl_string_cache/ext/SQLite3/test.pir	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,25 +0,0 @@
-#../../parrot -t5 test.pir
-# Copyright (C) 2008-2009, Parrot Foundation.
-# $Id$
-
-.sub 'main'
-load_bytecode 'SQLite3.pir'
-
-$P0 = get_global [ 'SQLite' ], 'open'
-$P1 = $P0("test.db")
-
-$P2 = get_global [ 'SQLite' ], 'prepare'
-$P3 = $P2 ($P1, "CREATE TABLE foo (bar)")
-
-$P4 = get_global [ 'SQLite' ], 'step'
-$P5 = $P4 ($P3)
-
-$P6 = get_global [ 'SQLite' ], 'finalize'
-$P7 = $P6 ($P3)
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Deleted: branches/avl_string_cache/ext/nqp-rx/.gitignore
==============================================================================
--- branches/avl_string_cache/ext/nqp-rx/.gitignore	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,15 +0,0 @@
-Makefile
-/parrot
-/parrot_install
-.*.swp
-*.c
-*.o
-Regex.pbc
-HLL.pbc
-P6Regex
-P6Regex.pbc
-nqp
-nqp.pbc
-src/gen/*.pir
-src/stage1
-src/stage2

Modified: branches/avl_string_cache/ext/nqp-rx/src/stage0/HLL-s0.pir
==============================================================================
--- branches/avl_string_cache/ext/nqp-rx/src/stage0/HLL-s0.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/ext/nqp-rx/src/stage0/HLL-s0.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -854,111 +854,119 @@
 ### .include 'gen/hllgrammar-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204683.33533")
+.sub "_block11"  :anon :subid("10_1271336377.56964")
 .annotate "line", 0
     get_hll_global $P14, ["HLL";"Grammar"], "_block13" 
     capture_lex $P14
 .annotate "line", 5
     get_hll_global $P14, ["HLL";"Grammar"], "_block13" 
     capture_lex $P14
-    $P296 = $P14()
+    $P344 = $P14()
 .annotate "line", 1
-    .return ($P296)
+    .return ($P344)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post94") :outer("10_1267204683.33533")
+.sub "" :load :init :subid("post105") :outer("10_1271336377.56964")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204683.33533" 
+    .const 'Sub' $P12 = "10_1271336377.56964" 
     .local pmc block
     set block, $P12
-    $P297 = get_root_global ["parrot"], "P6metaclass"
-    $P297."new_class"("HLL::Grammar", "Regex::Cursor" :named("parent"))
+    $P345 = get_root_global ["parrot"], "P6metaclass"
+    $P345."new_class"("HLL::Grammar", "Regex::Cursor" :named("parent"))
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block13"  :subid("11_1267204683.33533") :outer("10_1267204683.33533")
+.sub "_block13"  :subid("11_1271336377.56964") :outer("10_1271336377.56964")
 .annotate "line", 5
-    .const 'Sub' $P286 = "92_1267204683.33533" 
-    capture_lex $P286
-    .const 'Sub' $P279 = "90_1267204683.33533" 
-    capture_lex $P279
-    .const 'Sub' $P266 = "87_1267204683.33533" 
-    capture_lex $P266
-    .const 'Sub' $P261 = "85_1267204683.33533" 
-    capture_lex $P261
-    .const 'Sub' $P255 = "83_1267204683.33533" 
-    capture_lex $P255
-    .const 'Sub' $P249 = "81_1267204683.33533" 
+    .const 'Sub' $P334 = "103_1271336377.56964" 
+    capture_lex $P334
+    .const 'Sub' $P327 = "101_1271336377.56964" 
+    capture_lex $P327
+    .const 'Sub' $P314 = "98_1271336377.56964" 
+    capture_lex $P314
+    .const 'Sub' $P282 = "93_1271336377.56964" 
+    capture_lex $P282
+    .const 'Sub' $P276 = "91_1271336377.56964" 
+    capture_lex $P276
+    .const 'Sub' $P271 = "89_1271336377.56964" 
+    capture_lex $P271
+    .const 'Sub' $P265 = "87_1271336377.56964" 
+    capture_lex $P265
+    .const 'Sub' $P259 = "85_1271336377.56964" 
+    capture_lex $P259
+    .const 'Sub' $P254 = "83_1271336377.56964" 
+    capture_lex $P254
+    .const 'Sub' $P249 = "81_1271336377.56964" 
     capture_lex $P249
-    .const 'Sub' $P244 = "79_1267204683.33533" 
+    .const 'Sub' $P244 = "79_1271336377.56964" 
     capture_lex $P244
-    .const 'Sub' $P239 = "77_1267204683.33533" 
+    .const 'Sub' $P239 = "77_1271336377.56964" 
     capture_lex $P239
-    .const 'Sub' $P234 = "75_1267204683.33533" 
+    .const 'Sub' $P234 = "75_1271336377.56964" 
     capture_lex $P234
-    .const 'Sub' $P229 = "73_1267204683.33533" 
+    .const 'Sub' $P229 = "73_1271336377.56964" 
     capture_lex $P229
-    .const 'Sub' $P224 = "71_1267204683.33533" 
+    .const 'Sub' $P224 = "71_1271336377.56964" 
     capture_lex $P224
-    .const 'Sub' $P219 = "69_1267204683.33533" 
+    .const 'Sub' $P219 = "69_1271336377.56964" 
     capture_lex $P219
-    .const 'Sub' $P208 = "65_1267204683.33533" 
+    .const 'Sub' $P208 = "65_1271336377.56964" 
     capture_lex $P208
-    .const 'Sub' $P195 = "63_1267204683.33533" 
+    .const 'Sub' $P195 = "63_1271336377.56964" 
     capture_lex $P195
-    .const 'Sub' $P183 = "61_1267204683.33533" 
+    .const 'Sub' $P183 = "61_1271336377.56964" 
     capture_lex $P183
-    .const 'Sub' $P176 = "59_1267204683.33533" 
+    .const 'Sub' $P176 = "59_1271336377.56964" 
     capture_lex $P176
-    .const 'Sub' $P167 = "57_1267204683.33533" 
+    .const 'Sub' $P167 = "57_1271336377.56964" 
     capture_lex $P167
-    .const 'Sub' $P160 = "55_1267204683.33533" 
+    .const 'Sub' $P160 = "55_1271336377.56964" 
     capture_lex $P160
-    .const 'Sub' $P151 = "53_1267204683.33533" 
+    .const 'Sub' $P151 = "53_1271336377.56964" 
     capture_lex $P151
-    .const 'Sub' $P144 = "51_1267204683.33533" 
+    .const 'Sub' $P144 = "51_1271336377.56964" 
     capture_lex $P144
-    .const 'Sub' $P135 = "49_1267204683.33533" 
+    .const 'Sub' $P135 = "49_1271336377.56964" 
     capture_lex $P135
-    .const 'Sub' $P128 = "47_1267204683.33533" 
+    .const 'Sub' $P128 = "47_1271336377.56964" 
     capture_lex $P128
-    .const 'Sub' $P121 = "45_1267204683.33533" 
+    .const 'Sub' $P121 = "45_1271336377.56964" 
     capture_lex $P121
-    .const 'Sub' $P111 = "43_1267204683.33533" 
+    .const 'Sub' $P111 = "43_1271336377.56964" 
     capture_lex $P111
-    .const 'Sub' $P103 = "41_1267204683.33533" 
+    .const 'Sub' $P103 = "41_1271336377.56964" 
     capture_lex $P103
-    .const 'Sub' $P93 = "40_1267204683.33533" 
+    .const 'Sub' $P93 = "40_1271336377.56964" 
     capture_lex $P93
-    .const 'Sub' $P87 = "38_1267204683.33533" 
+    .const 'Sub' $P87 = "38_1271336377.56964" 
     capture_lex $P87
-    .const 'Sub' $P82 = "36_1267204683.33533" 
+    .const 'Sub' $P82 = "36_1271336377.56964" 
     capture_lex $P82
-    .const 'Sub' $P74 = "34_1267204683.33533" 
+    .const 'Sub' $P74 = "34_1271336377.56964" 
     capture_lex $P74
-    .const 'Sub' $P68 = "32_1267204683.33533" 
+    .const 'Sub' $P68 = "32_1271336377.56964" 
     capture_lex $P68
-    .const 'Sub' $P62 = "30_1267204683.33533" 
+    .const 'Sub' $P62 = "30_1271336377.56964" 
     capture_lex $P62
-    .const 'Sub' $P56 = "28_1267204683.33533" 
+    .const 'Sub' $P56 = "28_1271336377.56964" 
     capture_lex $P56
-    .const 'Sub' $P23 = "14_1267204683.33533" 
+    .const 'Sub' $P23 = "14_1271336377.56964" 
     capture_lex $P23
-    .const 'Sub' $P15 = "12_1267204683.33533" 
+    .const 'Sub' $P15 = "12_1271336377.56964" 
     capture_lex $P15
 .annotate "line", 33
-    .const 'Sub' $P286 = "92_1267204683.33533" 
-    capture_lex $P286
+    .const 'Sub' $P334 = "103_1271336377.56964" 
+    capture_lex $P334
 .annotate "line", 5
-    .return ($P286)
+    .return ($P334)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "ws"  :subid("12_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "ws"  :subid("12_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 5
     .local string rx16_tgt
     .local int rx16_pos
@@ -1042,7 +1050,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__ws"  :subid("13_1267204683.33533") :method
+.sub "!PREFIX__ws"  :subid("13_1271336377.56964") :method
 .annotate "line", 5
     new $P18, "ResizablePMCArray"
     push $P18, ""
@@ -1051,7 +1059,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "termish"  :subid("14_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "termish"  :subid("14_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 5
     .local string rx24_tgt
     .local int rx24_pos
@@ -1061,7 +1069,7 @@
     .local pmc rx24_cur
     (rx24_cur, rx24_pos, rx24_tgt) = self."!cursor_start"()
     rx24_cur."!cursor_debug"("START ", "termish")
-    rx24_cur."!cursor_caparray"("prefixish", "postfixish")
+    rx24_cur."!cursor_caparray"("postfixish", "prefixish")
     .lex unicode:"$\x{a2}", rx24_cur
     .local pmc match
     .lex "$/", match
@@ -1143,7 +1151,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__termish"  :subid("15_1267204683.33533") :method
+.sub "!PREFIX__termish"  :subid("15_1271336377.56964") :method
 .annotate "line", 5
     new $P26, "ResizablePMCArray"
     push $P26, ""
@@ -1152,7 +1160,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term"  :subid("16_1267204683.33533") :method
+.sub "term"  :subid("16_1271336377.56964") :method
 .annotate "line", 13
     $P33 = self."!protoregex"("term")
     .return ($P33)
@@ -1160,7 +1168,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term"  :subid("17_1267204683.33533") :method
+.sub "!PREFIX__term"  :subid("17_1271336377.56964") :method
 .annotate "line", 13
     $P35 = self."!PREFIX__!protoregex"("term")
     .return ($P35)
@@ -1168,7 +1176,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infix"  :subid("18_1267204683.33533") :method
+.sub "infix"  :subid("18_1271336377.56964") :method
 .annotate "line", 14
     $P37 = self."!protoregex"("infix")
     .return ($P37)
@@ -1176,7 +1184,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infix"  :subid("19_1267204683.33533") :method
+.sub "!PREFIX__infix"  :subid("19_1271336377.56964") :method
 .annotate "line", 14
     $P39 = self."!PREFIX__!protoregex"("infix")
     .return ($P39)
@@ -1184,7 +1192,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefix"  :subid("20_1267204683.33533") :method
+.sub "prefix"  :subid("20_1271336377.56964") :method
 .annotate "line", 15
     $P41 = self."!protoregex"("prefix")
     .return ($P41)
@@ -1192,7 +1200,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefix"  :subid("21_1267204683.33533") :method
+.sub "!PREFIX__prefix"  :subid("21_1271336377.56964") :method
 .annotate "line", 15
     $P43 = self."!PREFIX__!protoregex"("prefix")
     .return ($P43)
@@ -1200,7 +1208,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfix"  :subid("22_1267204683.33533") :method
+.sub "postfix"  :subid("22_1271336377.56964") :method
 .annotate "line", 16
     $P45 = self."!protoregex"("postfix")
     .return ($P45)
@@ -1208,7 +1216,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfix"  :subid("23_1267204683.33533") :method
+.sub "!PREFIX__postfix"  :subid("23_1271336377.56964") :method
 .annotate "line", 16
     $P47 = self."!PREFIX__!protoregex"("postfix")
     .return ($P47)
@@ -1216,7 +1224,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "circumfix"  :subid("24_1267204683.33533") :method
+.sub "circumfix"  :subid("24_1271336377.56964") :method
 .annotate "line", 17
     $P49 = self."!protoregex"("circumfix")
     .return ($P49)
@@ -1224,7 +1232,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__circumfix"  :subid("25_1267204683.33533") :method
+.sub "!PREFIX__circumfix"  :subid("25_1271336377.56964") :method
 .annotate "line", 17
     $P51 = self."!PREFIX__!protoregex"("circumfix")
     .return ($P51)
@@ -1232,7 +1240,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postcircumfix"  :subid("26_1267204683.33533") :method
+.sub "postcircumfix"  :subid("26_1271336377.56964") :method
 .annotate "line", 18
     $P53 = self."!protoregex"("postcircumfix")
     .return ($P53)
@@ -1240,7 +1248,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postcircumfix"  :subid("27_1267204683.33533") :method
+.sub "!PREFIX__postcircumfix"  :subid("27_1271336377.56964") :method
 .annotate "line", 18
     $P55 = self."!PREFIX__!protoregex"("postcircumfix")
     .return ($P55)
@@ -1248,7 +1256,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term:sym<circumfix>"  :subid("28_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "term:sym<circumfix>"  :subid("28_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 5
     .local string rx57_tgt
     .local int rx57_pos
@@ -1306,7 +1314,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1267204683.33533") :method
+.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1271336377.56964") :method
 .annotate "line", 5
     $P59 = self."!PREFIX__!subrule"("circumfix", "")
     new $P60, "ResizablePMCArray"
@@ -1316,7 +1324,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infixish"  :subid("30_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "infixish"  :subid("30_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 5
     .local string rx63_tgt
     .local int rx63_pos
@@ -1374,7 +1382,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("31_1267204683.33533") :method
+.sub "!PREFIX__infixish"  :subid("31_1271336377.56964") :method
 .annotate "line", 5
     $P65 = self."!PREFIX__!subrule"("OPER=infix", "")
     new $P66, "ResizablePMCArray"
@@ -1384,7 +1392,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefixish"  :subid("32_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "prefixish"  :subid("32_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 5
     .local string rx69_tgt
     .local int rx69_pos
@@ -1447,7 +1455,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefixish"  :subid("33_1267204683.33533") :method
+.sub "!PREFIX__prefixish"  :subid("33_1271336377.56964") :method
 .annotate "line", 5
     $P71 = self."!PREFIX__!subrule"("OPER=prefix", "")
     new $P72, "ResizablePMCArray"
@@ -1457,7 +1465,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfixish"  :subid("34_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "postfixish"  :subid("34_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 5
     .local string rx75_tgt
     .local int rx75_pos
@@ -1531,7 +1539,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfixish"  :subid("35_1267204683.33533") :method
+.sub "!PREFIX__postfixish"  :subid("35_1271336377.56964") :method
 .annotate "line", 5
     $P77 = self."!PREFIX__!subrule"("OPER=postcircumfix", "")
     $P78 = self."!PREFIX__!subrule"("OPER=postfix", "")
@@ -1543,7 +1551,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm"  :subid("36_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "nullterm"  :subid("36_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 5
     .local string rx83_tgt
     .local int rx83_pos
@@ -1594,7 +1602,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm"  :subid("37_1267204683.33533") :method
+.sub "!PREFIX__nullterm"  :subid("37_1271336377.56964") :method
 .annotate "line", 5
     new $P85, "ResizablePMCArray"
     push $P85, ""
@@ -1603,7 +1611,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm_alt"  :subid("38_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "nullterm_alt"  :subid("38_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 5
     .local string rx88_tgt
     .local int rx88_pos
@@ -1661,7 +1669,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm_alt"  :subid("39_1267204683.33533") :method
+.sub "!PREFIX__nullterm_alt"  :subid("39_1271336377.56964") :method
 .annotate "line", 5
     $P90 = self."!PREFIX__!subrule"("term", "")
     new $P91, "ResizablePMCArray"
@@ -1671,7 +1679,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nulltermish"  :subid("40_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "nulltermish"  :subid("40_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     new $P95, 'ExceptionHandler'
     set_addr $P95, control_94
@@ -1698,7 +1706,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_delimited"  :subid("41_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_delimited"  :subid("41_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx104_tgt
     .local int rx104_pos
@@ -1780,7 +1788,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_delimited"  :subid("42_1267204683.33533") :method
+.sub "!PREFIX__quote_delimited"  :subid("42_1271336377.56964") :method
 .annotate "line", 33
     $P106 = self."!PREFIX__!subrule"("starter", "")
     new $P107, "ResizablePMCArray"
@@ -1790,7 +1798,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_atom"  :subid("43_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_atom"  :subid("43_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx112_tgt
     .local int rx112_pos
@@ -1881,7 +1889,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_atom"  :subid("44_1267204683.33533") :method
+.sub "!PREFIX__quote_atom"  :subid("44_1271336377.56964") :method
 .annotate "line", 33
     new $P114, "ResizablePMCArray"
     push $P114, ""
@@ -1890,7 +1898,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "decint"  :subid("45_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "decint"  :subid("45_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx122_tgt
     .local int rx122_pos
@@ -1962,7 +1970,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__decint"  :subid("46_1267204683.33533") :method
+.sub "!PREFIX__decint"  :subid("46_1271336377.56964") :method
 .annotate "line", 33
     new $P124, "ResizablePMCArray"
     push $P124, ""
@@ -1971,7 +1979,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexints"  :subid("47_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "decints"  :subid("47_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx129_tgt
     .local int rx129_pos
@@ -1980,7 +1988,7 @@
     .local int rx129_rep
     .local pmc rx129_cur
     (rx129_cur, rx129_pos, rx129_tgt) = self."!cursor_start"()
-    rx129_cur."!cursor_debug"("START ", "hexints")
+    rx129_cur."!cursor_debug"("START ", "decints")
     rx129_cur."!cursor_caparray"("decint")
     .lex unicode:"$\x{a2}", rx129_cur
     .local pmc match
@@ -2037,8 +2045,8 @@
     goto rxquantr133_loop
   rxquantr133_done:
   # rx pass
-    rx129_cur."!cursor_pass"(rx129_pos, "hexints")
-    rx129_cur."!cursor_debug"("PASS  ", "hexints", " at pos=", rx129_pos)
+    rx129_cur."!cursor_pass"(rx129_pos, "decints")
+    rx129_cur."!cursor_debug"("PASS  ", "decints", " at pos=", rx129_pos)
     .return (rx129_cur)
   rx129_fail:
 .annotate "line", 33
@@ -2048,14 +2056,14 @@
     jump $I10
   rx129_done:
     rx129_cur."!cursor_fail"()
-    rx129_cur."!cursor_debug"("FAIL  ", "hexints")
+    rx129_cur."!cursor_debug"("FAIL  ", "decints")
     .return (rx129_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexints"  :subid("48_1267204683.33533") :method
+.sub "!PREFIX__decints"  :subid("48_1271336377.56964") :method
 .annotate "line", 33
     new $P131, "ResizablePMCArray"
     push $P131, ""
@@ -2064,7 +2072,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexint"  :subid("49_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "hexint"  :subid("49_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx136_tgt
     .local int rx136_pos
@@ -2145,7 +2153,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexint"  :subid("50_1267204683.33533") :method
+.sub "!PREFIX__hexint"  :subid("50_1271336377.56964") :method
 .annotate "line", 33
     new $P138, "ResizablePMCArray"
     push $P138, ""
@@ -2154,7 +2162,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexints"  :subid("51_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "hexints"  :subid("51_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx145_tgt
     .local int rx145_pos
@@ -2238,7 +2246,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexints"  :subid("52_1267204683.33533") :method
+.sub "!PREFIX__hexints"  :subid("52_1271336377.56964") :method
 .annotate "line", 33
     new $P147, "ResizablePMCArray"
     push $P147, ""
@@ -2247,7 +2255,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octint"  :subid("53_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "octint"  :subid("53_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx152_tgt
     .local int rx152_pos
@@ -2328,7 +2336,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octint"  :subid("54_1267204683.33533") :method
+.sub "!PREFIX__octint"  :subid("54_1271336377.56964") :method
 .annotate "line", 33
     new $P154, "ResizablePMCArray"
     push $P154, ""
@@ -2337,7 +2345,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octints"  :subid("55_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "octints"  :subid("55_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx161_tgt
     .local int rx161_pos
@@ -2421,7 +2429,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octints"  :subid("56_1267204683.33533") :method
+.sub "!PREFIX__octints"  :subid("56_1271336377.56964") :method
 .annotate "line", 33
     new $P163, "ResizablePMCArray"
     push $P163, ""
@@ -2430,7 +2438,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binint"  :subid("57_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "binint"  :subid("57_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx168_tgt
     .local int rx168_pos
@@ -2511,7 +2519,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binint"  :subid("58_1267204683.33533") :method
+.sub "!PREFIX__binint"  :subid("58_1271336377.56964") :method
 .annotate "line", 33
     new $P170, "ResizablePMCArray"
     push $P170, ""
@@ -2520,7 +2528,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binints"  :subid("59_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "binints"  :subid("59_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx177_tgt
     .local int rx177_pos
@@ -2604,7 +2612,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binints"  :subid("60_1267204683.33533") :method
+.sub "!PREFIX__binints"  :subid("60_1271336377.56964") :method
 .annotate "line", 33
     new $P179, "ResizablePMCArray"
     push $P179, ""
@@ -2613,7 +2621,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "integer"  :subid("61_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "integer"  :subid("61_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx184_tgt
     .local int rx184_pos
@@ -2761,7 +2769,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__integer"  :subid("62_1267204683.33533") :method
+.sub "!PREFIX__integer"  :subid("62_1271336377.56964") :method
 .annotate "line", 33
     $P186 = self."!PREFIX__!subrule"("VALUE=decint", "")
     $P187 = self."!PREFIX__!subrule"("VALUE=decint", "0d")
@@ -2779,7 +2787,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "dec_number"  :subid("63_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "dec_number"  :subid("63_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx196_tgt
     .local int rx196_pos
@@ -2958,7 +2966,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__dec_number"  :subid("64_1267204683.33533") :method
+.sub "!PREFIX__dec_number"  :subid("64_1271336377.56964") :method
 .annotate "line", 33
     new $P198, "ResizablePMCArray"
     push $P198, ""
@@ -2969,7 +2977,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "escale"  :subid("65_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "escale"  :subid("65_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx209_tgt
     .local int rx209_pos
@@ -3046,7 +3054,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__escale"  :subid("66_1267204683.33533") :method
+.sub "!PREFIX__escale"  :subid("66_1271336377.56964") :method
 .annotate "line", 33
     new $P211, "ResizablePMCArray"
     push $P211, "e"
@@ -3056,7 +3064,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape"  :subid("67_1267204683.33533") :method
+.sub "quote_escape"  :subid("67_1271336377.56964") :method
 .annotate "line", 79
     $P216 = self."!protoregex"("quote_escape")
     .return ($P216)
@@ -3064,7 +3072,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape"  :subid("68_1267204683.33533") :method
+.sub "!PREFIX__quote_escape"  :subid("68_1271336377.56964") :method
 .annotate "line", 79
     $P218 = self."!PREFIX__!protoregex"("quote_escape")
     .return ($P218)
@@ -3072,7 +3080,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<backslash>"  :subid("69_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<backslash>"  :subid("69_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx220_tgt
     .local int rx220_pos
@@ -3134,7 +3142,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1271336377.56964") :method
 .annotate "line", 33
     new $P222, "ResizablePMCArray"
     push $P222, "\\\\"
@@ -3143,7 +3151,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<stopper>"  :subid("71_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<stopper>"  :subid("71_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx225_tgt
     .local int rx225_pos
@@ -3212,7 +3220,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1271336377.56964") :method
 .annotate "line", 33
     new $P227, "ResizablePMCArray"
     push $P227, "\\"
@@ -3221,7 +3229,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<bs>"  :subid("73_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<bs>"  :subid("73_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx230_tgt
     .local int rx230_pos
@@ -3283,7 +3291,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1271336377.56964") :method
 .annotate "line", 33
     new $P232, "ResizablePMCArray"
     push $P232, "\\b"
@@ -3292,7 +3300,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<nl>"  :subid("75_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<nl>"  :subid("75_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx235_tgt
     .local int rx235_pos
@@ -3354,7 +3362,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1271336377.56964") :method
 .annotate "line", 33
     new $P237, "ResizablePMCArray"
     push $P237, "\\n"
@@ -3363,7 +3371,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<cr>"  :subid("77_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<cr>"  :subid("77_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx240_tgt
     .local int rx240_pos
@@ -3425,7 +3433,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1271336377.56964") :method
 .annotate "line", 33
     new $P242, "ResizablePMCArray"
     push $P242, "\\r"
@@ -3434,7 +3442,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<tab>"  :subid("79_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<tab>"  :subid("79_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx245_tgt
     .local int rx245_pos
@@ -3496,7 +3504,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1271336377.56964") :method
 .annotate "line", 33
     new $P247, "ResizablePMCArray"
     push $P247, "\\t"
@@ -3505,7 +3513,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<hex>"  :subid("81_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<ff>"  :subid("81_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
     .local string rx250_tgt
     .local int rx250_pos
@@ -3514,7 +3522,7 @@
     .local int rx250_rep
     .local pmc rx250_cur
     (rx250_cur, rx250_pos, rx250_tgt) = self."!cursor_start"()
-    rx250_cur."!cursor_debug"("START ", "quote_escape:sym<hex>")
+    rx250_cur."!cursor_debug"("START ", "quote_escape:sym<ff>")
     .lex unicode:"$\x{a2}", rx250_cur
     .local pmc match
     .lex "$/", match
@@ -3536,57 +3544,21 @@
     set_addr $I10, rxscan253_loop
     rx250_cur."!mark_push"(0, rx250_pos, $I10)
   rxscan253_done:
-.annotate "line", 88
-  # rx literal  unicode:"\\x"
+.annotate "line", 87
+  # rx literal  "\\f"
     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, unicode:"\\x", rx250_fail
+    ne $S10, "\\f", rx250_fail
     add rx250_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
     rx250_cur."!cursor_pos"(rx250_pos)
     $P10 = rx250_cur."quotemod_check"("b")
     unless $P10, rx250_fail
-  alt254_0:
-.annotate "line", 89
-    set_addr $I10, alt254_1
-    rx250_cur."!mark_push"(0, rx250_pos, $I10)
-  # rx subrule "hexint" subtype=capture negate=
-    rx250_cur."!cursor_pos"(rx250_pos)
-    $P10 = rx250_cur."hexint"()
-    unless $P10, rx250_fail
-    rx250_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexint")
-    rx250_pos = $P10."pos"()
-    goto alt254_end
-  alt254_1:
-  # rx literal  "["
-    add $I11, rx250_pos, 1
-    gt $I11, rx250_eos, rx250_fail
-    sub $I11, rx250_pos, rx250_off
-    substr $S10, rx250_tgt, $I11, 1
-    ne $S10, "[", rx250_fail
-    add rx250_pos, 1
-  # rx subrule "hexints" subtype=capture negate=
-    rx250_cur."!cursor_pos"(rx250_pos)
-    $P10 = rx250_cur."hexints"()
-    unless $P10, rx250_fail
-    rx250_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexints")
-    rx250_pos = $P10."pos"()
-  # rx literal  "]"
-    add $I11, rx250_pos, 1
-    gt $I11, rx250_eos, rx250_fail
-    sub $I11, rx250_pos, rx250_off
-    substr $S10, rx250_tgt, $I11, 1
-    ne $S10, "]", rx250_fail
-    add rx250_pos, 1
-  alt254_end:
-.annotate "line", 87
   # rx pass
-    rx250_cur."!cursor_pass"(rx250_pos, "quote_escape:sym<hex>")
-    rx250_cur."!cursor_debug"("PASS  ", "quote_escape:sym<hex>", " at pos=", rx250_pos)
+    rx250_cur."!cursor_pass"(rx250_pos, "quote_escape:sym<ff>")
+    rx250_cur."!cursor_debug"("PASS  ", "quote_escape:sym<ff>", " at pos=", rx250_pos)
     .return (rx250_cur)
   rx250_fail:
 .annotate "line", 33
@@ -3596,376 +3568,387 @@
     jump $I10
   rx250_done:
     rx250_cur."!cursor_fail"()
-    rx250_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<hex>")
+    rx250_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<ff>")
     .return (rx250_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<hex>"  :subid("82_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<ff>"  :subid("82_1271336377.56964") :method
 .annotate "line", 33
     new $P252, "ResizablePMCArray"
-    push $P252, unicode:"\\x"
+    push $P252, "\\f"
     .return ($P252)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<oct>"  :subid("83_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<esc>"  :subid("83_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
-    .local string rx256_tgt
-    .local int rx256_pos
-    .local int rx256_off
-    .local int rx256_eos
-    .local int rx256_rep
-    .local pmc rx256_cur
-    (rx256_cur, rx256_pos, rx256_tgt) = self."!cursor_start"()
-    rx256_cur."!cursor_debug"("START ", "quote_escape:sym<oct>")
-    .lex unicode:"$\x{a2}", rx256_cur
+    .local string rx255_tgt
+    .local int rx255_pos
+    .local int rx255_off
+    .local int rx255_eos
+    .local int rx255_rep
+    .local pmc rx255_cur
+    (rx255_cur, rx255_pos, rx255_tgt) = self."!cursor_start"()
+    rx255_cur."!cursor_debug"("START ", "quote_escape:sym<esc>")
+    .lex unicode:"$\x{a2}", rx255_cur
     .local pmc match
     .lex "$/", match
-    length rx256_eos, rx256_tgt
-    set rx256_off, 0
-    lt rx256_pos, 2, rx256_start
-    sub rx256_off, rx256_pos, 1
-    substr rx256_tgt, rx256_tgt, rx256_off
-  rx256_start:
+    length rx255_eos, rx255_tgt
+    set rx255_off, 0
+    lt rx255_pos, 2, rx255_start
+    sub rx255_off, rx255_pos, 1
+    substr rx255_tgt, rx255_tgt, rx255_off
+  rx255_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan259_done
-    goto rxscan259_scan
-  rxscan259_loop:
-    ($P10) = rx256_cur."from"()
+    ne $I10, -1, rxscan258_done
+    goto rxscan258_scan
+  rxscan258_loop:
+    ($P10) = rx255_cur."from"()
     inc $P10
-    set rx256_pos, $P10
-    ge rx256_pos, rx256_eos, rxscan259_done
-  rxscan259_scan:
-    set_addr $I10, rxscan259_loop
-    rx256_cur."!mark_push"(0, rx256_pos, $I10)
-  rxscan259_done:
-.annotate "line", 92
-  # rx literal  "\\o"
-    add $I11, rx256_pos, 2
-    gt $I11, rx256_eos, rx256_fail
-    sub $I11, rx256_pos, rx256_off
-    substr $S10, rx256_tgt, $I11, 2
-    ne $S10, "\\o", rx256_fail
-    add rx256_pos, 2
+    set rx255_pos, $P10
+    ge rx255_pos, rx255_eos, rxscan258_done
+  rxscan258_scan:
+    set_addr $I10, rxscan258_loop
+    rx255_cur."!mark_push"(0, rx255_pos, $I10)
+  rxscan258_done:
+.annotate "line", 88
+  # rx literal  "\\e"
+    add $I11, rx255_pos, 2
+    gt $I11, rx255_eos, rx255_fail
+    sub $I11, rx255_pos, rx255_off
+    substr $S10, rx255_tgt, $I11, 2
+    ne $S10, "\\e", rx255_fail
+    add rx255_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."quotemod_check"("b")
-    unless $P10, rx256_fail
-  alt260_0:
-.annotate "line", 93
-    set_addr $I10, alt260_1
-    rx256_cur."!mark_push"(0, rx256_pos, $I10)
-  # rx subrule "octint" subtype=capture negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."octint"()
-    unless $P10, rx256_fail
-    rx256_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("octint")
-    rx256_pos = $P10."pos"()
-    goto alt260_end
-  alt260_1:
+    rx255_cur."!cursor_pos"(rx255_pos)
+    $P10 = rx255_cur."quotemod_check"("b")
+    unless $P10, rx255_fail
+  # rx pass
+    rx255_cur."!cursor_pass"(rx255_pos, "quote_escape:sym<esc>")
+    rx255_cur."!cursor_debug"("PASS  ", "quote_escape:sym<esc>", " at pos=", rx255_pos)
+    .return (rx255_cur)
+  rx255_fail:
+.annotate "line", 33
+    (rx255_rep, rx255_pos, $I10, $P10) = rx255_cur."!mark_fail"(0)
+    lt rx255_pos, -1, rx255_done
+    eq rx255_pos, -1, rx255_fail
+    jump $I10
+  rx255_done:
+    rx255_cur."!cursor_fail"()
+    rx255_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<esc>")
+    .return (rx255_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "!PREFIX__quote_escape:sym<esc>"  :subid("84_1271336377.56964") :method
+.annotate "line", 33
+    new $P257, "ResizablePMCArray"
+    push $P257, "\\e"
+    .return ($P257)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "quote_escape:sym<hex>"  :subid("85_1271336377.56964") :method :outer("11_1271336377.56964")
+.annotate "line", 33
+    .local string rx260_tgt
+    .local int rx260_pos
+    .local int rx260_off
+    .local int rx260_eos
+    .local int rx260_rep
+    .local pmc rx260_cur
+    (rx260_cur, rx260_pos, rx260_tgt) = self."!cursor_start"()
+    rx260_cur."!cursor_debug"("START ", "quote_escape:sym<hex>")
+    .lex unicode:"$\x{a2}", rx260_cur
+    .local pmc match
+    .lex "$/", match
+    length rx260_eos, rx260_tgt
+    set rx260_off, 0
+    lt rx260_pos, 2, rx260_start
+    sub rx260_off, rx260_pos, 1
+    substr rx260_tgt, rx260_tgt, rx260_off
+  rx260_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan263_done
+    goto rxscan263_scan
+  rxscan263_loop:
+    ($P10) = rx260_cur."from"()
+    inc $P10
+    set rx260_pos, $P10
+    ge rx260_pos, rx260_eos, rxscan263_done
+  rxscan263_scan:
+    set_addr $I10, rxscan263_loop
+    rx260_cur."!mark_push"(0, rx260_pos, $I10)
+  rxscan263_done:
+.annotate "line", 90
+  # rx literal  unicode:"\\x"
+    add $I11, rx260_pos, 2
+    gt $I11, rx260_eos, rx260_fail
+    sub $I11, rx260_pos, rx260_off
+    substr $S10, rx260_tgt, $I11, 2
+    ne $S10, unicode:"\\x", rx260_fail
+    add rx260_pos, 2
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx260_cur."!cursor_pos"(rx260_pos)
+    $P10 = rx260_cur."quotemod_check"("b")
+    unless $P10, rx260_fail
+  alt264_0:
+.annotate "line", 91
+    set_addr $I10, alt264_1
+    rx260_cur."!mark_push"(0, rx260_pos, $I10)
+  # rx subrule "hexint" subtype=capture negate=
+    rx260_cur."!cursor_pos"(rx260_pos)
+    $P10 = rx260_cur."hexint"()
+    unless $P10, rx260_fail
+    rx260_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexint")
+    rx260_pos = $P10."pos"()
+    goto alt264_end
+  alt264_1:
   # rx literal  "["
-    add $I11, rx256_pos, 1
-    gt $I11, rx256_eos, rx256_fail
-    sub $I11, rx256_pos, rx256_off
-    substr $S10, rx256_tgt, $I11, 1
-    ne $S10, "[", rx256_fail
-    add rx256_pos, 1
-  # rx subrule "octints" subtype=capture negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."octints"()
-    unless $P10, rx256_fail
-    rx256_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("octints")
-    rx256_pos = $P10."pos"()
+    add $I11, rx260_pos, 1
+    gt $I11, rx260_eos, rx260_fail
+    sub $I11, rx260_pos, rx260_off
+    substr $S10, rx260_tgt, $I11, 1
+    ne $S10, "[", rx260_fail
+    add rx260_pos, 1
+  # rx subrule "hexints" subtype=capture negate=
+    rx260_cur."!cursor_pos"(rx260_pos)
+    $P10 = rx260_cur."hexints"()
+    unless $P10, rx260_fail
+    rx260_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexints")
+    rx260_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx256_pos, 1
-    gt $I11, rx256_eos, rx256_fail
-    sub $I11, rx256_pos, rx256_off
-    substr $S10, rx256_tgt, $I11, 1
-    ne $S10, "]", rx256_fail
-    add rx256_pos, 1
-  alt260_end:
-.annotate "line", 91
+    add $I11, rx260_pos, 1
+    gt $I11, rx260_eos, rx260_fail
+    sub $I11, rx260_pos, rx260_off
+    substr $S10, rx260_tgt, $I11, 1
+    ne $S10, "]", rx260_fail
+    add rx260_pos, 1
+  alt264_end:
+.annotate "line", 89
   # rx pass
-    rx256_cur."!cursor_pass"(rx256_pos, "quote_escape:sym<oct>")
-    rx256_cur."!cursor_debug"("PASS  ", "quote_escape:sym<oct>", " at pos=", rx256_pos)
-    .return (rx256_cur)
-  rx256_fail:
-.annotate "line", 33
-    (rx256_rep, rx256_pos, $I10, $P10) = rx256_cur."!mark_fail"(0)
-    lt rx256_pos, -1, rx256_done
-    eq rx256_pos, -1, rx256_fail
+    rx260_cur."!cursor_pass"(rx260_pos, "quote_escape:sym<hex>")
+    rx260_cur."!cursor_debug"("PASS  ", "quote_escape:sym<hex>", " at pos=", rx260_pos)
+    .return (rx260_cur)
+  rx260_fail:
+.annotate "line", 33
+    (rx260_rep, rx260_pos, $I10, $P10) = rx260_cur."!mark_fail"(0)
+    lt rx260_pos, -1, rx260_done
+    eq rx260_pos, -1, rx260_fail
     jump $I10
-  rx256_done:
-    rx256_cur."!cursor_fail"()
-    rx256_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<oct>")
-    .return (rx256_cur)
+  rx260_done:
+    rx260_cur."!cursor_fail"()
+    rx260_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<hex>")
+    .return (rx260_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<oct>"  :subid("84_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<hex>"  :subid("86_1271336377.56964") :method
 .annotate "line", 33
-    new $P258, "ResizablePMCArray"
-    push $P258, "\\o"
-    .return ($P258)
+    new $P262, "ResizablePMCArray"
+    push $P262, unicode:"\\x"
+    .return ($P262)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<chr>"  :subid("85_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<oct>"  :subid("87_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
-    .local string rx262_tgt
-    .local int rx262_pos
-    .local int rx262_off
-    .local int rx262_eos
-    .local int rx262_rep
-    .local pmc rx262_cur
-    (rx262_cur, rx262_pos, rx262_tgt) = self."!cursor_start"()
-    rx262_cur."!cursor_debug"("START ", "quote_escape:sym<chr>")
-    .lex unicode:"$\x{a2}", rx262_cur
+    .local string rx266_tgt
+    .local int rx266_pos
+    .local int rx266_off
+    .local int rx266_eos
+    .local int rx266_rep
+    .local pmc rx266_cur
+    (rx266_cur, rx266_pos, rx266_tgt) = self."!cursor_start"()
+    rx266_cur."!cursor_debug"("START ", "quote_escape:sym<oct>")
+    .lex unicode:"$\x{a2}", rx266_cur
     .local pmc match
     .lex "$/", match
-    length rx262_eos, rx262_tgt
-    set rx262_off, 0
-    lt rx262_pos, 2, rx262_start
-    sub rx262_off, rx262_pos, 1
-    substr rx262_tgt, rx262_tgt, rx262_off
-  rx262_start:
+    length rx266_eos, rx266_tgt
+    set rx266_off, 0
+    lt rx266_pos, 2, rx266_start
+    sub rx266_off, rx266_pos, 1
+    substr rx266_tgt, rx266_tgt, rx266_off
+  rx266_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan265_done
-    goto rxscan265_scan
-  rxscan265_loop:
-    ($P10) = rx262_cur."from"()
+    ne $I10, -1, rxscan269_done
+    goto rxscan269_scan
+  rxscan269_loop:
+    ($P10) = rx266_cur."from"()
     inc $P10
-    set rx262_pos, $P10
-    ge rx262_pos, rx262_eos, rxscan265_done
-  rxscan265_scan:
-    set_addr $I10, rxscan265_loop
-    rx262_cur."!mark_push"(0, rx262_pos, $I10)
-  rxscan265_done:
-.annotate "line", 95
-  # rx literal  "\\c"
-    add $I11, rx262_pos, 2
-    gt $I11, rx262_eos, rx262_fail
-    sub $I11, rx262_pos, rx262_off
-    substr $S10, rx262_tgt, $I11, 2
-    ne $S10, "\\c", rx262_fail
-    add rx262_pos, 2
+    set rx266_pos, $P10
+    ge rx266_pos, rx266_eos, rxscan269_done
+  rxscan269_scan:
+    set_addr $I10, rxscan269_loop
+    rx266_cur."!mark_push"(0, rx266_pos, $I10)
+  rxscan269_done:
+.annotate "line", 94
+  # rx literal  "\\o"
+    add $I11, rx266_pos, 2
+    gt $I11, rx266_eos, rx266_fail
+    sub $I11, rx266_pos, rx266_off
+    substr $S10, rx266_tgt, $I11, 2
+    ne $S10, "\\o", rx266_fail
+    add rx266_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx262_cur."!cursor_pos"(rx262_pos)
-    $P10 = rx262_cur."quotemod_check"("b")
-    unless $P10, rx262_fail
-  # rx subrule "charspec" subtype=capture negate=
-    rx262_cur."!cursor_pos"(rx262_pos)
-    $P10 = rx262_cur."charspec"()
-    unless $P10, rx262_fail
-    rx262_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("charspec")
-    rx262_pos = $P10."pos"()
+    rx266_cur."!cursor_pos"(rx266_pos)
+    $P10 = rx266_cur."quotemod_check"("b")
+    unless $P10, rx266_fail
+  alt270_0:
+.annotate "line", 95
+    set_addr $I10, alt270_1
+    rx266_cur."!mark_push"(0, rx266_pos, $I10)
+  # rx subrule "octint" subtype=capture negate=
+    rx266_cur."!cursor_pos"(rx266_pos)
+    $P10 = rx266_cur."octint"()
+    unless $P10, rx266_fail
+    rx266_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("octint")
+    rx266_pos = $P10."pos"()
+    goto alt270_end
+  alt270_1:
+  # rx literal  "["
+    add $I11, rx266_pos, 1
+    gt $I11, rx266_eos, rx266_fail
+    sub $I11, rx266_pos, rx266_off
+    substr $S10, rx266_tgt, $I11, 1
+    ne $S10, "[", rx266_fail
+    add rx266_pos, 1
+  # rx subrule "octints" subtype=capture negate=
+    rx266_cur."!cursor_pos"(rx266_pos)
+    $P10 = rx266_cur."octints"()
+    unless $P10, rx266_fail
+    rx266_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("octints")
+    rx266_pos = $P10."pos"()
+  # rx literal  "]"
+    add $I11, rx266_pos, 1
+    gt $I11, rx266_eos, rx266_fail
+    sub $I11, rx266_pos, rx266_off
+    substr $S10, rx266_tgt, $I11, 1
+    ne $S10, "]", rx266_fail
+    add rx266_pos, 1
+  alt270_end:
+.annotate "line", 93
   # rx pass
-    rx262_cur."!cursor_pass"(rx262_pos, "quote_escape:sym<chr>")
-    rx262_cur."!cursor_debug"("PASS  ", "quote_escape:sym<chr>", " at pos=", rx262_pos)
-    .return (rx262_cur)
-  rx262_fail:
-.annotate "line", 33
-    (rx262_rep, rx262_pos, $I10, $P10) = rx262_cur."!mark_fail"(0)
-    lt rx262_pos, -1, rx262_done
-    eq rx262_pos, -1, rx262_fail
+    rx266_cur."!cursor_pass"(rx266_pos, "quote_escape:sym<oct>")
+    rx266_cur."!cursor_debug"("PASS  ", "quote_escape:sym<oct>", " at pos=", rx266_pos)
+    .return (rx266_cur)
+  rx266_fail:
+.annotate "line", 33
+    (rx266_rep, rx266_pos, $I10, $P10) = rx266_cur."!mark_fail"(0)
+    lt rx266_pos, -1, rx266_done
+    eq rx266_pos, -1, rx266_fail
     jump $I10
-  rx262_done:
-    rx262_cur."!cursor_fail"()
-    rx262_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<chr>")
-    .return (rx262_cur)
+  rx266_done:
+    rx266_cur."!cursor_fail"()
+    rx266_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<oct>")
+    .return (rx266_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<chr>"  :subid("86_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<oct>"  :subid("88_1271336377.56964") :method
 .annotate "line", 33
-    new $P264, "ResizablePMCArray"
-    push $P264, "\\c"
-    .return ($P264)
+    new $P268, "ResizablePMCArray"
+    push $P268, "\\o"
+    .return ($P268)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charname"  :subid("87_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<chr>"  :subid("89_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
-    .const 'Sub' $P276 = "89_1267204683.33533" 
-    capture_lex $P276
-    .local string rx267_tgt
-    .local int rx267_pos
-    .local int rx267_off
-    .local int rx267_eos
-    .local int rx267_rep
-    .local pmc rx267_cur
-    (rx267_cur, rx267_pos, rx267_tgt) = self."!cursor_start"()
-    rx267_cur."!cursor_debug"("START ", "charname")
-    .lex unicode:"$\x{a2}", rx267_cur
+    .local string rx272_tgt
+    .local int rx272_pos
+    .local int rx272_off
+    .local int rx272_eos
+    .local int rx272_rep
+    .local pmc rx272_cur
+    (rx272_cur, rx272_pos, rx272_tgt) = self."!cursor_start"()
+    rx272_cur."!cursor_debug"("START ", "quote_escape:sym<chr>")
+    .lex unicode:"$\x{a2}", rx272_cur
     .local pmc match
     .lex "$/", match
-    length rx267_eos, rx267_tgt
-    set rx267_off, 0
-    lt rx267_pos, 2, rx267_start
-    sub rx267_off, rx267_pos, 1
-    substr rx267_tgt, rx267_tgt, rx267_off
-  rx267_start:
+    length rx272_eos, rx272_tgt
+    set rx272_off, 0
+    lt rx272_pos, 2, rx272_start
+    sub rx272_off, rx272_pos, 1
+    substr rx272_tgt, rx272_tgt, rx272_off
+  rx272_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan271_done
-    goto rxscan271_scan
-  rxscan271_loop:
-    ($P10) = rx267_cur."from"()
+    ne $I10, -1, rxscan275_done
+    goto rxscan275_scan
+  rxscan275_loop:
+    ($P10) = rx272_cur."from"()
     inc $P10
-    set rx267_pos, $P10
-    ge rx267_pos, rx267_eos, rxscan271_done
-  rxscan271_scan:
-    set_addr $I10, rxscan271_loop
-    rx267_cur."!mark_push"(0, rx267_pos, $I10)
-  rxscan271_done:
-  alt272_0:
-.annotate "line", 97
-    set_addr $I10, alt272_1
-    rx267_cur."!mark_push"(0, rx267_pos, $I10)
-.annotate "line", 98
-  # rx subrule "integer" subtype=capture negate=
-    rx267_cur."!cursor_pos"(rx267_pos)
-    $P10 = rx267_cur."integer"()
-    unless $P10, rx267_fail
-    rx267_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("integer")
-    rx267_pos = $P10."pos"()
-    goto alt272_end
-  alt272_1:
-.annotate "line", 99
-  # rx enumcharlist negate=0 
-    ge rx267_pos, rx267_eos, rx267_fail
-    sub $I10, rx267_pos, rx267_off
-    substr $S10, rx267_tgt, $I10, 1
-    index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", $S10
-    lt $I11, 0, rx267_fail
-    inc rx267_pos
-  # rx rxquantf273 ** 0..*
-    set_addr $I10, rxquantf273_loop
-    rx267_cur."!mark_push"(0, rx267_pos, $I10)
-    goto rxquantf273_done
-  rxquantf273_loop:
-  # rx enumcharlist negate=1 
-    ge rx267_pos, rx267_eos, rx267_fail
-    sub $I10, rx267_pos, rx267_off
-    substr $S10, rx267_tgt, $I10, 1
-    index $I11, "],#", $S10
-    ge $I11, 0, rx267_fail
-    inc rx267_pos
-    set_addr $I10, rxquantf273_loop
-    rx267_cur."!mark_push"($I274, rx267_pos, $I10)
-  rxquantf273_done:
-  # rx enumcharlist negate=0 
-    ge rx267_pos, rx267_eos, rx267_fail
-    sub $I10, rx267_pos, rx267_off
-    substr $S10, rx267_tgt, $I10, 1
-    index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)", $S10
-    lt $I11, 0, rx267_fail
-    inc rx267_pos
-.annotate "line", 100
-  # rx subrule "before" subtype=zerowidth negate=
-    rx267_cur."!cursor_pos"(rx267_pos)
-    .const 'Sub' $P276 = "89_1267204683.33533" 
-    capture_lex $P276
-    $P10 = rx267_cur."before"($P276)
-    unless $P10, rx267_fail
-  alt272_end:
+    set rx272_pos, $P10
+    ge rx272_pos, rx272_eos, rxscan275_done
+  rxscan275_scan:
+    set_addr $I10, rxscan275_loop
+    rx272_cur."!mark_push"(0, rx272_pos, $I10)
+  rxscan275_done:
 .annotate "line", 97
+  # rx literal  "\\c"
+    add $I11, rx272_pos, 2
+    gt $I11, rx272_eos, rx272_fail
+    sub $I11, rx272_pos, rx272_off
+    substr $S10, rx272_tgt, $I11, 2
+    ne $S10, "\\c", rx272_fail
+    add rx272_pos, 2
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx272_cur."!cursor_pos"(rx272_pos)
+    $P10 = rx272_cur."quotemod_check"("b")
+    unless $P10, rx272_fail
+  # rx subrule "charspec" subtype=capture negate=
+    rx272_cur."!cursor_pos"(rx272_pos)
+    $P10 = rx272_cur."charspec"()
+    unless $P10, rx272_fail
+    rx272_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("charspec")
+    rx272_pos = $P10."pos"()
   # rx pass
-    rx267_cur."!cursor_pass"(rx267_pos, "charname")
-    rx267_cur."!cursor_debug"("PASS  ", "charname", " at pos=", rx267_pos)
-    .return (rx267_cur)
-  rx267_fail:
-.annotate "line", 33
-    (rx267_rep, rx267_pos, $I10, $P10) = rx267_cur."!mark_fail"(0)
-    lt rx267_pos, -1, rx267_done
-    eq rx267_pos, -1, rx267_fail
+    rx272_cur."!cursor_pass"(rx272_pos, "quote_escape:sym<chr>")
+    rx272_cur."!cursor_debug"("PASS  ", "quote_escape:sym<chr>", " at pos=", rx272_pos)
+    .return (rx272_cur)
+  rx272_fail:
+.annotate "line", 33
+    (rx272_rep, rx272_pos, $I10, $P10) = rx272_cur."!mark_fail"(0)
+    lt rx272_pos, -1, rx272_done
+    eq rx272_pos, -1, rx272_fail
     jump $I10
-  rx267_done:
-    rx267_cur."!cursor_fail"()
-    rx267_cur."!cursor_debug"("FAIL  ", "charname")
-    .return (rx267_cur)
+  rx272_done:
+    rx272_cur."!cursor_fail"()
+    rx272_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<chr>")
+    .return (rx272_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charname"  :subid("88_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<chr>"  :subid("90_1271336377.56964") :method
 .annotate "line", 33
-    $P269 = self."!PREFIX__!subrule"("integer", "")
-    new $P270, "ResizablePMCArray"
-    push $P270, "Z"
-    push $P270, "Y"
-    push $P270, "X"
-    push $P270, "W"
-    push $P270, "V"
-    push $P270, "U"
-    push $P270, "T"
-    push $P270, "S"
-    push $P270, "R"
-    push $P270, "Q"
-    push $P270, "P"
-    push $P270, "O"
-    push $P270, "N"
-    push $P270, "M"
-    push $P270, "L"
-    push $P270, "K"
-    push $P270, "J"
-    push $P270, "I"
-    push $P270, "H"
-    push $P270, "G"
-    push $P270, "F"
-    push $P270, "E"
-    push $P270, "D"
-    push $P270, "C"
-    push $P270, "B"
-    push $P270, "A"
-    push $P270, "z"
-    push $P270, "y"
-    push $P270, "x"
-    push $P270, "w"
-    push $P270, "v"
-    push $P270, "u"
-    push $P270, "t"
-    push $P270, "s"
-    push $P270, "r"
-    push $P270, "q"
-    push $P270, "p"
-    push $P270, "o"
-    push $P270, "n"
-    push $P270, "m"
-    push $P270, "l"
-    push $P270, "k"
-    push $P270, "j"
-    push $P270, "i"
-    push $P270, "h"
-    push $P270, "g"
-    push $P270, "f"
-    push $P270, "e"
-    push $P270, "d"
-    push $P270, "c"
-    push $P270, "b"
-    push $P270, "a"
-    push $P270, $P269
-    .return ($P270)
+    new $P274, "ResizablePMCArray"
+    push $P274, "\\c"
+    .return ($P274)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block275"  :anon :subid("89_1267204683.33533") :method :outer("87_1267204683.33533")
-.annotate "line", 100
+.sub "quote_escape:sym<0>"  :subid("91_1271336377.56964") :method :outer("11_1271336377.56964")
+.annotate "line", 33
     .local string rx277_tgt
     .local int rx277_pos
     .local int rx277_off
@@ -3973,7 +3956,7 @@
     .local int rx277_rep
     .local pmc rx277_cur
     (rx277_cur, rx277_pos, rx277_tgt) = self."!cursor_start"()
-    rx277_cur."!cursor_debug"("START ", "")
+    rx277_cur."!cursor_debug"("START ", "quote_escape:sym<0>")
     .lex unicode:"$\x{a2}", rx277_cur
     .local pmc match
     .lex "$/", match
@@ -3984,404 +3967,914 @@
     substr rx277_tgt, rx277_tgt, rx277_off
   rx277_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan278_done
-    goto rxscan278_scan
-  rxscan278_loop:
+    ne $I10, -1, rxscan280_done
+    goto rxscan280_scan
+  rxscan280_loop:
     ($P10) = rx277_cur."from"()
     inc $P10
     set rx277_pos, $P10
-    ge rx277_pos, rx277_eos, rxscan278_done
-  rxscan278_scan:
-    set_addr $I10, rxscan278_loop
+    ge rx277_pos, rx277_eos, rxscan280_done
+  rxscan280_scan:
+    set_addr $I10, rxscan280_loop
     rx277_cur."!mark_push"(0, rx277_pos, $I10)
-  rxscan278_done:
-  # rx charclass_q s r 0..-1
-    sub $I10, rx277_pos, rx277_off
-    find_not_cclass $I11, 32, rx277_tgt, $I10, rx277_eos
-    add rx277_pos, rx277_off, $I11
-  # rx enumcharlist negate=0 
-    ge rx277_pos, rx277_eos, rx277_fail
-    sub $I10, rx277_pos, rx277_off
-    substr $S10, rx277_tgt, $I10, 1
-    index $I11, "],#", $S10
-    lt $I11, 0, rx277_fail
-    inc rx277_pos
+  rxscan280_done:
+.annotate "line", 98
+  # rx literal  "\\"
+    add $I11, rx277_pos, 1
+    gt $I11, rx277_eos, rx277_fail
+    sub $I11, rx277_pos, rx277_off
+    substr $S10, rx277_tgt, $I11, 1
+    ne $S10, "\\", rx277_fail
+    add rx277_pos, 1
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_281_fail
+    rx277_cur."!mark_push"(0, rx277_pos, $I10)
+  # rx literal  "0"
+    add $I11, rx277_pos, 1
+    gt $I11, rx277_eos, rx277_fail
+    sub $I11, rx277_pos, rx277_off
+    substr $S10, rx277_tgt, $I11, 1
+    ne $S10, "0", rx277_fail
+    add rx277_pos, 1
+    set_addr $I10, rxcap_281_fail
+    ($I12, $I11) = rx277_cur."!mark_peek"($I10)
+    rx277_cur."!cursor_pos"($I11)
+    ($P10) = rx277_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx277_pos, "")
+    rx277_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_281_done
+  rxcap_281_fail:
+    goto rx277_fail
+  rxcap_281_done:
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx277_cur."!cursor_pos"(rx277_pos)
+    $P10 = rx277_cur."quotemod_check"("b")
+    unless $P10, rx277_fail
   # rx pass
-    rx277_cur."!cursor_pass"(rx277_pos, "")
-    rx277_cur."!cursor_debug"("PASS  ", "", " at pos=", rx277_pos)
+    rx277_cur."!cursor_pass"(rx277_pos, "quote_escape:sym<0>")
+    rx277_cur."!cursor_debug"("PASS  ", "quote_escape:sym<0>", " at pos=", rx277_pos)
     .return (rx277_cur)
   rx277_fail:
+.annotate "line", 33
     (rx277_rep, rx277_pos, $I10, $P10) = rx277_cur."!mark_fail"(0)
     lt rx277_pos, -1, rx277_done
     eq rx277_pos, -1, rx277_fail
     jump $I10
   rx277_done:
     rx277_cur."!cursor_fail"()
-    rx277_cur."!cursor_debug"("FAIL  ", "")
+    rx277_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<0>")
     .return (rx277_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charnames"  :subid("90_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "!PREFIX__quote_escape:sym<0>"  :subid("92_1271336377.56964") :method
 .annotate "line", 33
-    .local string rx280_tgt
-    .local int rx280_pos
-    .local int rx280_off
-    .local int rx280_eos
-    .local int rx280_rep
-    .local pmc rx280_cur
-    (rx280_cur, rx280_pos, rx280_tgt) = self."!cursor_start"()
-    rx280_cur."!cursor_debug"("START ", "charnames")
-    rx280_cur."!cursor_caparray"("charname")
-    .lex unicode:"$\x{a2}", rx280_cur
+    new $P279, "ResizablePMCArray"
+    push $P279, "\\0"
+    .return ($P279)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "quote_escape:sym<misc>"  :subid("93_1271336377.56964") :method :outer("11_1271336377.56964")
+.annotate "line", 33
+    .const 'Sub' $P302 = "97_1271336377.56964" 
+    capture_lex $P302
+    .const 'Sub' $P295 = "96_1271336377.56964" 
+    capture_lex $P295
+    .const 'Sub' $P290 = "95_1271336377.56964" 
+    capture_lex $P290
+    .local string rx283_tgt
+    .local int rx283_pos
+    .local int rx283_off
+    .local int rx283_eos
+    .local int rx283_rep
+    .local pmc rx283_cur
+    (rx283_cur, rx283_pos, rx283_tgt) = self."!cursor_start"()
+    rx283_cur."!cursor_debug"("START ", "quote_escape:sym<misc>")
+    .lex unicode:"$\x{a2}", rx283_cur
     .local pmc match
     .lex "$/", match
-    length rx280_eos, rx280_tgt
-    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:
+    length rx283_eos, rx283_tgt
+    set rx283_off, 0
+    lt rx283_pos, 2, rx283_start
+    sub rx283_off, rx283_pos, 1
+    substr rx283_tgt, rx283_tgt, rx283_off
+  rx283_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan283_done
-    goto rxscan283_scan
-  rxscan283_loop:
-    ($P10) = rx280_cur."from"()
+    ne $I10, -1, rxscan286_done
+    goto rxscan286_scan
+  rxscan286_loop:
+    ($P10) = rx283_cur."from"()
     inc $P10
-    set rx280_pos, $P10
-    ge rx280_pos, rx280_eos, rxscan283_done
-  rxscan283_scan:
-    set_addr $I10, rxscan283_loop
-    rx280_cur."!mark_push"(0, rx280_pos, $I10)
-  rxscan283_done:
+    set rx283_pos, $P10
+    ge rx283_pos, rx283_eos, rxscan286_done
+  rxscan286_scan:
+    set_addr $I10, rxscan286_loop
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
+  rxscan286_done:
+.annotate "line", 99
+    rx283_cur."!cursor_pos"(rx283_pos)
+    find_lex $P287, unicode:"$\x{a2}"
+    $P288 = $P287."MATCH"()
+    store_lex "$/", $P288
+.annotate "line", 100
+    .const 'Sub' $P290 = "95_1271336377.56964" 
+    capture_lex $P290
+    $P291 = $P290()
+  # rx literal  "\\"
+    add $I11, rx283_pos, 1
+    gt $I11, rx283_eos, rx283_fail
+    sub $I11, rx283_pos, rx283_off
+    substr $S10, rx283_tgt, $I11, 1
+    ne $S10, "\\", rx283_fail
+    add rx283_pos, 1
+  alt292_0:
+.annotate "line", 101
+    set_addr $I10, alt292_1
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
 .annotate "line", 102
-  # rx rxquantr284 ** 1..*
-    set_addr $I285, rxquantr284_done
-    rx280_cur."!mark_push"(0, -1, $I285)
-  rxquantr284_loop:
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx283_cur."!cursor_pos"(rx283_pos)
+    $P10 = rx283_cur."quotemod_check"("b")
+    unless $P10, rx283_fail
+  alt293_0:
+.annotate "line", 103
+    set_addr $I10, alt293_1
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
+.annotate "line", 104
+  # rx subrule $P295 subtype=capture negate=
+    rx283_cur."!cursor_pos"(rx283_pos)
+    .const 'Sub' $P295 = "96_1271336377.56964" 
+    capture_lex $P295
+    $P10 = rx283_cur.$P295()
+    unless $P10, rx283_fail
+    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("textqq")
+    rx283_pos = $P10."pos"()
+    goto alt293_end
+  alt293_1:
+.annotate "line", 105
+  # rx subcapture "x"
+    set_addr $I10, rxcap_298_fail
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
+  # rx charclass w
+    ge rx283_pos, rx283_eos, rx283_fail
+    sub $I10, rx283_pos, rx283_off
+    is_cclass $I11, 8192, rx283_tgt, $I10
+    unless $I11, rx283_fail
+    inc rx283_pos
+    set_addr $I10, rxcap_298_fail
+    ($I12, $I11) = rx283_cur."!mark_peek"($I10)
+    rx283_cur."!cursor_pos"($I11)
+    ($P10) = rx283_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx283_pos, "")
+    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("x")
+    goto rxcap_298_done
+  rxcap_298_fail:
+    goto rx283_fail
+  rxcap_298_done:
+    rx283_cur."!cursor_pos"(rx283_pos)
+    find_lex $P299, unicode:"$\x{a2}"
+    $P300 = $P299."MATCH"()
+    store_lex "$/", $P300
+    .const 'Sub' $P302 = "97_1271336377.56964" 
+    capture_lex $P302
+    $P312 = $P302()
+  alt293_end:
+.annotate "line", 102
+    goto alt292_end
+  alt292_1:
+.annotate "line", 107
+  # rx subcapture "textq"
+    set_addr $I10, rxcap_313_fail
+    rx283_cur."!mark_push"(0, rx283_pos, $I10)
+  # rx charclass .
+    ge rx283_pos, rx283_eos, rx283_fail
+    inc rx283_pos
+    set_addr $I10, rxcap_313_fail
+    ($I12, $I11) = rx283_cur."!mark_peek"($I10)
+    rx283_cur."!cursor_pos"($I11)
+    ($P10) = rx283_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx283_pos, "")
+    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("textq")
+    goto rxcap_313_done
+  rxcap_313_fail:
+    goto rx283_fail
+  rxcap_313_done:
+  alt292_end:
+.annotate "line", 99
+  # rx pass
+    rx283_cur."!cursor_pass"(rx283_pos, "quote_escape:sym<misc>")
+    rx283_cur."!cursor_debug"("PASS  ", "quote_escape:sym<misc>", " at pos=", rx283_pos)
+    .return (rx283_cur)
+  rx283_fail:
+.annotate "line", 33
+    (rx283_rep, rx283_pos, $I10, $P10) = rx283_cur."!mark_fail"(0)
+    lt rx283_pos, -1, rx283_done
+    eq rx283_pos, -1, rx283_fail
+    jump $I10
+  rx283_done:
+    rx283_cur."!cursor_fail"()
+    rx283_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<misc>")
+    .return (rx283_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "!PREFIX__quote_escape:sym<misc>"  :subid("94_1271336377.56964") :method
+.annotate "line", 33
+    new $P285, "ResizablePMCArray"
+    push $P285, ""
+    .return ($P285)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "_block289"  :anon :subid("95_1271336377.56964") :outer("93_1271336377.56964")
+.annotate "line", 100
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "_block294"  :anon :subid("96_1271336377.56964") :method :outer("93_1271336377.56964")
+.annotate "line", 104
+    .local string rx296_tgt
+    .local int rx296_pos
+    .local int rx296_off
+    .local int rx296_eos
+    .local int rx296_rep
+    .local pmc rx296_cur
+    (rx296_cur, rx296_pos, rx296_tgt) = self."!cursor_start"()
+    rx296_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx296_cur
+    .local pmc match
+    .lex "$/", match
+    length rx296_eos, rx296_tgt
+    set rx296_off, 0
+    lt rx296_pos, 2, rx296_start
+    sub rx296_off, rx296_pos, 1
+    substr rx296_tgt, rx296_tgt, rx296_off
+  rx296_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan297_done
+    goto rxscan297_scan
+  rxscan297_loop:
+    ($P10) = rx296_cur."from"()
+    inc $P10
+    set rx296_pos, $P10
+    ge rx296_pos, rx296_eos, rxscan297_done
+  rxscan297_scan:
+    set_addr $I10, rxscan297_loop
+    rx296_cur."!mark_push"(0, rx296_pos, $I10)
+  rxscan297_done:
+  # rx charclass W
+    ge rx296_pos, rx296_eos, rx296_fail
+    sub $I10, rx296_pos, rx296_off
+    is_cclass $I11, 8192, rx296_tgt, $I10
+    if $I11, rx296_fail
+    inc rx296_pos
+  # rx pass
+    rx296_cur."!cursor_pass"(rx296_pos, "")
+    rx296_cur."!cursor_debug"("PASS  ", "", " at pos=", rx296_pos)
+    .return (rx296_cur)
+  rx296_fail:
+    (rx296_rep, rx296_pos, $I10, $P10) = rx296_cur."!mark_fail"(0)
+    lt rx296_pos, -1, rx296_done
+    eq rx296_pos, -1, rx296_fail
+    jump $I10
+  rx296_done:
+    rx296_cur."!cursor_fail"()
+    rx296_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx296_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "_block301"  :anon :subid("97_1271336377.56964") :outer("93_1271336377.56964")
+.annotate "line", 105
+    find_lex $P303, "$/"
+    $P304 = $P303."CURSOR"()
+    new $P305, "String"
+    assign $P305, "Unrecognized backslash sequence: '\\"
+    find_lex $P306, "$/"
+    unless_null $P306, vivify_106
+    $P306 = root_new ['parrot';'Hash']
+  vivify_106:
+    set $P307, $P306["x"]
+    unless_null $P307, vivify_107
+    new $P307, "Undef"
+  vivify_107:
+    $S308 = $P307."Str"()
+    concat $P309, $P305, $S308
+    concat $P310, $P309, "'"
+    $P311 = $P304."panic"($P310)
+    .return ($P311)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "charname"  :subid("98_1271336377.56964") :method :outer("11_1271336377.56964")
+.annotate "line", 33
+    .const 'Sub' $P324 = "100_1271336377.56964" 
+    capture_lex $P324
+    .local string rx315_tgt
+    .local int rx315_pos
+    .local int rx315_off
+    .local int rx315_eos
+    .local int rx315_rep
+    .local pmc rx315_cur
+    (rx315_cur, rx315_pos, rx315_tgt) = self."!cursor_start"()
+    rx315_cur."!cursor_debug"("START ", "charname")
+    .lex unicode:"$\x{a2}", rx315_cur
+    .local pmc match
+    .lex "$/", match
+    length rx315_eos, rx315_tgt
+    set rx315_off, 0
+    lt rx315_pos, 2, rx315_start
+    sub rx315_off, rx315_pos, 1
+    substr rx315_tgt, rx315_tgt, rx315_off
+  rx315_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan319_done
+    goto rxscan319_scan
+  rxscan319_loop:
+    ($P10) = rx315_cur."from"()
+    inc $P10
+    set rx315_pos, $P10
+    ge rx315_pos, rx315_eos, rxscan319_done
+  rxscan319_scan:
+    set_addr $I10, rxscan319_loop
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
+  rxscan319_done:
+  alt320_0:
+.annotate "line", 111
+    set_addr $I10, alt320_1
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
+.annotate "line", 112
+  # rx subrule "integer" subtype=capture negate=
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."integer"()
+    unless $P10, rx315_fail
+    rx315_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("integer")
+    rx315_pos = $P10."pos"()
+    goto alt320_end
+  alt320_1:
+.annotate "line", 113
+  # rx enumcharlist negate=0 
+    ge rx315_pos, rx315_eos, rx315_fail
+    sub $I10, rx315_pos, rx315_off
+    substr $S10, rx315_tgt, $I10, 1
+    index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", $S10
+    lt $I11, 0, rx315_fail
+    inc rx315_pos
+  # rx rxquantf321 ** 0..*
+    set_addr $I10, rxquantf321_loop
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
+    goto rxquantf321_done
+  rxquantf321_loop:
+  # rx enumcharlist negate=1 
+    ge rx315_pos, rx315_eos, rx315_fail
+    sub $I10, rx315_pos, rx315_off
+    substr $S10, rx315_tgt, $I10, 1
+    index $I11, "],#", $S10
+    ge $I11, 0, rx315_fail
+    inc rx315_pos
+    set_addr $I10, rxquantf321_loop
+    rx315_cur."!mark_push"($I322, rx315_pos, $I10)
+  rxquantf321_done:
+  # rx enumcharlist negate=0 
+    ge rx315_pos, rx315_eos, rx315_fail
+    sub $I10, rx315_pos, rx315_off
+    substr $S10, rx315_tgt, $I10, 1
+    index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)", $S10
+    lt $I11, 0, rx315_fail
+    inc rx315_pos
+.annotate "line", 114
+  # rx subrule "before" subtype=zerowidth negate=
+    rx315_cur."!cursor_pos"(rx315_pos)
+    .const 'Sub' $P324 = "100_1271336377.56964" 
+    capture_lex $P324
+    $P10 = rx315_cur."before"($P324)
+    unless $P10, rx315_fail
+  alt320_end:
+.annotate "line", 111
+  # rx pass
+    rx315_cur."!cursor_pass"(rx315_pos, "charname")
+    rx315_cur."!cursor_debug"("PASS  ", "charname", " at pos=", rx315_pos)
+    .return (rx315_cur)
+  rx315_fail:
+.annotate "line", 33
+    (rx315_rep, rx315_pos, $I10, $P10) = rx315_cur."!mark_fail"(0)
+    lt rx315_pos, -1, rx315_done
+    eq rx315_pos, -1, rx315_fail
+    jump $I10
+  rx315_done:
+    rx315_cur."!cursor_fail"()
+    rx315_cur."!cursor_debug"("FAIL  ", "charname")
+    .return (rx315_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "!PREFIX__charname"  :subid("99_1271336377.56964") :method
+.annotate "line", 33
+    $P317 = self."!PREFIX__!subrule"("integer", "")
+    new $P318, "ResizablePMCArray"
+    push $P318, "Z"
+    push $P318, "Y"
+    push $P318, "X"
+    push $P318, "W"
+    push $P318, "V"
+    push $P318, "U"
+    push $P318, "T"
+    push $P318, "S"
+    push $P318, "R"
+    push $P318, "Q"
+    push $P318, "P"
+    push $P318, "O"
+    push $P318, "N"
+    push $P318, "M"
+    push $P318, "L"
+    push $P318, "K"
+    push $P318, "J"
+    push $P318, "I"
+    push $P318, "H"
+    push $P318, "G"
+    push $P318, "F"
+    push $P318, "E"
+    push $P318, "D"
+    push $P318, "C"
+    push $P318, "B"
+    push $P318, "A"
+    push $P318, "z"
+    push $P318, "y"
+    push $P318, "x"
+    push $P318, "w"
+    push $P318, "v"
+    push $P318, "u"
+    push $P318, "t"
+    push $P318, "s"
+    push $P318, "r"
+    push $P318, "q"
+    push $P318, "p"
+    push $P318, "o"
+    push $P318, "n"
+    push $P318, "m"
+    push $P318, "l"
+    push $P318, "k"
+    push $P318, "j"
+    push $P318, "i"
+    push $P318, "h"
+    push $P318, "g"
+    push $P318, "f"
+    push $P318, "e"
+    push $P318, "d"
+    push $P318, "c"
+    push $P318, "b"
+    push $P318, "a"
+    push $P318, $P317
+    .return ($P318)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "_block323"  :anon :subid("100_1271336377.56964") :method :outer("98_1271336377.56964")
+.annotate "line", 114
+    .local string rx325_tgt
+    .local int rx325_pos
+    .local int rx325_off
+    .local int rx325_eos
+    .local int rx325_rep
+    .local pmc rx325_cur
+    (rx325_cur, rx325_pos, rx325_tgt) = self."!cursor_start"()
+    rx325_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx325_cur
+    .local pmc match
+    .lex "$/", match
+    length rx325_eos, rx325_tgt
+    set rx325_off, 0
+    lt rx325_pos, 2, rx325_start
+    sub rx325_off, rx325_pos, 1
+    substr rx325_tgt, rx325_tgt, rx325_off
+  rx325_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan326_done
+    goto rxscan326_scan
+  rxscan326_loop:
+    ($P10) = rx325_cur."from"()
+    inc $P10
+    set rx325_pos, $P10
+    ge rx325_pos, rx325_eos, rxscan326_done
+  rxscan326_scan:
+    set_addr $I10, rxscan326_loop
+    rx325_cur."!mark_push"(0, rx325_pos, $I10)
+  rxscan326_done:
+  # rx charclass_q s r 0..-1
+    sub $I10, rx325_pos, rx325_off
+    find_not_cclass $I11, 32, rx325_tgt, $I10, rx325_eos
+    add rx325_pos, rx325_off, $I11
+  # rx enumcharlist negate=0 
+    ge rx325_pos, rx325_eos, rx325_fail
+    sub $I10, rx325_pos, rx325_off
+    substr $S10, rx325_tgt, $I10, 1
+    index $I11, "],#", $S10
+    lt $I11, 0, rx325_fail
+    inc rx325_pos
+  # rx pass
+    rx325_cur."!cursor_pass"(rx325_pos, "")
+    rx325_cur."!cursor_debug"("PASS  ", "", " at pos=", rx325_pos)
+    .return (rx325_cur)
+  rx325_fail:
+    (rx325_rep, rx325_pos, $I10, $P10) = rx325_cur."!mark_fail"(0)
+    lt rx325_pos, -1, rx325_done
+    eq rx325_pos, -1, rx325_fail
+    jump $I10
+  rx325_done:
+    rx325_cur."!cursor_fail"()
+    rx325_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx325_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "charnames"  :subid("101_1271336377.56964") :method :outer("11_1271336377.56964")
+.annotate "line", 33
+    .local string rx328_tgt
+    .local int rx328_pos
+    .local int rx328_off
+    .local int rx328_eos
+    .local int rx328_rep
+    .local pmc rx328_cur
+    (rx328_cur, rx328_pos, rx328_tgt) = self."!cursor_start"()
+    rx328_cur."!cursor_debug"("START ", "charnames")
+    rx328_cur."!cursor_caparray"("charname")
+    .lex unicode:"$\x{a2}", rx328_cur
+    .local pmc match
+    .lex "$/", match
+    length rx328_eos, rx328_tgt
+    set rx328_off, 0
+    lt rx328_pos, 2, rx328_start
+    sub rx328_off, rx328_pos, 1
+    substr rx328_tgt, rx328_tgt, rx328_off
+  rx328_start:
+    $I10 = self.'from'()
+    ne $I10, -1, 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", 116
+  # rx rxquantr332 ** 1..*
+    set_addr $I333, rxquantr332_done
+    rx328_cur."!mark_push"(0, -1, $I333)
+  rxquantr332_loop:
   # rx subrule "ws" subtype=method negate=
-    rx280_cur."!cursor_pos"(rx280_pos)
-    $P10 = rx280_cur."ws"()
-    unless $P10, rx280_fail
-    rx280_pos = $P10."pos"()
+    rx328_cur."!cursor_pos"(rx328_pos)
+    $P10 = rx328_cur."ws"()
+    unless $P10, rx328_fail
+    rx328_pos = $P10."pos"()
   # rx subrule "charname" subtype=capture negate=
-    rx280_cur."!cursor_pos"(rx280_pos)
-    $P10 = rx280_cur."charname"()
-    unless $P10, rx280_fail
-    rx280_cur."!mark_push"(0, -1, 0, $P10)
+    rx328_cur."!cursor_pos"(rx328_pos)
+    $P10 = rx328_cur."charname"()
+    unless $P10, rx328_fail
+    rx328_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("charname")
-    rx280_pos = $P10."pos"()
+    rx328_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx280_cur."!cursor_pos"(rx280_pos)
-    $P10 = rx280_cur."ws"()
-    unless $P10, rx280_fail
-    rx280_pos = $P10."pos"()
-    (rx280_rep) = rx280_cur."!mark_commit"($I285)
-    rx280_cur."!mark_push"(rx280_rep, rx280_pos, $I285)
+    rx328_cur."!cursor_pos"(rx328_pos)
+    $P10 = rx328_cur."ws"()
+    unless $P10, rx328_fail
+    rx328_pos = $P10."pos"()
+    (rx328_rep) = rx328_cur."!mark_commit"($I333)
+    rx328_cur."!mark_push"(rx328_rep, rx328_pos, $I333)
   # rx literal  ","
-    add $I11, rx280_pos, 1
-    gt $I11, rx280_eos, rx280_fail
-    sub $I11, rx280_pos, rx280_off
-    substr $S10, rx280_tgt, $I11, 1
-    ne $S10, ",", rx280_fail
-    add rx280_pos, 1
-    goto rxquantr284_loop
-  rxquantr284_done:
+    add $I11, rx328_pos, 1
+    gt $I11, rx328_eos, rx328_fail
+    sub $I11, rx328_pos, rx328_off
+    substr $S10, rx328_tgt, $I11, 1
+    ne $S10, ",", rx328_fail
+    add rx328_pos, 1
+    goto rxquantr332_loop
+  rxquantr332_done:
   # rx pass
-    rx280_cur."!cursor_pass"(rx280_pos, "charnames")
-    rx280_cur."!cursor_debug"("PASS  ", "charnames", " at pos=", rx280_pos)
-    .return (rx280_cur)
-  rx280_fail:
-.annotate "line", 33
-    (rx280_rep, rx280_pos, $I10, $P10) = rx280_cur."!mark_fail"(0)
-    lt rx280_pos, -1, rx280_done
-    eq rx280_pos, -1, rx280_fail
+    rx328_cur."!cursor_pass"(rx328_pos, "charnames")
+    rx328_cur."!cursor_debug"("PASS  ", "charnames", " at pos=", rx328_pos)
+    .return (rx328_cur)
+  rx328_fail:
+.annotate "line", 33
+    (rx328_rep, rx328_pos, $I10, $P10) = rx328_cur."!mark_fail"(0)
+    lt rx328_pos, -1, rx328_done
+    eq rx328_pos, -1, rx328_fail
     jump $I10
-  rx280_done:
-    rx280_cur."!cursor_fail"()
-    rx280_cur."!cursor_debug"("FAIL  ", "charnames")
-    .return (rx280_cur)
+  rx328_done:
+    rx328_cur."!cursor_fail"()
+    rx328_cur."!cursor_debug"("FAIL  ", "charnames")
+    .return (rx328_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charnames"  :subid("91_1267204683.33533") :method
+.sub "!PREFIX__charnames"  :subid("102_1271336377.56964") :method
 .annotate "line", 33
-    new $P282, "ResizablePMCArray"
-    push $P282, ""
-    .return ($P282)
+    new $P330, "ResizablePMCArray"
+    push $P330, ""
+    .return ($P330)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charspec"  :subid("92_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "charspec"  :subid("103_1271336377.56964") :method :outer("11_1271336377.56964")
 .annotate "line", 33
-    .local string rx287_tgt
-    .local int rx287_pos
-    .local int rx287_off
-    .local int rx287_eos
-    .local int rx287_rep
-    .local pmc rx287_cur
-    (rx287_cur, rx287_pos, rx287_tgt) = self."!cursor_start"()
-    rx287_cur."!cursor_debug"("START ", "charspec")
-    .lex unicode:"$\x{a2}", rx287_cur
+    .local string rx335_tgt
+    .local int rx335_pos
+    .local int rx335_off
+    .local int rx335_eos
+    .local int rx335_rep
+    .local pmc rx335_cur
+    (rx335_cur, rx335_pos, rx335_tgt) = self."!cursor_start"()
+    rx335_cur."!cursor_debug"("START ", "charspec")
+    .lex unicode:"$\x{a2}", rx335_cur
     .local pmc match
     .lex "$/", match
-    length rx287_eos, rx287_tgt
-    set rx287_off, 0
-    lt rx287_pos, 2, rx287_start
-    sub rx287_off, rx287_pos, 1
-    substr rx287_tgt, rx287_tgt, rx287_off
-  rx287_start:
+    length rx335_eos, rx335_tgt
+    set rx335_off, 0
+    lt rx335_pos, 2, rx335_start
+    sub rx335_off, rx335_pos, 1
+    substr rx335_tgt, rx335_tgt, rx335_off
+  rx335_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan292_done
-    goto rxscan292_scan
-  rxscan292_loop:
-    ($P10) = rx287_cur."from"()
+    ne $I10, -1, rxscan340_done
+    goto rxscan340_scan
+  rxscan340_loop:
+    ($P10) = rx335_cur."from"()
     inc $P10
-    set rx287_pos, $P10
-    ge rx287_pos, rx287_eos, rxscan292_done
-  rxscan292_scan:
-    set_addr $I10, rxscan292_loop
-    rx287_cur."!mark_push"(0, rx287_pos, $I10)
-  rxscan292_done:
-  alt293_0:
-.annotate "line", 104
-    set_addr $I10, alt293_1
-    rx287_cur."!mark_push"(0, rx287_pos, $I10)
-.annotate "line", 105
+    set rx335_pos, $P10
+    ge rx335_pos, rx335_eos, rxscan340_done
+  rxscan340_scan:
+    set_addr $I10, rxscan340_loop
+    rx335_cur."!mark_push"(0, rx335_pos, $I10)
+  rxscan340_done:
+  alt341_0:
+.annotate "line", 118
+    set_addr $I10, alt341_1
+    rx335_cur."!mark_push"(0, rx335_pos, $I10)
+.annotate "line", 119
   # rx literal  "["
-    add $I11, rx287_pos, 1
-    gt $I11, rx287_eos, rx287_fail
-    sub $I11, rx287_pos, rx287_off
-    substr $S10, rx287_tgt, $I11, 1
-    ne $S10, "[", rx287_fail
-    add rx287_pos, 1
+    add $I11, rx335_pos, 1
+    gt $I11, rx335_eos, rx335_fail
+    sub $I11, rx335_pos, rx335_off
+    substr $S10, rx335_tgt, $I11, 1
+    ne $S10, "[", rx335_fail
+    add rx335_pos, 1
   # rx subrule "charnames" subtype=capture negate=
-    rx287_cur."!cursor_pos"(rx287_pos)
-    $P10 = rx287_cur."charnames"()
-    unless $P10, rx287_fail
-    rx287_cur."!mark_push"(0, -1, 0, $P10)
+    rx335_cur."!cursor_pos"(rx335_pos)
+    $P10 = rx335_cur."charnames"()
+    unless $P10, rx335_fail
+    rx335_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("charnames")
-    rx287_pos = $P10."pos"()
+    rx335_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx287_pos, 1
-    gt $I11, rx287_eos, rx287_fail
-    sub $I11, rx287_pos, rx287_off
-    substr $S10, rx287_tgt, $I11, 1
-    ne $S10, "]", rx287_fail
-    add rx287_pos, 1
-    goto alt293_end
-  alt293_1:
-    set_addr $I10, alt293_2
-    rx287_cur."!mark_push"(0, rx287_pos, $I10)
-.annotate "line", 106
+    add $I11, rx335_pos, 1
+    gt $I11, rx335_eos, rx335_fail
+    sub $I11, rx335_pos, rx335_off
+    substr $S10, rx335_tgt, $I11, 1
+    ne $S10, "]", rx335_fail
+    add rx335_pos, 1
+    goto alt341_end
+  alt341_1:
+    set_addr $I10, alt341_2
+    rx335_cur."!mark_push"(0, rx335_pos, $I10)
+.annotate "line", 120
   # rx charclass_q d r 1..-1
-    sub $I10, rx287_pos, rx287_off
-    find_not_cclass $I11, 8, rx287_tgt, $I10, rx287_eos
+    sub $I10, rx335_pos, rx335_off
+    find_not_cclass $I11, 8, rx335_tgt, $I10, rx335_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx287_fail
-    add rx287_pos, rx287_off, $I11
-  # rx rxquantr294 ** 0..*
-    set_addr $I295, rxquantr294_done
-    rx287_cur."!mark_push"(0, rx287_pos, $I295)
-  rxquantr294_loop:
+    lt $I11, $I12, rx335_fail
+    add rx335_pos, rx335_off, $I11
+  # rx rxquantr342 ** 0..*
+    set_addr $I343, rxquantr342_done
+    rx335_cur."!mark_push"(0, rx335_pos, $I343)
+  rxquantr342_loop:
   # rx literal  "_"
-    add $I11, rx287_pos, 1
-    gt $I11, rx287_eos, rx287_fail
-    sub $I11, rx287_pos, rx287_off
-    substr $S10, rx287_tgt, $I11, 1
-    ne $S10, "_", rx287_fail
-    add rx287_pos, 1
+    add $I11, rx335_pos, 1
+    gt $I11, rx335_eos, rx335_fail
+    sub $I11, rx335_pos, rx335_off
+    substr $S10, rx335_tgt, $I11, 1
+    ne $S10, "_", rx335_fail
+    add rx335_pos, 1
   # rx charclass_q d r 1..-1
-    sub $I10, rx287_pos, rx287_off
-    find_not_cclass $I11, 8, rx287_tgt, $I10, rx287_eos
+    sub $I10, rx335_pos, rx335_off
+    find_not_cclass $I11, 8, rx335_tgt, $I10, rx335_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx287_fail
-    add rx287_pos, rx287_off, $I11
-    (rx287_rep) = rx287_cur."!mark_commit"($I295)
-    rx287_cur."!mark_push"(rx287_rep, rx287_pos, $I295)
-    goto rxquantr294_loop
-  rxquantr294_done:
-    goto alt293_end
-  alt293_2:
-    set_addr $I10, alt293_3
-    rx287_cur."!mark_push"(0, rx287_pos, $I10)
-.annotate "line", 107
+    lt $I11, $I12, rx335_fail
+    add rx335_pos, rx335_off, $I11
+    (rx335_rep) = rx335_cur."!mark_commit"($I343)
+    rx335_cur."!mark_push"(rx335_rep, rx335_pos, $I343)
+    goto rxquantr342_loop
+  rxquantr342_done:
+    goto alt341_end
+  alt341_2:
+    set_addr $I10, alt341_3
+    rx335_cur."!mark_push"(0, rx335_pos, $I10)
+.annotate "line", 121
   # rx enumcharlist negate=0 
-    ge rx287_pos, rx287_eos, rx287_fail
-    sub $I10, rx287_pos, rx287_off
-    substr $S10, rx287_tgt, $I10, 1
+    ge rx335_pos, rx335_eos, rx335_fail
+    sub $I10, rx335_pos, rx335_off
+    substr $S10, rx335_tgt, $I10, 1
     index $I11, "?@ABCDEFGHIJKLMNOPQRSTUVWXYZ", $S10
-    lt $I11, 0, rx287_fail
-    inc rx287_pos
-    goto alt293_end
-  alt293_3:
-.annotate "line", 108
+    lt $I11, 0, rx335_fail
+    inc rx335_pos
+    goto alt341_end
+  alt341_3:
+.annotate "line", 122
   # rx subrule "panic" subtype=method negate=
-    rx287_cur."!cursor_pos"(rx287_pos)
-    $P10 = rx287_cur."panic"("Unrecognized \\c character")
-    unless $P10, rx287_fail
-    rx287_pos = $P10."pos"()
-  alt293_end:
-.annotate "line", 103
+    rx335_cur."!cursor_pos"(rx335_pos)
+    $P10 = rx335_cur."panic"("Unrecognized \\c character")
+    unless $P10, rx335_fail
+    rx335_pos = $P10."pos"()
+  alt341_end:
+.annotate "line", 117
   # rx pass
-    rx287_cur."!cursor_pass"(rx287_pos, "charspec")
-    rx287_cur."!cursor_debug"("PASS  ", "charspec", " at pos=", rx287_pos)
-    .return (rx287_cur)
-  rx287_fail:
-.annotate "line", 33
-    (rx287_rep, rx287_pos, $I10, $P10) = rx287_cur."!mark_fail"(0)
-    lt rx287_pos, -1, rx287_done
-    eq rx287_pos, -1, rx287_fail
+    rx335_cur."!cursor_pass"(rx335_pos, "charspec")
+    rx335_cur."!cursor_debug"("PASS  ", "charspec", " at pos=", rx335_pos)
+    .return (rx335_cur)
+  rx335_fail:
+.annotate "line", 33
+    (rx335_rep, rx335_pos, $I10, $P10) = rx335_cur."!mark_fail"(0)
+    lt rx335_pos, -1, rx335_done
+    eq rx335_pos, -1, rx335_fail
     jump $I10
-  rx287_done:
-    rx287_cur."!cursor_fail"()
-    rx287_cur."!cursor_debug"("FAIL  ", "charspec")
-    .return (rx287_cur)
+  rx335_done:
+    rx335_cur."!cursor_fail"()
+    rx335_cur."!cursor_debug"("FAIL  ", "charspec")
+    .return (rx335_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charspec"  :subid("93_1267204683.33533") :method
+.sub "!PREFIX__charspec"  :subid("104_1271336377.56964") :method
 .annotate "line", 33
-    $P289 = self."!PREFIX__!subrule"("", "")
-    $P290 = self."!PREFIX__!subrule"("charnames", "[")
-    new $P291, "ResizablePMCArray"
-    push $P291, $P289
-    push $P291, "Z"
-    push $P291, "Y"
-    push $P291, "X"
-    push $P291, "W"
-    push $P291, "V"
-    push $P291, "U"
-    push $P291, "T"
-    push $P291, "S"
-    push $P291, "R"
-    push $P291, "Q"
-    push $P291, "P"
-    push $P291, "O"
-    push $P291, "N"
-    push $P291, "M"
-    push $P291, "L"
-    push $P291, "K"
-    push $P291, "J"
-    push $P291, "I"
-    push $P291, "H"
-    push $P291, "G"
-    push $P291, "F"
-    push $P291, "E"
-    push $P291, "D"
-    push $P291, "C"
-    push $P291, "B"
-    push $P291, "A"
-    push $P291, "@"
-    push $P291, "?"
-    push $P291, ""
-    push $P291, $P290
-    .return ($P291)
+    $P337 = self."!PREFIX__!subrule"("", "")
+    $P338 = self."!PREFIX__!subrule"("charnames", "[")
+    new $P339, "ResizablePMCArray"
+    push $P339, $P337
+    push $P339, "Z"
+    push $P339, "Y"
+    push $P339, "X"
+    push $P339, "W"
+    push $P339, "V"
+    push $P339, "U"
+    push $P339, "T"
+    push $P339, "S"
+    push $P339, "R"
+    push $P339, "Q"
+    push $P339, "P"
+    push $P339, "O"
+    push $P339, "N"
+    push $P339, "M"
+    push $P339, "L"
+    push $P339, "K"
+    push $P339, "J"
+    push $P339, "I"
+    push $P339, "H"
+    push $P339, "G"
+    push $P339, "F"
+    push $P339, "E"
+    push $P339, "D"
+    push $P339, "C"
+    push $P339, "B"
+    push $P339, "A"
+    push $P339, "@"
+    push $P339, "?"
+    push $P339, ""
+    push $P339, $P338
+    .return ($P339)
 .end
 
 ### .include 'gen/hllgrammar-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204685.44293")
+.sub "_block11"  :anon :subid("10_1271336380.06238")
 .annotate "line", 0
     get_hll_global $P14, ["HLL";"Actions"], "_block13" 
     capture_lex $P14
 .annotate "line", 3
     get_hll_global $P14, ["HLL";"Actions"], "_block13" 
     capture_lex $P14
-    $P538 = $P14()
+    $P578 = $P14()
 .annotate "line", 1
-    .return ($P538)
+    .return ($P578)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post46") :outer("10_1267204685.44293")
+.sub "" :load :init :subid("post50") :outer("10_1271336380.06238")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204685.44293" 
+    .const 'Sub' $P12 = "10_1271336380.06238" 
     .local pmc block
     set block, $P12
-    $P539 = get_root_global ["parrot"], "P6metaclass"
-    $P539."new_class"("HLL::Actions")
+    $P579 = get_root_global ["parrot"], "P6metaclass"
+    $P579."new_class"("HLL::Actions")
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block13"  :subid("11_1267204685.44293") :outer("10_1267204685.44293")
+.sub "_block13"  :subid("11_1271336380.06238") :outer("10_1271336380.06238")
 .annotate "line", 3
-    .const 'Sub' $P521 = "45_1267204685.44293" 
-    capture_lex $P521
-    .const 'Sub' $P496 = "43_1267204685.44293" 
-    capture_lex $P496
-    .const 'Sub' $P465 = "42_1267204685.44293" 
-    capture_lex $P465
-    .const 'Sub' $P455 = "41_1267204685.44293" 
-    capture_lex $P455
-    .const 'Sub' $P438 = "40_1267204685.44293" 
-    capture_lex $P438
-    .const 'Sub' $P421 = "39_1267204685.44293" 
+    .const 'Sub' $P561 = "49_1271336380.06238" 
+    capture_lex $P561
+    .const 'Sub' $P536 = "47_1271336380.06238" 
+    capture_lex $P536
+    .const 'Sub' $P505 = "46_1271336380.06238" 
+    capture_lex $P505
+    .const 'Sub' $P486 = "45_1271336380.06238" 
+    capture_lex $P486
+    .const 'Sub' $P479 = "44_1271336380.06238" 
+    capture_lex $P479
+    .const 'Sub' $P469 = "43_1271336380.06238" 
+    capture_lex $P469
+    .const 'Sub' $P452 = "42_1271336380.06238" 
+    capture_lex $P452
+    .const 'Sub' $P435 = "41_1271336380.06238" 
+    capture_lex $P435
+    .const 'Sub' $P428 = "40_1271336380.06238" 
+    capture_lex $P428
+    .const 'Sub' $P421 = "39_1271336380.06238" 
     capture_lex $P421
-    .const 'Sub' $P414 = "38_1267204685.44293" 
+    .const 'Sub' $P414 = "38_1271336380.06238" 
     capture_lex $P414
-    .const 'Sub' $P407 = "37_1267204685.44293" 
+    .const 'Sub' $P407 = "37_1271336380.06238" 
     capture_lex $P407
-    .const 'Sub' $P400 = "36_1267204685.44293" 
+    .const 'Sub' $P400 = "36_1271336380.06238" 
     capture_lex $P400
-    .const 'Sub' $P393 = "35_1267204685.44293" 
+    .const 'Sub' $P393 = "35_1271336380.06238" 
     capture_lex $P393
-    .const 'Sub' $P383 = "34_1267204685.44293" 
+    .const 'Sub' $P383 = "34_1271336380.06238" 
     capture_lex $P383
-    .const 'Sub' $P376 = "33_1267204685.44293" 
+    .const 'Sub' $P376 = "33_1271336380.06238" 
     capture_lex $P376
-    .const 'Sub' $P360 = "32_1267204685.44293" 
+    .const 'Sub' $P360 = "32_1271336380.06238" 
     capture_lex $P360
-    .const 'Sub' $P285 = "30_1267204685.44293" 
+    .const 'Sub' $P285 = "30_1271336380.06238" 
     capture_lex $P285
-    .const 'Sub' $P222 = "27_1267204685.44293" 
+    .const 'Sub' $P222 = "27_1271336380.06238" 
     capture_lex $P222
-    .const 'Sub' $P213 = "26_1267204685.44293" 
+    .const 'Sub' $P213 = "26_1271336380.06238" 
     capture_lex $P213
-    .const 'Sub' $P204 = "25_1267204685.44293" 
+    .const 'Sub' $P204 = "25_1271336380.06238" 
     capture_lex $P204
-    .const 'Sub' $P195 = "24_1267204685.44293" 
+    .const 'Sub' $P195 = "24_1271336380.06238" 
     capture_lex $P195
-    .const 'Sub' $P186 = "23_1267204685.44293" 
+    .const 'Sub' $P186 = "23_1271336380.06238" 
     capture_lex $P186
-    .const 'Sub' $P177 = "22_1267204685.44293" 
+    .const 'Sub' $P177 = "22_1271336380.06238" 
     capture_lex $P177
-    .const 'Sub' $P167 = "21_1267204685.44293" 
+    .const 'Sub' $P167 = "21_1271336380.06238" 
     capture_lex $P167
-    .const 'Sub' $P157 = "20_1267204685.44293" 
+    .const 'Sub' $P157 = "20_1271336380.06238" 
     capture_lex $P157
-    .const 'Sub' $P149 = "19_1267204685.44293" 
+    .const 'Sub' $P149 = "19_1271336380.06238" 
     capture_lex $P149
-    .const 'Sub' $P139 = "18_1267204685.44293" 
+    .const 'Sub' $P139 = "18_1271336380.06238" 
     capture_lex $P139
-    .const 'Sub' $P129 = "17_1267204685.44293" 
+    .const 'Sub' $P129 = "17_1271336380.06238" 
     capture_lex $P129
-    .const 'Sub' $P28 = "14_1267204685.44293" 
+    .const 'Sub' $P28 = "14_1271336380.06238" 
     capture_lex $P28
-    .const 'Sub' $P22 = "13_1267204685.44293" 
+    .const 'Sub' $P22 = "13_1271336380.06238" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1267204685.44293" 
+    .const 'Sub' $P15 = "12_1271336380.06238" 
     capture_lex $P15
-.annotate "line", 188
-    .const 'Sub' $P521 = "45_1267204685.44293" 
-    capture_lex $P521
+.annotate "line", 198
+    .const 'Sub' $P561 = "49_1271336380.06238" 
+    capture_lex $P561
 .annotate "line", 3
-    .return ($P521)
+    .return ($P561)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "string_to_int"  :subid("12_1267204685.44293") :outer("11_1267204685.44293")
+.sub "string_to_int"  :subid("12_1271336380.06238") :outer("11_1271336380.06238")
     .param pmc param_18
     .param pmc param_19
 .annotate "line", 3
@@ -4434,7 +4927,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "ints_to_string"  :subid("13_1267204685.44293") :outer("11_1267204685.44293")
+.sub "ints_to_string"  :subid("13_1271336380.06238") :outer("11_1271336380.06238")
     .param pmc param_25
 .annotate "line", 37
     new $P24, 'ExceptionHandler'
@@ -4475,14 +4968,14 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "EXPR"  :subid("14_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "EXPR"  :subid("14_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_31
     .param pmc param_32 :optional
     .param int has_param_32 :opt_flag
 .annotate "line", 62
-    .const 'Sub' $P111 = "16_1267204685.44293" 
+    .const 'Sub' $P111 = "16_1271336380.06238" 
     capture_lex $P111
-    .const 'Sub' $P78 = "15_1267204685.44293" 
+    .const 'Sub' $P78 = "15_1271336380.06238" 
     capture_lex $P78
     new $P30, 'ExceptionHandler'
     set_addr $P30, control_29
@@ -4490,10 +4983,10 @@
     push_eh $P30
     .lex "self", self
     .lex "$/", param_31
-    if has_param_32, optparam_47
+    if has_param_32, optparam_51
     new $P33, "Undef"
     set param_32, $P33
-  optparam_47:
+  optparam_51:
     .lex "$key", param_32
 .annotate "line", 64
     new $P34, "Undef"
@@ -4515,13 +5008,13 @@
     defined $I43, $P39
     if $I43, default_42
     find_lex $P44, "$/"
-    unless_null $P44, vivify_48
+    unless_null $P44, vivify_52
     $P44 = root_new ['parrot';'Hash']
-  vivify_48:
+  vivify_52:
     set $P45, $P44["OPER"]
-    unless_null $P45, vivify_49
+    unless_null $P45, vivify_53
     new $P45, "Undef"
-  vivify_49:
+  vivify_53:
     $P46 = $P45."ast"()
     set $P39, $P46
   default_42:
@@ -4536,57 +5029,57 @@
     store_lex "$past", $P51
 .annotate "line", 67
     find_lex $P53, "$/"
-    unless_null $P53, vivify_50
+    unless_null $P53, vivify_54
     $P53 = root_new ['parrot';'Hash']
-  vivify_50:
+  vivify_54:
     set $P54, $P53["OPER"]
-    unless_null $P54, vivify_51
+    unless_null $P54, vivify_55
     $P54 = root_new ['parrot';'Hash']
-  vivify_51:
+  vivify_55:
     set $P55, $P54["O"]
-    unless_null $P55, vivify_52
+    unless_null $P55, vivify_56
     $P55 = root_new ['parrot';'Hash']
-  vivify_52:
+  vivify_56:
     set $P56, $P55["pasttype"]
-    unless_null $P56, vivify_53
+    unless_null $P56, vivify_57
     new $P56, "Undef"
-  vivify_53:
+  vivify_57:
     if $P56, if_52
 .annotate "line", 68
     find_lex $P64, "$/"
-    unless_null $P64, vivify_54
+    unless_null $P64, vivify_58
     $P64 = root_new ['parrot';'Hash']
-  vivify_54:
+  vivify_58:
     set $P65, $P64["OPER"]
-    unless_null $P65, vivify_55
+    unless_null $P65, vivify_59
     $P65 = root_new ['parrot';'Hash']
-  vivify_55:
+  vivify_59:
     set $P66, $P65["O"]
-    unless_null $P66, vivify_56
+    unless_null $P66, vivify_60
     $P66 = root_new ['parrot';'Hash']
-  vivify_56:
+  vivify_60:
     set $P67, $P66["pirop"]
-    unless_null $P67, vivify_57
+    unless_null $P67, vivify_61
     new $P67, "Undef"
-  vivify_57:
+  vivify_61:
     unless $P67, if_63_end
     find_lex $P68, "$past"
     find_lex $P69, "$/"
-    unless_null $P69, vivify_58
+    unless_null $P69, vivify_62
     $P69 = root_new ['parrot';'Hash']
-  vivify_58:
+  vivify_62:
     set $P70, $P69["OPER"]
-    unless_null $P70, vivify_59
+    unless_null $P70, vivify_63
     $P70 = root_new ['parrot';'Hash']
-  vivify_59:
+  vivify_63:
     set $P71, $P70["O"]
-    unless_null $P71, vivify_60
+    unless_null $P71, vivify_64
     $P71 = root_new ['parrot';'Hash']
-  vivify_60:
+  vivify_64:
     set $P72, $P71["pirop"]
-    unless_null $P72, vivify_61
+    unless_null $P72, vivify_65
     new $P72, "Undef"
-  vivify_61:
+  vivify_65:
     set $S73, $P72
     $P68."pirop"($S73)
   if_63_end:
@@ -4595,21 +5088,21 @@
 .annotate "line", 67
     find_lex $P57, "$past"
     find_lex $P58, "$/"
-    unless_null $P58, vivify_62
+    unless_null $P58, vivify_66
     $P58 = root_new ['parrot';'Hash']
-  vivify_62:
+  vivify_66:
     set $P59, $P58["OPER"]
-    unless_null $P59, vivify_63
+    unless_null $P59, vivify_67
     $P59 = root_new ['parrot';'Hash']
-  vivify_63:
+  vivify_67:
     set $P60, $P59["O"]
-    unless_null $P60, vivify_64
+    unless_null $P60, vivify_68
     $P60 = root_new ['parrot';'Hash']
-  vivify_64:
+  vivify_68:
     set $P61, $P60["pasttype"]
-    unless_null $P61, vivify_65
+    unless_null $P61, vivify_69
     new $P61, "Undef"
-  vivify_65:
+  vivify_69:
     set $S62, $P61
     $P57."pasttype"($S62)
   if_52_end:
@@ -4617,7 +5110,7 @@
     find_lex $P75, "$past"
     $P76 = $P75."name"()
     if $P76, unless_74_end
-    .const 'Sub' $P78 = "15_1267204685.44293" 
+    .const 'Sub' $P78 = "15_1271336380.06238" 
     capture_lex $P78
     $P78()
   unless_74_end:
@@ -4631,7 +5124,7 @@
     find_lex $P106, "$/"
     $P107 = $P106."list"()
     defined $I108, $P107
-    unless $I108, for_undef_69
+    unless $I108, for_undef_73
     iter $P105, $P107
     new $P123, 'ExceptionHandler'
     set_addr $P123, loop122_handler
@@ -4641,7 +5134,7 @@
     unless $P105, loop122_done
     shift $P109, $P105
   loop122_redo:
-    .const 'Sub' $P111 = "16_1267204685.44293" 
+    .const 'Sub' $P111 = "16_1271336380.06238" 
     capture_lex $P111
     $P111($P109)
   loop122_next:
@@ -4654,20 +5147,20 @@
     eq $P124, 67, loop122_redo
   loop122_done:
     pop_eh 
-  for_undef_69:
+  for_undef_73:
 .annotate "line", 81
     goto if_97_end
   if_97:
 .annotate "line", 80
     find_lex $P101, "$past"
     find_lex $P102, "$/"
-    unless_null $P102, vivify_70
+    unless_null $P102, vivify_74
     $P102 = root_new ['parrot';'ResizablePMCArray']
-  vivify_70:
+  vivify_74:
     set $P103, $P102[0]
-    unless_null $P103, vivify_71
+    unless_null $P103, vivify_75
     new $P103, "Undef"
-  vivify_71:
+  vivify_75:
     $P104 = $P103."ast"()
     $P101."unshift"($P104)
   if_97_end:
@@ -4686,7 +5179,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block77"  :anon :subid("15_1267204685.44293") :outer("14_1267204685.44293")
+.sub "_block77"  :anon :subid("15_1271336380.06238") :outer("14_1271336380.06238")
 .annotate "line", 71
     new $P79, "Undef"
     .lex "$name", $P79
@@ -4709,17 +5202,17 @@
     concat $P86, $P85, ":<"
 .annotate "line", 76
     find_lex $P87, "$/"
-    unless_null $P87, vivify_66
+    unless_null $P87, vivify_70
     $P87 = root_new ['parrot';'Hash']
-  vivify_66:
+  vivify_70:
     set $P88, $P87["OPER"]
-    unless_null $P88, vivify_67
+    unless_null $P88, vivify_71
     $P88 = root_new ['parrot';'Hash']
-  vivify_67:
+  vivify_71:
     set $P89, $P88["sym"]
-    unless_null $P89, vivify_68
+    unless_null $P89, vivify_72
     new $P89, "Undef"
-  vivify_68:
+  vivify_72:
     concat $P90, $P86, $P89
     concat $P91, $P90, ">"
     store_lex "$name", $P91
@@ -4736,7 +5229,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block110"  :anon :subid("16_1267204685.44293") :outer("14_1267204685.44293")
+.sub "_block110"  :anon :subid("16_1271336380.06238") :outer("14_1271336380.06238")
     .param pmc param_112
 .annotate "line", 82
     .lex "$_", param_112
@@ -4759,7 +5252,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "term:sym<circumfix>"  :subid("17_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "term:sym<circumfix>"  :subid("17_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_132
 .annotate "line", 87
     new $P131, 'ExceptionHandler'
@@ -4770,13 +5263,13 @@
     .lex "$/", param_132
     find_lex $P133, "$/"
     find_lex $P134, "$/"
-    unless_null $P134, vivify_72
+    unless_null $P134, vivify_76
     $P134 = root_new ['parrot';'Hash']
-  vivify_72:
+  vivify_76:
     set $P135, $P134["circumfix"]
-    unless_null $P135, vivify_73
+    unless_null $P135, vivify_77
     new $P135, "Undef"
-  vivify_73:
+  vivify_77:
     $P136 = $P135."ast"()
     $P137 = $P133."!make"($P136)
     .return ($P137)
@@ -4789,7 +5282,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "termish"  :subid("18_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "termish"  :subid("18_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_142
 .annotate "line", 89
     new $P141, 'ExceptionHandler'
@@ -4800,13 +5293,13 @@
     .lex "$/", param_142
     find_lex $P143, "$/"
     find_lex $P144, "$/"
-    unless_null $P144, vivify_74
+    unless_null $P144, vivify_78
     $P144 = root_new ['parrot';'Hash']
-  vivify_74:
+  vivify_78:
     set $P145, $P144["term"]
-    unless_null $P145, vivify_75
+    unless_null $P145, vivify_79
     new $P145, "Undef"
-  vivify_75:
+  vivify_79:
     $P146 = $P145."ast"()
     $P147 = $P143."!make"($P146)
     .return ($P147)
@@ -4819,7 +5312,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "nullterm"  :subid("19_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "nullterm"  :subid("19_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_152
 .annotate "line", 90
     new $P151, 'ExceptionHandler'
@@ -4841,7 +5334,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "nullterm_alt"  :subid("20_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "nullterm_alt"  :subid("20_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_160
 .annotate "line", 91
     new $P159, 'ExceptionHandler'
@@ -4852,13 +5345,13 @@
     .lex "$/", param_160
     find_lex $P161, "$/"
     find_lex $P162, "$/"
-    unless_null $P162, vivify_76
+    unless_null $P162, vivify_80
     $P162 = root_new ['parrot';'Hash']
-  vivify_76:
+  vivify_80:
     set $P163, $P162["term"]
-    unless_null $P163, vivify_77
+    unless_null $P163, vivify_81
     new $P163, "Undef"
-  vivify_77:
+  vivify_81:
     $P164 = $P163."ast"()
     $P165 = $P161."!make"($P164)
     .return ($P165)
@@ -4871,7 +5364,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "integer"  :subid("21_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "integer"  :subid("21_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_170
 .annotate "line", 93
     new $P169, 'ExceptionHandler'
@@ -4882,13 +5375,13 @@
     .lex "$/", param_170
     find_lex $P171, "$/"
     find_lex $P172, "$/"
-    unless_null $P172, vivify_78
+    unless_null $P172, vivify_82
     $P172 = root_new ['parrot';'Hash']
-  vivify_78:
+  vivify_82:
     set $P173, $P172["VALUE"]
-    unless_null $P173, vivify_79
+    unless_null $P173, vivify_83
     new $P173, "Undef"
-  vivify_79:
+  vivify_83:
     $P174 = $P173."ast"()
     $P175 = $P171."!make"($P174)
     .return ($P175)
@@ -4901,7 +5394,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "dec_number"  :subid("22_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "dec_number"  :subid("22_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_180
 .annotate "line", 95
     new $P179, 'ExceptionHandler'
@@ -4924,7 +5417,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "decint"  :subid("23_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "decint"  :subid("23_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_189
 .annotate "line", 97
     new $P188, 'ExceptionHandler'
@@ -4947,7 +5440,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "hexint"  :subid("24_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "hexint"  :subid("24_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_198
 .annotate "line", 98
     new $P197, 'ExceptionHandler'
@@ -4970,7 +5463,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "octint"  :subid("25_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "octint"  :subid("25_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_207
 .annotate "line", 99
     new $P206, 'ExceptionHandler'
@@ -4993,7 +5486,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "binint"  :subid("26_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "binint"  :subid("26_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_216
 .annotate "line", 100
     new $P215, 'ExceptionHandler'
@@ -5016,10 +5509,10 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_EXPR"  :subid("27_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_EXPR"  :subid("27_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_225
 .annotate "line", 102
-    .const 'Sub' $P241 = "28_1267204685.44293" 
+    .const 'Sub' $P241 = "28_1271336380.06238" 
     capture_lex $P241
     new $P224, 'ExceptionHandler'
     set_addr $P224, control_223
@@ -5031,19 +5524,19 @@
     new $P226, "Undef"
     .lex "$past", $P226
     find_lex $P227, "$/"
-    unless_null $P227, vivify_80
+    unless_null $P227, vivify_84
     $P227 = root_new ['parrot';'Hash']
-  vivify_80:
+  vivify_84:
     set $P228, $P227["quote_delimited"]
-    unless_null $P228, vivify_81
+    unless_null $P228, vivify_85
     new $P228, "Undef"
-  vivify_81:
+  vivify_85:
     $P229 = $P228."ast"()
     store_lex "$past", $P229
 .annotate "line", 104
-    get_hll_global $P231, ["HLL";"Grammar"], "quotemod_check"
-    find_lex $P232, "$/"
-    $P233 = $P231($P232, "w")
+    find_lex $P231, "$/"
+    $P232 = $P231."CURSOR"()
+    $P233 = $P232."quotemod_check"("w")
     unless $P233, if_230_end
 .annotate "line", 105
     get_hll_global $P235, ["PAST"], "Node"
@@ -5051,7 +5544,7 @@
     $P237 = $P235."ACCEPTS"($P236)
     if $P237, if_234
 .annotate "line", 108
-    .const 'Sub' $P241 = "28_1267204685.44293" 
+    .const 'Sub' $P241 = "28_1271336380.06238" 
     capture_lex $P241
     $P241()
     goto if_234_end
@@ -5090,9 +5583,9 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block240"  :anon :subid("28_1267204685.44293") :outer("27_1267204685.44293")
+.sub "_block240"  :anon :subid("28_1271336380.06238") :outer("27_1271336380.06238")
 .annotate "line", 108
-    .const 'Sub' $P260 = "29_1267204685.44293" 
+    .const 'Sub' $P260 = "29_1271336380.06238" 
     capture_lex $P260
 .annotate "line", 109
     $P242 = root_new ['parrot';'ResizablePMCArray']
@@ -5109,13 +5602,13 @@
     if $I251, if_248
 .annotate "line", 115
     find_lex $P268, "@words"
-    unless_null $P268, vivify_82
+    unless_null $P268, vivify_86
     $P268 = root_new ['parrot';'ResizablePMCArray']
-  vivify_82:
+  vivify_86:
     set $P269, $P268[0]
-    unless_null $P269, vivify_83
+    unless_null $P269, vivify_87
     new $P269, "Undef"
-  vivify_83:
+  vivify_87:
     set $S270, $P269
     new $P271, 'String'
     set $P271, $S270
@@ -5133,7 +5626,7 @@
 .annotate "line", 112
     find_lex $P256, "@words"
     defined $I257, $P256
-    unless $I257, for_undef_84
+    unless $I257, for_undef_88
     iter $P255, $P256
     new $P266, 'ExceptionHandler'
     set_addr $P266, loop265_handler
@@ -5143,7 +5636,7 @@
     unless $P255, loop265_done
     shift $P258, $P255
   loop265_redo:
-    .const 'Sub' $P260 = "29_1267204685.44293" 
+    .const 'Sub' $P260 = "29_1271336380.06238" 
     capture_lex $P260
     $P260($P258)
   loop265_next:
@@ -5156,7 +5649,7 @@
     eq $P267, 67, loop265_redo
   loop265_done:
     pop_eh 
-  for_undef_84:
+  for_undef_88:
 .annotate "line", 110
     set $P247, $P255
   if_248_end:
@@ -5166,7 +5659,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block259"  :anon :subid("29_1267204685.44293") :outer("28_1267204685.44293")
+.sub "_block259"  :anon :subid("29_1271336380.06238") :outer("28_1271336380.06238")
     .param pmc param_261
 .annotate "line", 112
     .lex "$_", param_261
@@ -5178,10 +5671,10 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_delimited"  :subid("30_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_delimited"  :subid("30_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_288
 .annotate "line", 125
-    .const 'Sub' $P300 = "31_1267204685.44293" 
+    .const 'Sub' $P300 = "31_1271336380.06238" 
     capture_lex $P300
     new $P287, 'ExceptionHandler'
     set_addr $P287, control_286
@@ -5206,15 +5699,15 @@
     store_lex "$lastlit", $P293
 .annotate "line", 128
     find_lex $P295, "$/"
-    unless_null $P295, vivify_85
+    unless_null $P295, vivify_89
     $P295 = root_new ['parrot';'Hash']
-  vivify_85:
+  vivify_89:
     set $P296, $P295["quote_atom"]
-    unless_null $P296, vivify_86
+    unless_null $P296, vivify_90
     new $P296, "Undef"
-  vivify_86:
+  vivify_90:
     defined $I297, $P296
-    unless $I297, for_undef_87
+    unless $I297, for_undef_91
     iter $P294, $P296
     new $P333, 'ExceptionHandler'
     set_addr $P333, loop332_handler
@@ -5224,7 +5717,7 @@
     unless $P294, loop332_done
     shift $P298, $P294
   loop332_redo:
-    .const 'Sub' $P300 = "31_1267204685.44293" 
+    .const 'Sub' $P300 = "31_1271336380.06238" 
     capture_lex $P300
     $P300($P298)
   loop332_next:
@@ -5237,7 +5730,7 @@
     eq $P334, 67, loop332_redo
   loop332_done:
     pop_eh 
-  for_undef_87:
+  for_undef_91:
 .annotate "line", 142
     find_lex $P336, "$lastlit"
     set $S337, $P336
@@ -5302,7 +5795,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block299"  :anon :subid("31_1267204685.44293") :outer("30_1267204685.44293")
+.sub "_block299"  :anon :subid("31_1271336380.06238") :outer("30_1271336380.06238")
     .param pmc param_302
 .annotate "line", 129
     new $P301, "Undef"
@@ -5371,7 +5864,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_atom"  :subid("32_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_atom"  :subid("32_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_363
 .annotate "line", 150
     new $P362, 'ExceptionHandler'
@@ -5383,13 +5876,13 @@
 .annotate "line", 151
     find_lex $P364, "$/"
     find_lex $P367, "$/"
-    unless_null $P367, vivify_88
+    unless_null $P367, vivify_92
     $P367 = root_new ['parrot';'Hash']
-  vivify_88:
+  vivify_92:
     set $P368, $P367["quote_escape"]
-    unless_null $P368, vivify_89
+    unless_null $P368, vivify_93
     new $P368, "Undef"
-  vivify_89:
+  vivify_93:
     if $P368, if_366
     find_lex $P372, "$/"
     set $S373, $P372
@@ -5398,13 +5891,13 @@
     goto if_366_end
   if_366:
     find_lex $P369, "$/"
-    unless_null $P369, vivify_90
+    unless_null $P369, vivify_94
     $P369 = root_new ['parrot';'Hash']
-  vivify_90:
+  vivify_94:
     set $P370, $P369["quote_escape"]
-    unless_null $P370, vivify_91
+    unless_null $P370, vivify_95
     new $P370, "Undef"
-  vivify_91:
+  vivify_95:
     $P371 = $P370."ast"()
     set $P365, $P371
   if_366_end:
@@ -5420,7 +5913,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<backslash>"  :subid("33_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<backslash>"  :subid("33_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_379
 .annotate "line", 154
     new $P378, 'ExceptionHandler'
@@ -5441,7 +5934,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<stopper>"  :subid("34_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<stopper>"  :subid("34_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_386
 .annotate "line", 155
     new $P385, 'ExceptionHandler'
@@ -5452,13 +5945,13 @@
     .lex "$/", param_386
     find_lex $P387, "$/"
     find_lex $P388, "$/"
-    unless_null $P388, vivify_92
+    unless_null $P388, vivify_96
     $P388 = root_new ['parrot';'Hash']
-  vivify_92:
+  vivify_96:
     set $P389, $P388["stopper"]
-    unless_null $P389, vivify_93
+    unless_null $P389, vivify_97
     new $P389, "Undef"
-  vivify_93:
+  vivify_97:
     set $S390, $P389
     $P391 = $P387."!make"($S390)
     .return ($P391)
@@ -5471,7 +5964,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<bs>"  :subid("35_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<bs>"  :subid("35_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_396
 .annotate "line", 157
     new $P395, 'ExceptionHandler'
@@ -5492,7 +5985,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<nl>"  :subid("36_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<nl>"  :subid("36_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_403
 .annotate "line", 158
     new $P402, 'ExceptionHandler'
@@ -5513,7 +6006,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<cr>"  :subid("37_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<cr>"  :subid("37_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_410
 .annotate "line", 159
     new $P409, 'ExceptionHandler'
@@ -5534,7 +6027,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<tab>"  :subid("38_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<tab>"  :subid("38_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_417
 .annotate "line", 160
     new $P416, 'ExceptionHandler'
@@ -5555,359 +6048,482 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<hex>"  :subid("39_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<ff>"  :subid("39_1271336380.06238") :method :outer("11_1271336380.06238")
     .param pmc param_424
-.annotate "line", 162
+.annotate "line", 161
     new $P423, 'ExceptionHandler'
     set_addr $P423, control_422
     $P423."handle_types"(58)
     push_eh $P423
     .lex "self", self
     .lex "$/", param_424
-.annotate "line", 163
     find_lex $P425, "$/"
-    find_lex $P428, "$/"
-    unless_null $P428, vivify_94
-    $P428 = root_new ['parrot';'Hash']
-  vivify_94:
-    set $P429, $P428["hexint"]
-    unless_null $P429, vivify_95
-    new $P429, "Undef"
-  vivify_95:
-    if $P429, if_427
-    find_lex $P432, "$/"
-    unless_null $P432, vivify_96
-    $P432 = root_new ['parrot';'Hash']
-  vivify_96:
-    set $P433, $P432["hexints"]
-    unless_null $P433, vivify_97
-    $P433 = root_new ['parrot';'Hash']
-  vivify_97:
-    set $P434, $P433["hexint"]
-    unless_null $P434, vivify_98
-    new $P434, "Undef"
-  vivify_98:
-    set $P426, $P434
-    goto if_427_end
-  if_427:
-    find_lex $P430, "$/"
-    unless_null $P430, vivify_99
-    $P430 = root_new ['parrot';'Hash']
-  vivify_99:
-    set $P431, $P430["hexint"]
-    unless_null $P431, vivify_100
-    new $P431, "Undef"
-  vivify_100:
-    set $P426, $P431
-  if_427_end:
-    $P435 = "ints_to_string"($P426)
-    $P436 = $P425."!make"($P435)
-.annotate "line", 162
-    .return ($P436)
+    $P426 = $P425."!make"("\f")
+    .return ($P426)
   control_422:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P437, exception, "payload"
-    .return ($P437)
+    getattribute $P427, exception, "payload"
+    .return ($P427)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<oct>"  :subid("40_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_441
-.annotate "line", 166
-    new $P440, 'ExceptionHandler'
-    set_addr $P440, control_439
-    $P440."handle_types"(58)
-    push_eh $P440
+.sub "quote_escape:sym<esc>"  :subid("40_1271336380.06238") :method :outer("11_1271336380.06238")
+    .param pmc param_431
+.annotate "line", 162
+    new $P430, 'ExceptionHandler'
+    set_addr $P430, control_429
+    $P430."handle_types"(58)
+    push_eh $P430
     .lex "self", self
-    .lex "$/", param_441
-.annotate "line", 167
+    .lex "$/", param_431
+    find_lex $P432, "$/"
+    $P433 = $P432."!make"("\e")
+    .return ($P433)
+  control_429:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P434, exception, "payload"
+    .return ($P434)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.sub "quote_escape:sym<hex>"  :subid("41_1271336380.06238") :method :outer("11_1271336380.06238")
+    .param pmc param_438
+.annotate "line", 164
+    new $P437, 'ExceptionHandler'
+    set_addr $P437, control_436
+    $P437."handle_types"(58)
+    push_eh $P437
+    .lex "self", self
+    .lex "$/", param_438
+.annotate "line", 165
+    find_lex $P439, "$/"
     find_lex $P442, "$/"
-    find_lex $P445, "$/"
-    unless_null $P445, vivify_101
-    $P445 = root_new ['parrot';'Hash']
+    unless_null $P442, vivify_98
+    $P442 = root_new ['parrot';'Hash']
+  vivify_98:
+    set $P443, $P442["hexint"]
+    unless_null $P443, vivify_99
+    new $P443, "Undef"
+  vivify_99:
+    if $P443, if_441
+    find_lex $P446, "$/"
+    unless_null $P446, vivify_100
+    $P446 = root_new ['parrot';'Hash']
+  vivify_100:
+    set $P447, $P446["hexints"]
+    unless_null $P447, vivify_101
+    $P447 = root_new ['parrot';'Hash']
   vivify_101:
-    set $P446, $P445["octint"]
-    unless_null $P446, vivify_102
-    new $P446, "Undef"
+    set $P448, $P447["hexint"]
+    unless_null $P448, vivify_102
+    new $P448, "Undef"
   vivify_102:
-    if $P446, if_444
-    find_lex $P449, "$/"
-    unless_null $P449, vivify_103
-    $P449 = root_new ['parrot';'Hash']
+    set $P440, $P448
+    goto if_441_end
+  if_441:
+    find_lex $P444, "$/"
+    unless_null $P444, vivify_103
+    $P444 = root_new ['parrot';'Hash']
   vivify_103:
-    set $P450, $P449["octints"]
-    unless_null $P450, vivify_104
-    $P450 = root_new ['parrot';'Hash']
+    set $P445, $P444["hexint"]
+    unless_null $P445, vivify_104
+    new $P445, "Undef"
   vivify_104:
-    set $P451, $P450["octint"]
-    unless_null $P451, vivify_105
-    new $P451, "Undef"
-  vivify_105:
-    set $P443, $P451
-    goto if_444_end
-  if_444:
-    find_lex $P447, "$/"
-    unless_null $P447, vivify_106
-    $P447 = root_new ['parrot';'Hash']
-  vivify_106:
-    set $P448, $P447["octint"]
-    unless_null $P448, vivify_107
-    new $P448, "Undef"
-  vivify_107:
-    set $P443, $P448
-  if_444_end:
-    $P452 = "ints_to_string"($P443)
-    $P453 = $P442."!make"($P452)
-.annotate "line", 166
-    .return ($P453)
-  control_439:
+    set $P440, $P445
+  if_441_end:
+    $P449 = "ints_to_string"($P440)
+    $P450 = $P439."!make"($P449)
+.annotate "line", 164
+    .return ($P450)
+  control_436:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P454, exception, "payload"
-    .return ($P454)
+    getattribute $P451, exception, "payload"
+    .return ($P451)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<chr>"  :subid("41_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_458
-.annotate "line", 170
-    new $P457, 'ExceptionHandler'
-    set_addr $P457, control_456
-    $P457."handle_types"(58)
-    push_eh $P457
+.sub "quote_escape:sym<oct>"  :subid("42_1271336380.06238") :method :outer("11_1271336380.06238")
+    .param pmc param_455
+.annotate "line", 168
+    new $P454, 'ExceptionHandler'
+    set_addr $P454, control_453
+    $P454."handle_types"(58)
+    push_eh $P454
     .lex "self", self
-    .lex "$/", param_458
-.annotate "line", 171
+    .lex "$/", param_455
+.annotate "line", 169
+    find_lex $P456, "$/"
     find_lex $P459, "$/"
-    find_lex $P460, "$/"
-    unless_null $P460, vivify_108
-    $P460 = root_new ['parrot';'Hash']
+    unless_null $P459, vivify_105
+    $P459 = root_new ['parrot';'Hash']
+  vivify_105:
+    set $P460, $P459["octint"]
+    unless_null $P460, vivify_106
+    new $P460, "Undef"
+  vivify_106:
+    if $P460, if_458
+    find_lex $P463, "$/"
+    unless_null $P463, vivify_107
+    $P463 = root_new ['parrot';'Hash']
+  vivify_107:
+    set $P464, $P463["octints"]
+    unless_null $P464, vivify_108
+    $P464 = root_new ['parrot';'Hash']
   vivify_108:
-    set $P461, $P460["charspec"]
-    unless_null $P461, vivify_109
-    new $P461, "Undef"
+    set $P465, $P464["octint"]
+    unless_null $P465, vivify_109
+    new $P465, "Undef"
   vivify_109:
-    $P462 = $P461."ast"()
-    $P463 = $P459."!make"($P462)
-.annotate "line", 170
-    .return ($P463)
-  control_456:
+    set $P457, $P465
+    goto if_458_end
+  if_458:
+    find_lex $P461, "$/"
+    unless_null $P461, vivify_110
+    $P461 = root_new ['parrot';'Hash']
+  vivify_110:
+    set $P462, $P461["octint"]
+    unless_null $P462, vivify_111
+    new $P462, "Undef"
+  vivify_111:
+    set $P457, $P462
+  if_458_end:
+    $P466 = "ints_to_string"($P457)
+    $P467 = $P456."!make"($P466)
+.annotate "line", 168
+    .return ($P467)
+  control_453:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P464, exception, "payload"
-    .return ($P464)
+    getattribute $P468, exception, "payload"
+    .return ($P468)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "charname"  :subid("42_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_468
-.annotate "line", 174
-    new $P467, 'ExceptionHandler'
-    set_addr $P467, control_466
-    $P467."handle_types"(58)
-    push_eh $P467
+.sub "quote_escape:sym<chr>"  :subid("43_1271336380.06238") :method :outer("11_1271336380.06238")
+    .param pmc param_472
+.annotate "line", 172
+    new $P471, 'ExceptionHandler'
+    set_addr $P471, control_470
+    $P471."handle_types"(58)
+    push_eh $P471
     .lex "self", self
-    .lex "$/", param_468
-.annotate "line", 175
-    new $P469, "Undef"
-    .lex "$codepoint", $P469
-.annotate "line", 176
-    find_lex $P472, "$/"
-    unless_null $P472, vivify_110
-    $P472 = root_new ['parrot';'Hash']
-  vivify_110:
-    set $P473, $P472["integer"]
-    unless_null $P473, vivify_111
-    new $P473, "Undef"
-  vivify_111:
-    if $P473, if_471
-.annotate "line", 177
- $P477 = new ['CodeString'] 
-    find_lex $P478, "$/"
-    set $S479, $P478
-    $P480 = $P477."charname_to_ord"($S479)
-    set $P470, $P480
-.annotate "line", 176
-    goto if_471_end
-  if_471:
+    .lex "$/", param_472
+.annotate "line", 173
+    find_lex $P473, "$/"
     find_lex $P474, "$/"
     unless_null $P474, vivify_112
     $P474 = root_new ['parrot';'Hash']
   vivify_112:
-    set $P475, $P474["integer"]
+    set $P475, $P474["charspec"]
     unless_null $P475, vivify_113
     new $P475, "Undef"
   vivify_113:
     $P476 = $P475."ast"()
-    set $P470, $P476
-  if_471_end:
-    store_lex "$codepoint", $P470
-.annotate "line", 178
-    find_lex $P482, "$codepoint"
-    set $N483, $P482
-    islt $I484, $N483, 0.0
-    unless $I484, if_481_end
-    find_lex $P485, "$/"
-    $P486 = $P485."CURSOR"()
-    new $P487, 'String'
-    set $P487, "Unrecognized character name "
-    find_lex $P488, "$/"
-    concat $P489, $P487, $P488
-    $P486."panic"($P489)
-  if_481_end:
-.annotate "line", 179
-    find_lex $P490, "$/"
-    find_lex $P491, "$codepoint"
-    set $I492, $P491
-    chr $S493, $I492
-    $P494 = $P490."!make"($S493)
-.annotate "line", 174
-    .return ($P494)
-  control_466:
+    $P477 = $P473."!make"($P476)
+.annotate "line", 172
+    .return ($P477)
+  control_470:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P495, exception, "payload"
-    .return ($P495)
+    getattribute $P478, exception, "payload"
+    .return ($P478)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "charnames"  :subid("43_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_499
-.annotate "line", 182
-    .const 'Sub' $P508 = "44_1267204685.44293" 
-    capture_lex $P508
-    new $P498, 'ExceptionHandler'
-    set_addr $P498, control_497
-    $P498."handle_types"(58)
-    push_eh $P498
+.sub "quote_escape:sym<0>"  :subid("44_1271336380.06238") :method :outer("11_1271336380.06238")
+    .param pmc param_482
+.annotate "line", 176
+    new $P481, 'ExceptionHandler'
+    set_addr $P481, control_480
+    $P481."handle_types"(58)
+    push_eh $P481
     .lex "self", self
-    .lex "$/", param_499
-.annotate "line", 183
-    new $P500, "Undef"
-    .lex "$str", $P500
-    new $P501, "String"
-    assign $P501, ""
-    store_lex "$str", $P501
-.annotate "line", 184
-    find_lex $P503, "$/"
-    unless_null $P503, vivify_114
-    $P503 = root_new ['parrot';'Hash']
-  vivify_114:
-    set $P504, $P503["charname"]
-    unless_null $P504, vivify_115
-    new $P504, "Undef"
-  vivify_115:
-    defined $I505, $P504
-    unless $I505, for_undef_116
-    iter $P502, $P504
-    new $P515, 'ExceptionHandler'
-    set_addr $P515, loop514_handler
-    $P515."handle_types"(65, 67, 66)
-    push_eh $P515
-  loop514_test:
-    unless $P502, loop514_done
-    shift $P506, $P502
-  loop514_redo:
-    .const 'Sub' $P508 = "44_1267204685.44293" 
-    capture_lex $P508
-    $P508($P506)
-  loop514_next:
-    goto loop514_test
-  loop514_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P516, exception, 'type'
-    eq $P516, 65, loop514_next
-    eq $P516, 67, loop514_redo
-  loop514_done:
-    pop_eh 
-  for_undef_116:
-.annotate "line", 185
-    find_lex $P517, "$/"
-    find_lex $P518, "$str"
-    $P519 = $P517."!make"($P518)
-.annotate "line", 182
-    .return ($P519)
-  control_497:
+    .lex "$/", param_482
+.annotate "line", 177
+    find_lex $P483, "$/"
+    $P484 = $P483."!make"(unicode:"\x{0}")
+.annotate "line", 176
+    .return ($P484)
+  control_480:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P520, exception, "payload"
-    .return ($P520)
+    getattribute $P485, exception, "payload"
+    .return ($P485)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block507"  :anon :subid("44_1267204685.44293") :outer("43_1267204685.44293")
-    .param pmc param_509
-.annotate "line", 184
-    .lex "$_", param_509
-    find_lex $P510, "$str"
-    find_lex $P511, "$_"
-    $S512 = $P511."ast"()
-    concat $P513, $P510, $S512
-    store_lex "$str", $P513
-    .return ($P513)
+.sub "quote_escape:sym<misc>"  :subid("45_1271336380.06238") :method :outer("11_1271336380.06238")
+    .param pmc param_489
+.annotate "line", 180
+    new $P488, 'ExceptionHandler'
+    set_addr $P488, control_487
+    $P488."handle_types"(58)
+    push_eh $P488
+    .lex "self", self
+    .lex "$/", param_489
+.annotate "line", 181
+    find_lex $P490, "$/"
+    find_lex $P493, "$/"
+    unless_null $P493, vivify_114
+    $P493 = root_new ['parrot';'Hash']
+  vivify_114:
+    set $P494, $P493["textq"]
+    unless_null $P494, vivify_115
+    new $P494, "Undef"
+  vivify_115:
+    if $P494, if_492
+    find_lex $P500, "$/"
+    unless_null $P500, vivify_116
+    $P500 = root_new ['parrot';'Hash']
+  vivify_116:
+    set $P501, $P500["textqq"]
+    unless_null $P501, vivify_117
+    new $P501, "Undef"
+  vivify_117:
+    $P502 = $P501."Str"()
+    set $P491, $P502
+    goto if_492_end
+  if_492:
+    new $P495, "String"
+    assign $P495, "\\"
+    find_lex $P496, "$/"
+    unless_null $P496, vivify_118
+    $P496 = root_new ['parrot';'Hash']
+  vivify_118:
+    set $P497, $P496["textq"]
+    unless_null $P497, vivify_119
+    new $P497, "Undef"
+  vivify_119:
+    $S498 = $P497."Str"()
+    concat $P499, $P495, $S498
+    set $P491, $P499
+  if_492_end:
+    $P503 = $P490."!make"($P491)
+.annotate "line", 180
+    .return ($P503)
+  control_487:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P504, exception, "payload"
+    .return ($P504)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "charspec"  :subid("45_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_524
-.annotate "line", 188
-    new $P523, 'ExceptionHandler'
-    set_addr $P523, control_522
-    $P523."handle_types"(58)
-    push_eh $P523
+.sub "charname"  :subid("46_1271336380.06238") :method :outer("11_1271336380.06238")
+    .param pmc param_508
+.annotate "line", 184
+    new $P507, 'ExceptionHandler'
+    set_addr $P507, control_506
+    $P507."handle_types"(58)
+    push_eh $P507
     .lex "self", self
-    .lex "$/", param_524
-.annotate "line", 189
+    .lex "$/", param_508
+.annotate "line", 185
+    new $P509, "Undef"
+    .lex "$codepoint", $P509
+.annotate "line", 186
+    find_lex $P512, "$/"
+    unless_null $P512, vivify_120
+    $P512 = root_new ['parrot';'Hash']
+  vivify_120:
+    set $P513, $P512["integer"]
+    unless_null $P513, vivify_121
+    new $P513, "Undef"
+  vivify_121:
+    if $P513, if_511
+.annotate "line", 187
+ $P517 = new ['CodeString'] 
+    find_lex $P518, "$/"
+    set $S519, $P518
+    $P520 = $P517."charname_to_ord"($S519)
+    set $P510, $P520
+.annotate "line", 186
+    goto if_511_end
+  if_511:
+    find_lex $P514, "$/"
+    unless_null $P514, vivify_122
+    $P514 = root_new ['parrot';'Hash']
+  vivify_122:
+    set $P515, $P514["integer"]
+    unless_null $P515, vivify_123
+    new $P515, "Undef"
+  vivify_123:
+    $P516 = $P515."ast"()
+    set $P510, $P516
+  if_511_end:
+    store_lex "$codepoint", $P510
+.annotate "line", 188
+    find_lex $P522, "$codepoint"
+    set $N523, $P522
+    islt $I524, $N523, 0.0
+    unless $I524, if_521_end
     find_lex $P525, "$/"
+    $P526 = $P525."CURSOR"()
+    new $P527, 'String'
+    set $P527, "Unrecognized character name "
     find_lex $P528, "$/"
-    unless_null $P528, vivify_117
-    $P528 = root_new ['parrot';'Hash']
-  vivify_117:
-    set $P529, $P528["charnames"]
-    unless_null $P529, vivify_118
-    new $P529, "Undef"
-  vivify_118:
-    if $P529, if_527
-    find_lex $P533, "$/"
-    $I534 = "string_to_int"($P533, 10)
-    chr $S535, $I534
-    new $P526, 'String'
-    set $P526, $S535
-    goto if_527_end
-  if_527:
+    concat $P529, $P527, $P528
+    $P526."panic"($P529)
+  if_521_end:
+.annotate "line", 189
     find_lex $P530, "$/"
-    unless_null $P530, vivify_119
-    $P530 = root_new ['parrot';'Hash']
-  vivify_119:
-    set $P531, $P530["charnames"]
-    unless_null $P531, vivify_120
-    new $P531, "Undef"
-  vivify_120:
-    $P532 = $P531."ast"()
-    set $P526, $P532
-  if_527_end:
-    $P536 = $P525."!make"($P526)
-.annotate "line", 188
-    .return ($P536)
-  control_522:
+    find_lex $P531, "$codepoint"
+    set $I532, $P531
+    chr $S533, $I532
+    $P534 = $P530."!make"($S533)
+.annotate "line", 184
+    .return ($P534)
+  control_506:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P535, exception, "payload"
+    .return ($P535)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.sub "charnames"  :subid("47_1271336380.06238") :method :outer("11_1271336380.06238")
+    .param pmc param_539
+.annotate "line", 192
+    .const 'Sub' $P548 = "48_1271336380.06238" 
+    capture_lex $P548
+    new $P538, 'ExceptionHandler'
+    set_addr $P538, control_537
+    $P538."handle_types"(58)
+    push_eh $P538
+    .lex "self", self
+    .lex "$/", param_539
+.annotate "line", 193
+    new $P540, "Undef"
+    .lex "$str", $P540
+    new $P541, "String"
+    assign $P541, ""
+    store_lex "$str", $P541
+.annotate "line", 194
+    find_lex $P543, "$/"
+    unless_null $P543, vivify_124
+    $P543 = root_new ['parrot';'Hash']
+  vivify_124:
+    set $P544, $P543["charname"]
+    unless_null $P544, vivify_125
+    new $P544, "Undef"
+  vivify_125:
+    defined $I545, $P544
+    unless $I545, for_undef_126
+    iter $P542, $P544
+    new $P555, 'ExceptionHandler'
+    set_addr $P555, loop554_handler
+    $P555."handle_types"(65, 67, 66)
+    push_eh $P555
+  loop554_test:
+    unless $P542, loop554_done
+    shift $P546, $P542
+  loop554_redo:
+    .const 'Sub' $P548 = "48_1271336380.06238" 
+    capture_lex $P548
+    $P548($P546)
+  loop554_next:
+    goto loop554_test
+  loop554_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P556, exception, 'type'
+    eq $P556, 65, loop554_next
+    eq $P556, 67, loop554_redo
+  loop554_done:
+    pop_eh 
+  for_undef_126:
+.annotate "line", 195
+    find_lex $P557, "$/"
+    find_lex $P558, "$str"
+    $P559 = $P557."!make"($P558)
+.annotate "line", 192
+    .return ($P559)
+  control_537:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P560, exception, "payload"
+    .return ($P560)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.sub "_block547"  :anon :subid("48_1271336380.06238") :outer("47_1271336380.06238")
+    .param pmc param_549
+.annotate "line", 194
+    .lex "$_", param_549
+    find_lex $P550, "$str"
+    find_lex $P551, "$_"
+    $S552 = $P551."ast"()
+    concat $P553, $P550, $S552
+    store_lex "$str", $P553
+    .return ($P553)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.sub "charspec"  :subid("49_1271336380.06238") :method :outer("11_1271336380.06238")
+    .param pmc param_564
+.annotate "line", 198
+    new $P563, 'ExceptionHandler'
+    set_addr $P563, control_562
+    $P563."handle_types"(58)
+    push_eh $P563
+    .lex "self", self
+    .lex "$/", param_564
+.annotate "line", 199
+    find_lex $P565, "$/"
+    find_lex $P568, "$/"
+    unless_null $P568, vivify_127
+    $P568 = root_new ['parrot';'Hash']
+  vivify_127:
+    set $P569, $P568["charnames"]
+    unless_null $P569, vivify_128
+    new $P569, "Undef"
+  vivify_128:
+    if $P569, if_567
+    find_lex $P573, "$/"
+    $I574 = "string_to_int"($P573, 10)
+    chr $S575, $I574
+    new $P566, 'String'
+    set $P566, $S575
+    goto if_567_end
+  if_567:
+    find_lex $P570, "$/"
+    unless_null $P570, vivify_129
+    $P570 = root_new ['parrot';'Hash']
+  vivify_129:
+    set $P571, $P570["charnames"]
+    unless_null $P571, vivify_130
+    new $P571, "Undef"
+  vivify_130:
+    $P572 = $P571."ast"()
+    set $P566, $P572
+  if_567_end:
+    $P576 = $P565."!make"($P566)
+.annotate "line", 198
+    .return ($P576)
+  control_562:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P537, exception, "payload"
-    .return ($P537)
+    getattribute $P577, exception, "payload"
+    .return ($P577)
 .end
 
 ### .include 'gen/hllcompiler.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204686.55407")
+.sub "_block11"  :anon :subid("10_1271336381.18625")
 .annotate "line", 0
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     capture_lex $P14
@@ -5921,9 +6537,9 @@
 
 
 .namespace []
-.sub "" :load :init :subid("post25") :outer("10_1267204686.55407")
+.sub "" :load :init :subid("post25") :outer("10_1271336381.18625")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204686.55407" 
+    .const 'Sub' $P12 = "10_1271336381.18625" 
     .local pmc block
     set block, $P12
 .annotate "line", 2
@@ -5937,28 +6553,28 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block13"  :subid("11_1267204686.55407") :outer("10_1267204686.55407")
+.sub "_block13"  :subid("11_1271336381.18625") :outer("10_1271336381.18625")
 .annotate "line", 6
-    .const 'Sub' $P187 = "20_1267204686.55407" 
+    .const 'Sub' $P187 = "20_1271336381.18625" 
     capture_lex $P187
-    .const 'Sub' $P152 = "18_1267204686.55407" 
+    .const 'Sub' $P152 = "18_1271336381.18625" 
     capture_lex $P152
-    .const 'Sub' $P137 = "17_1267204686.55407" 
+    .const 'Sub' $P137 = "17_1271336381.18625" 
     capture_lex $P137
-    .const 'Sub' $P121 = "16_1267204686.55407" 
+    .const 'Sub' $P121 = "16_1271336381.18625" 
     capture_lex $P121
-    .const 'Sub' $P32 = "13_1267204686.55407" 
+    .const 'Sub' $P32 = "13_1271336381.18625" 
     capture_lex $P32
-    .const 'Sub' $P15 = "12_1267204686.55407" 
+    .const 'Sub' $P15 = "12_1271336381.18625" 
     capture_lex $P15
 .annotate "line", 14
-    .const 'Sub' $P15 = "12_1267204686.55407" 
+    .const 'Sub' $P15 = "12_1271336381.18625" 
     capture_lex $P15
     .lex "value_type", $P15
 .annotate "line", 10
     find_lex $P31, "value_type"
 .annotate "line", 69
-    .const 'Sub' $P187 = "20_1267204686.55407" 
+    .const 'Sub' $P187 = "20_1271336381.18625" 
     capture_lex $P187
 .annotate "line", 6
     .return ($P187)
@@ -5966,7 +6582,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "" :load :init :subid("post26") :outer("11_1267204686.55407")
+.sub "" :load :init :subid("post26") :outer("11_1271336381.18625")
 .annotate "line", 6
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     .local pmc block
@@ -5978,7 +6594,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "value_type"  :subid("12_1267204686.55407") :outer("11_1267204686.55407")
+.sub "value_type"  :subid("12_1271336381.18625") :outer("11_1271336381.18625")
     .param pmc param_18
 .annotate "line", 14
     new $P17, 'ExceptionHandler'
@@ -6022,15 +6638,15 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "get_exports"  :subid("13_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "get_exports"  :subid("13_1271336381.18625") :method :outer("11_1271336381.18625")
     .param pmc param_35
     .param pmc param_38 :slurpy
     .param pmc param_36 :optional :named("tagset")
     .param int has_param_36 :opt_flag
 .annotate "line", 20
-    .const 'Sub' $P104 = "15_1267204686.55407" 
+    .const 'Sub' $P104 = "15_1271336381.18625" 
     capture_lex $P104
-    .const 'Sub' $P83 = "14_1267204686.55407" 
+    .const 'Sub' $P83 = "14_1271336381.18625" 
     capture_lex $P83
     new $P34, 'ExceptionHandler'
     set_addr $P34, control_33
@@ -6136,7 +6752,7 @@
     unless $P99, loop116_done
     shift $P102, $P99
   loop116_redo:
-    .const 'Sub' $P104 = "15_1267204686.55407" 
+    .const 'Sub' $P104 = "15_1271336381.18625" 
     capture_lex $P104
     $P104($P102)
   loop116_next:
@@ -6166,7 +6782,7 @@
     unless $P78, loop96_done
     shift $P81, $P78
   loop96_redo:
-    .const 'Sub' $P83 = "14_1267204686.55407" 
+    .const 'Sub' $P83 = "14_1271336381.18625" 
     capture_lex $P83
     $P83($P81)
   loop96_next:
@@ -6194,7 +6810,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block103"  :anon :subid("15_1267204686.55407") :outer("13_1267204686.55407")
+.sub "_block103"  :anon :subid("15_1271336381.18625") :outer("13_1271336381.18625")
     .param pmc param_106
 .annotate "line", 40
     new $P105, "Undef"
@@ -6226,7 +6842,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block82"  :anon :subid("14_1267204686.55407") :outer("13_1267204686.55407")
+.sub "_block82"  :anon :subid("14_1271336381.18625") :outer("13_1271336381.18625")
     .param pmc param_85
 .annotate "line", 34
     new $P84, "Undef"
@@ -6265,7 +6881,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "get_module"  :subid("16_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "get_module"  :subid("16_1271336381.18625") :method :outer("11_1271336381.18625")
     .param pmc param_124
 .annotate "line", 47
     new $P123, 'ExceptionHandler'
@@ -6305,7 +6921,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "language"  :subid("17_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "language"  :subid("17_1271336381.18625") :method :outer("11_1271336381.18625")
     .param pmc param_140 :optional
     .param int has_param_140 :opt_flag
 .annotate "line", 53
@@ -6349,10 +6965,10 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "load_module"  :subid("18_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "load_module"  :subid("18_1271336381.18625") :method :outer("11_1271336381.18625")
     .param pmc param_155
 .annotate "line", 61
-    .const 'Sub' $P165 = "19_1267204686.55407" 
+    .const 'Sub' $P165 = "19_1271336381.18625" 
     capture_lex $P165
     new $P154, 'ExceptionHandler'
     set_addr $P154, control_153
@@ -6379,7 +6995,7 @@
     assign $P163, 0
     store_lex "$loaded", $P163
 .annotate "line", 64
-    .const 'Sub' $P165 = "19_1267204686.55407" 
+    .const 'Sub' $P165 = "19_1271336381.18625" 
     capture_lex $P165
     $P165()
 .annotate "line", 65
@@ -6408,7 +7024,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block164"  :anon :subid("19_1267204686.55407") :outer("18_1267204686.55407")
+.sub "_block164"  :anon :subid("19_1271336381.18625") :outer("18_1271336381.18625")
 .annotate "line", 64
     new $P172, 'ExceptionHandler'
     set_addr $P172, control_171
@@ -6441,11 +7057,11 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "import"  :subid("20_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "import"  :subid("20_1271336381.18625") :method :outer("11_1271336381.18625")
     .param pmc param_190
     .param pmc param_191
 .annotate "line", 69
-    .const 'Sub' $P197 = "21_1267204686.55407" 
+    .const 'Sub' $P197 = "21_1271336381.18625" 
     capture_lex $P197
     new $P189, 'ExceptionHandler'
     set_addr $P189, control_188
@@ -6467,7 +7083,7 @@
     unless $P192, loop278_done
     shift $P195, $P192
   loop278_redo:
-    .const 'Sub' $P197 = "21_1267204686.55407" 
+    .const 'Sub' $P197 = "21_1271336381.18625" 
     capture_lex $P197
     $P197($P195)
   loop278_next:
@@ -6492,14 +7108,14 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block196"  :anon :subid("21_1267204686.55407") :outer("20_1267204686.55407")
+.sub "_block196"  :anon :subid("21_1271336381.18625") :outer("20_1271336381.18625")
     .param pmc param_200
 .annotate "line", 70
-    .const 'Sub' $P267 = "24_1267204686.55407" 
+    .const 'Sub' $P267 = "24_1271336381.18625" 
     capture_lex $P267
-    .const 'Sub' $P247 = "23_1267204686.55407" 
+    .const 'Sub' $P247 = "23_1271336381.18625" 
     capture_lex $P247
-    .const 'Sub' $P218 = "22_1267204686.55407" 
+    .const 'Sub' $P218 = "22_1271336381.18625" 
     capture_lex $P218
 .annotate "line", 71
     new $P198, "Undef"
@@ -6547,7 +7163,7 @@
     unless $P262, loop275_done
     shift $P265, $P262
   loop275_redo:
-    .const 'Sub' $P267 = "24_1267204686.55407" 
+    .const 'Sub' $P267 = "24_1271336381.18625" 
     capture_lex $P267
     $P267($P265)
   loop275_next:
@@ -6579,7 +7195,7 @@
     unless $P242, loop259_done
     shift $P245, $P242
   loop259_redo:
-    .const 'Sub' $P247 = "23_1267204686.55407" 
+    .const 'Sub' $P247 = "23_1271336381.18625" 
     capture_lex $P247
     $P247($P245)
   loop259_next:
@@ -6613,7 +7229,7 @@
     unless $P213, loop231_done
     shift $P216, $P213
   loop231_redo:
-    .const 'Sub' $P218 = "22_1267204686.55407" 
+    .const 'Sub' $P218 = "22_1271336381.18625" 
     capture_lex $P218
     $P218($P216)
   loop231_next:
@@ -6636,7 +7252,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block266"  :anon :subid("24_1267204686.55407") :outer("21_1267204686.55407")
+.sub "_block266"  :anon :subid("24_1271336381.18625") :outer("21_1271336381.18625")
     .param pmc param_268
 .annotate "line", 80
     .lex "$_", param_268
@@ -6656,7 +7272,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block246"  :anon :subid("23_1267204686.55407") :outer("21_1267204686.55407")
+.sub "_block246"  :anon :subid("23_1271336381.18625") :outer("21_1271336381.18625")
     .param pmc param_248
 .annotate "line", 77
     .lex "$_", param_248
@@ -6676,7 +7292,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block217"  :anon :subid("22_1267204686.55407") :outer("21_1267204686.55407")
+.sub "_block217"  :anon :subid("22_1271336381.18625") :outer("21_1271336381.18625")
     .param pmc param_219
 .annotate "line", 74
     .lex "$_", param_219

Modified: branches/avl_string_cache/ext/nqp-rx/src/stage0/NQP-s0.pir
==============================================================================
--- branches/avl_string_cache/ext/nqp-rx/src/stage0/NQP-s0.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/ext/nqp-rx/src/stage0/NQP-s0.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -15,387 +15,387 @@
 ### .include 'gen/nqp-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204702.05125")
+.sub "_block11"  :anon :subid("10_1271336396.90314")
 .annotate "line", 0
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
 .annotate "line", 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
-    $P1296 = $P14()
+    $P1299 = $P14()
 .annotate "line", 1
-    .return ($P1296)
+    .return ($P1299)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post331") :outer("10_1267204702.05125")
+.sub "" :load :init :subid("post331") :outer("10_1271336396.90314")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204702.05125" 
+    .const 'Sub' $P12 = "10_1271336396.90314" 
     .local pmc block
     set block, $P12
-    $P1297 = get_root_global ["parrot"], "P6metaclass"
-    $P1297."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
+    $P1300 = get_root_global ["parrot"], "P6metaclass"
+    $P1300."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block13"  :subid("11_1267204702.05125") :outer("10_1267204702.05125")
+.sub "_block13"  :subid("11_1271336396.90314") :outer("10_1271336396.90314")
 .annotate "line", 4
-    get_hll_global $P1240, ["NQP";"Regex"], "_block1239" 
-    capture_lex $P1240
-    .const 'Sub' $P1226 = "317_1267204702.05125" 
-    capture_lex $P1226
-    .const 'Sub' $P1220 = "315_1267204702.05125" 
-    capture_lex $P1220
-    .const 'Sub' $P1214 = "313_1267204702.05125" 
-    capture_lex $P1214
-    .const 'Sub' $P1207 = "311_1267204702.05125" 
-    capture_lex $P1207
-    .const 'Sub' $P1200 = "309_1267204702.05125" 
-    capture_lex $P1200
-    .const 'Sub' $P1193 = "307_1267204702.05125" 
-    capture_lex $P1193
-    .const 'Sub' $P1186 = "305_1267204702.05125" 
-    capture_lex $P1186
-    .const 'Sub' $P1180 = "303_1267204702.05125" 
-    capture_lex $P1180
-    .const 'Sub' $P1173 = "301_1267204702.05125" 
-    capture_lex $P1173
-    .const 'Sub' $P1166 = "299_1267204702.05125" 
-    capture_lex $P1166
-    .const 'Sub' $P1159 = "297_1267204702.05125" 
-    capture_lex $P1159
-    .const 'Sub' $P1152 = "295_1267204702.05125" 
-    capture_lex $P1152
-    .const 'Sub' $P1145 = "293_1267204702.05125" 
-    capture_lex $P1145
-    .const 'Sub' $P1138 = "291_1267204702.05125" 
-    capture_lex $P1138
-    .const 'Sub' $P1131 = "289_1267204702.05125" 
-    capture_lex $P1131
-    .const 'Sub' $P1124 = "287_1267204702.05125" 
-    capture_lex $P1124
-    .const 'Sub' $P1117 = "285_1267204702.05125" 
-    capture_lex $P1117
-    .const 'Sub' $P1110 = "283_1267204702.05125" 
-    capture_lex $P1110
-    .const 'Sub' $P1103 = "281_1267204702.05125" 
-    capture_lex $P1103
-    .const 'Sub' $P1096 = "279_1267204702.05125" 
-    capture_lex $P1096
-    .const 'Sub' $P1089 = "277_1267204702.05125" 
-    capture_lex $P1089
-    .const 'Sub' $P1082 = "275_1267204702.05125" 
-    capture_lex $P1082
-    .const 'Sub' $P1075 = "273_1267204702.05125" 
-    capture_lex $P1075
-    .const 'Sub' $P1068 = "271_1267204702.05125" 
-    capture_lex $P1068
-    .const 'Sub' $P1061 = "269_1267204702.05125" 
-    capture_lex $P1061
-    .const 'Sub' $P1054 = "267_1267204702.05125" 
-    capture_lex $P1054
-    .const 'Sub' $P1047 = "265_1267204702.05125" 
-    capture_lex $P1047
-    .const 'Sub' $P1040 = "263_1267204702.05125" 
-    capture_lex $P1040
-    .const 'Sub' $P1033 = "261_1267204702.05125" 
-    capture_lex $P1033
-    .const 'Sub' $P1026 = "259_1267204702.05125" 
-    capture_lex $P1026
-    .const 'Sub' $P1019 = "257_1267204702.05125" 
-    capture_lex $P1019
-    .const 'Sub' $P1012 = "255_1267204702.05125" 
-    capture_lex $P1012
-    .const 'Sub' $P1005 = "253_1267204702.05125" 
-    capture_lex $P1005
-    .const 'Sub' $P998 = "251_1267204702.05125" 
-    capture_lex $P998
-    .const 'Sub' $P992 = "249_1267204702.05125" 
-    capture_lex $P992
-    .const 'Sub' $P985 = "247_1267204702.05125" 
-    capture_lex $P985
-    .const 'Sub' $P978 = "245_1267204702.05125" 
-    capture_lex $P978
-    .const 'Sub' $P971 = "243_1267204702.05125" 
-    capture_lex $P971
-    .const 'Sub' $P964 = "241_1267204702.05125" 
-    capture_lex $P964
-    .const 'Sub' $P957 = "239_1267204702.05125" 
-    capture_lex $P957
-    .const 'Sub' $P950 = "237_1267204702.05125" 
-    capture_lex $P950
-    .const 'Sub' $P943 = "235_1267204702.05125" 
-    capture_lex $P943
-    .const 'Sub' $P937 = "233_1267204702.05125" 
-    capture_lex $P937
-    .const 'Sub' $P931 = "231_1267204702.05125" 
-    capture_lex $P931
-    .const 'Sub' $P926 = "229_1267204702.05125" 
-    capture_lex $P926
-    .const 'Sub' $P920 = "227_1267204702.05125" 
-    capture_lex $P920
-    .const 'Sub' $P914 = "225_1267204702.05125" 
-    capture_lex $P914
-    .const 'Sub' $P909 = "223_1267204702.05125" 
-    capture_lex $P909
-    .const 'Sub' $P904 = "221_1267204702.05125" 
-    capture_lex $P904
-    .const 'Sub' $P897 = "219_1267204702.05125" 
-    capture_lex $P897
-    .const 'Sub' $P889 = "217_1267204702.05125" 
-    capture_lex $P889
-    .const 'Sub' $P884 = "215_1267204702.05125" 
-    capture_lex $P884
-    .const 'Sub' $P879 = "213_1267204702.05125" 
-    capture_lex $P879
-    .const 'Sub' $P874 = "211_1267204702.05125" 
-    capture_lex $P874
-    .const 'Sub' $P866 = "209_1267204702.05125" 
-    capture_lex $P866
-    .const 'Sub' $P858 = "207_1267204702.05125" 
-    capture_lex $P858
-    .const 'Sub' $P853 = "205_1267204702.05125" 
-    capture_lex $P853
-    .const 'Sub' $P848 = "203_1267204702.05125" 
-    capture_lex $P848
-    .const 'Sub' $P842 = "201_1267204702.05125" 
-    capture_lex $P842
-    .const 'Sub' $P836 = "199_1267204702.05125" 
-    capture_lex $P836
-    .const 'Sub' $P830 = "197_1267204702.05125" 
-    capture_lex $P830
-    .const 'Sub' $P824 = "195_1267204702.05125" 
-    capture_lex $P824
-    .const 'Sub' $P818 = "193_1267204702.05125" 
-    capture_lex $P818
-    .const 'Sub' $P813 = "191_1267204702.05125" 
-    capture_lex $P813
-    .const 'Sub' $P808 = "189_1267204702.05125" 
-    capture_lex $P808
-    .const 'Sub' $P795 = "185_1267204702.05125" 
-    capture_lex $P795
-    .const 'Sub' $P787 = "183_1267204702.05125" 
-    capture_lex $P787
-    .const 'Sub' $P781 = "181_1267204702.05125" 
-    capture_lex $P781
-    .const 'Sub' $P774 = "179_1267204702.05125" 
-    capture_lex $P774
-    .const 'Sub' $P768 = "177_1267204702.05125" 
-    capture_lex $P768
-    .const 'Sub' $P760 = "175_1267204702.05125" 
-    capture_lex $P760
-    .const 'Sub' $P752 = "173_1267204702.05125" 
-    capture_lex $P752
-    .const 'Sub' $P746 = "171_1267204702.05125" 
-    capture_lex $P746
-    .const 'Sub' $P740 = "169_1267204702.05125" 
-    capture_lex $P740
-    .const 'Sub' $P725 = "165_1267204702.05125" 
-    capture_lex $P725
-    .const 'Sub' $P688 = "163_1267204702.05125" 
-    capture_lex $P688
-    .const 'Sub' $P680 = "161_1267204702.05125" 
-    capture_lex $P680
-    .const 'Sub' $P674 = "159_1267204702.05125" 
-    capture_lex $P674
-    .const 'Sub' $P664 = "157_1267204702.05125" 
-    capture_lex $P664
-    .const 'Sub' $P649 = "155_1267204702.05125" 
-    capture_lex $P649
-    .const 'Sub' $P640 = "153_1267204702.05125" 
-    capture_lex $P640
-    .const 'Sub' $P621 = "151_1267204702.05125" 
-    capture_lex $P621
-    .const 'Sub' $P597 = "149_1267204702.05125" 
-    capture_lex $P597
-    .const 'Sub' $P590 = "147_1267204702.05125" 
-    capture_lex $P590
-    .const 'Sub' $P583 = "145_1267204702.05125" 
-    capture_lex $P583
-    .const 'Sub' $P573 = "141_1267204702.05125" 
-    capture_lex $P573
-    .const 'Sub' $P562 = "139_1267204702.05125" 
-    capture_lex $P562
-    .const 'Sub' $P555 = "137_1267204702.05125" 
-    capture_lex $P555
-    .const 'Sub' $P548 = "135_1267204702.05125" 
-    capture_lex $P548
-    .const 'Sub' $P541 = "133_1267204702.05125" 
-    capture_lex $P541
-    .const 'Sub' $P514 = "129_1267204702.05125" 
-    capture_lex $P514
-    .const 'Sub' $P505 = "127_1267204702.05125" 
-    capture_lex $P505
-    .const 'Sub' $P498 = "125_1267204702.05125" 
-    capture_lex $P498
-    .const 'Sub' $P489 = "121_1267204702.05125" 
-    capture_lex $P489
-    .const 'Sub' $P484 = "119_1267204702.05125" 
-    capture_lex $P484
-    .const 'Sub' $P472 = "117_1267204702.05125" 
-    capture_lex $P472
-    .const 'Sub' $P460 = "115_1267204702.05125" 
-    capture_lex $P460
-    .const 'Sub' $P452 = "113_1267204702.05125" 
-    capture_lex $P452
-    .const 'Sub' $P447 = "111_1267204702.05125" 
-    capture_lex $P447
-    .const 'Sub' $P441 = "109_1267204702.05125" 
-    capture_lex $P441
-    .const 'Sub' $P435 = "107_1267204702.05125" 
-    capture_lex $P435
-    .const 'Sub' $P429 = "105_1267204702.05125" 
-    capture_lex $P429
-    .const 'Sub' $P423 = "103_1267204702.05125" 
-    capture_lex $P423
-    .const 'Sub' $P417 = "101_1267204702.05125" 
-    capture_lex $P417
-    .const 'Sub' $P411 = "99_1267204702.05125" 
-    capture_lex $P411
-    .const 'Sub' $P405 = "97_1267204702.05125" 
-    capture_lex $P405
-    .const 'Sub' $P399 = "95_1267204702.05125" 
-    capture_lex $P399
-    .const 'Sub' $P391 = "93_1267204702.05125" 
-    capture_lex $P391
-    .const 'Sub' $P383 = "91_1267204702.05125" 
-    capture_lex $P383
-    .const 'Sub' $P371 = "87_1267204702.05125" 
-    capture_lex $P371
-    .const 'Sub' $P363 = "85_1267204702.05125" 
-    capture_lex $P363
-    .const 'Sub' $P353 = "81_1267204702.05125" 
-    capture_lex $P353
-    .const 'Sub' $P346 = "79_1267204702.05125" 
-    capture_lex $P346
-    .const 'Sub' $P339 = "77_1267204702.05125" 
-    capture_lex $P339
-    .const 'Sub' $P327 = "73_1267204702.05125" 
-    capture_lex $P327
-    .const 'Sub' $P319 = "71_1267204702.05125" 
-    capture_lex $P319
-    .const 'Sub' $P311 = "69_1267204702.05125" 
-    capture_lex $P311
-    .const 'Sub' $P291 = "67_1267204702.05125" 
-    capture_lex $P291
-    .const 'Sub' $P282 = "65_1267204702.05125" 
-    capture_lex $P282
-    .const 'Sub' $P264 = "62_1267204702.05125" 
-    capture_lex $P264
-    .const 'Sub' $P244 = "60_1267204702.05125" 
-    capture_lex $P244
-    .const 'Sub' $P235 = "56_1267204702.05125" 
-    capture_lex $P235
-    .const 'Sub' $P230 = "54_1267204702.05125" 
-    capture_lex $P230
-    .const 'Sub' $P221 = "50_1267204702.05125" 
-    capture_lex $P221
-    .const 'Sub' $P216 = "48_1267204702.05125" 
-    capture_lex $P216
-    .const 'Sub' $P208 = "46_1267204702.05125" 
-    capture_lex $P208
-    .const 'Sub' $P201 = "44_1267204702.05125" 
-    capture_lex $P201
-    .const 'Sub' $P195 = "42_1267204702.05125" 
-    capture_lex $P195
-    .const 'Sub' $P187 = "40_1267204702.05125" 
-    capture_lex $P187
-    .const 'Sub' $P181 = "38_1267204702.05125" 
-    capture_lex $P181
-    .const 'Sub' $P175 = "36_1267204702.05125" 
-    capture_lex $P175
-    .const 'Sub' $P159 = "33_1267204702.05125" 
-    capture_lex $P159
-    .const 'Sub' $P146 = "31_1267204702.05125" 
-    capture_lex $P146
-    .const 'Sub' $P139 = "29_1267204702.05125" 
-    capture_lex $P139
-    .const 'Sub' $P96 = "26_1267204702.05125" 
+    get_hll_global $P1243, ["NQP";"Regex"], "_block1242" 
+    capture_lex $P1243
+    .const 'Sub' $P1229 = "317_1271336396.90314" 
+    capture_lex $P1229
+    .const 'Sub' $P1223 = "315_1271336396.90314" 
+    capture_lex $P1223
+    .const 'Sub' $P1217 = "313_1271336396.90314" 
+    capture_lex $P1217
+    .const 'Sub' $P1210 = "311_1271336396.90314" 
+    capture_lex $P1210
+    .const 'Sub' $P1203 = "309_1271336396.90314" 
+    capture_lex $P1203
+    .const 'Sub' $P1196 = "307_1271336396.90314" 
+    capture_lex $P1196
+    .const 'Sub' $P1189 = "305_1271336396.90314" 
+    capture_lex $P1189
+    .const 'Sub' $P1183 = "303_1271336396.90314" 
+    capture_lex $P1183
+    .const 'Sub' $P1176 = "301_1271336396.90314" 
+    capture_lex $P1176
+    .const 'Sub' $P1169 = "299_1271336396.90314" 
+    capture_lex $P1169
+    .const 'Sub' $P1162 = "297_1271336396.90314" 
+    capture_lex $P1162
+    .const 'Sub' $P1155 = "295_1271336396.90314" 
+    capture_lex $P1155
+    .const 'Sub' $P1148 = "293_1271336396.90314" 
+    capture_lex $P1148
+    .const 'Sub' $P1141 = "291_1271336396.90314" 
+    capture_lex $P1141
+    .const 'Sub' $P1134 = "289_1271336396.90314" 
+    capture_lex $P1134
+    .const 'Sub' $P1127 = "287_1271336396.90314" 
+    capture_lex $P1127
+    .const 'Sub' $P1120 = "285_1271336396.90314" 
+    capture_lex $P1120
+    .const 'Sub' $P1113 = "283_1271336396.90314" 
+    capture_lex $P1113
+    .const 'Sub' $P1106 = "281_1271336396.90314" 
+    capture_lex $P1106
+    .const 'Sub' $P1099 = "279_1271336396.90314" 
+    capture_lex $P1099
+    .const 'Sub' $P1092 = "277_1271336396.90314" 
+    capture_lex $P1092
+    .const 'Sub' $P1085 = "275_1271336396.90314" 
+    capture_lex $P1085
+    .const 'Sub' $P1078 = "273_1271336396.90314" 
+    capture_lex $P1078
+    .const 'Sub' $P1071 = "271_1271336396.90314" 
+    capture_lex $P1071
+    .const 'Sub' $P1064 = "269_1271336396.90314" 
+    capture_lex $P1064
+    .const 'Sub' $P1057 = "267_1271336396.90314" 
+    capture_lex $P1057
+    .const 'Sub' $P1050 = "265_1271336396.90314" 
+    capture_lex $P1050
+    .const 'Sub' $P1043 = "263_1271336396.90314" 
+    capture_lex $P1043
+    .const 'Sub' $P1036 = "261_1271336396.90314" 
+    capture_lex $P1036
+    .const 'Sub' $P1029 = "259_1271336396.90314" 
+    capture_lex $P1029
+    .const 'Sub' $P1022 = "257_1271336396.90314" 
+    capture_lex $P1022
+    .const 'Sub' $P1015 = "255_1271336396.90314" 
+    capture_lex $P1015
+    .const 'Sub' $P1008 = "253_1271336396.90314" 
+    capture_lex $P1008
+    .const 'Sub' $P1001 = "251_1271336396.90314" 
+    capture_lex $P1001
+    .const 'Sub' $P995 = "249_1271336396.90314" 
+    capture_lex $P995
+    .const 'Sub' $P988 = "247_1271336396.90314" 
+    capture_lex $P988
+    .const 'Sub' $P981 = "245_1271336396.90314" 
+    capture_lex $P981
+    .const 'Sub' $P974 = "243_1271336396.90314" 
+    capture_lex $P974
+    .const 'Sub' $P967 = "241_1271336396.90314" 
+    capture_lex $P967
+    .const 'Sub' $P960 = "239_1271336396.90314" 
+    capture_lex $P960
+    .const 'Sub' $P953 = "237_1271336396.90314" 
+    capture_lex $P953
+    .const 'Sub' $P946 = "235_1271336396.90314" 
+    capture_lex $P946
+    .const 'Sub' $P940 = "233_1271336396.90314" 
+    capture_lex $P940
+    .const 'Sub' $P934 = "231_1271336396.90314" 
+    capture_lex $P934
+    .const 'Sub' $P929 = "229_1271336396.90314" 
+    capture_lex $P929
+    .const 'Sub' $P923 = "227_1271336396.90314" 
+    capture_lex $P923
+    .const 'Sub' $P917 = "225_1271336396.90314" 
+    capture_lex $P917
+    .const 'Sub' $P912 = "223_1271336396.90314" 
+    capture_lex $P912
+    .const 'Sub' $P907 = "221_1271336396.90314" 
+    capture_lex $P907
+    .const 'Sub' $P900 = "219_1271336396.90314" 
+    capture_lex $P900
+    .const 'Sub' $P892 = "217_1271336396.90314" 
+    capture_lex $P892
+    .const 'Sub' $P887 = "215_1271336396.90314" 
+    capture_lex $P887
+    .const 'Sub' $P882 = "213_1271336396.90314" 
+    capture_lex $P882
+    .const 'Sub' $P877 = "211_1271336396.90314" 
+    capture_lex $P877
+    .const 'Sub' $P869 = "209_1271336396.90314" 
+    capture_lex $P869
+    .const 'Sub' $P861 = "207_1271336396.90314" 
+    capture_lex $P861
+    .const 'Sub' $P856 = "205_1271336396.90314" 
+    capture_lex $P856
+    .const 'Sub' $P851 = "203_1271336396.90314" 
+    capture_lex $P851
+    .const 'Sub' $P845 = "201_1271336396.90314" 
+    capture_lex $P845
+    .const 'Sub' $P839 = "199_1271336396.90314" 
+    capture_lex $P839
+    .const 'Sub' $P833 = "197_1271336396.90314" 
+    capture_lex $P833
+    .const 'Sub' $P827 = "195_1271336396.90314" 
+    capture_lex $P827
+    .const 'Sub' $P821 = "193_1271336396.90314" 
+    capture_lex $P821
+    .const 'Sub' $P816 = "191_1271336396.90314" 
+    capture_lex $P816
+    .const 'Sub' $P811 = "189_1271336396.90314" 
+    capture_lex $P811
+    .const 'Sub' $P798 = "185_1271336396.90314" 
+    capture_lex $P798
+    .const 'Sub' $P790 = "183_1271336396.90314" 
+    capture_lex $P790
+    .const 'Sub' $P784 = "181_1271336396.90314" 
+    capture_lex $P784
+    .const 'Sub' $P777 = "179_1271336396.90314" 
+    capture_lex $P777
+    .const 'Sub' $P771 = "177_1271336396.90314" 
+    capture_lex $P771
+    .const 'Sub' $P763 = "175_1271336396.90314" 
+    capture_lex $P763
+    .const 'Sub' $P755 = "173_1271336396.90314" 
+    capture_lex $P755
+    .const 'Sub' $P749 = "171_1271336396.90314" 
+    capture_lex $P749
+    .const 'Sub' $P743 = "169_1271336396.90314" 
+    capture_lex $P743
+    .const 'Sub' $P728 = "165_1271336396.90314" 
+    capture_lex $P728
+    .const 'Sub' $P691 = "163_1271336396.90314" 
+    capture_lex $P691
+    .const 'Sub' $P683 = "161_1271336396.90314" 
+    capture_lex $P683
+    .const 'Sub' $P677 = "159_1271336396.90314" 
+    capture_lex $P677
+    .const 'Sub' $P667 = "157_1271336396.90314" 
+    capture_lex $P667
+    .const 'Sub' $P652 = "155_1271336396.90314" 
+    capture_lex $P652
+    .const 'Sub' $P643 = "153_1271336396.90314" 
+    capture_lex $P643
+    .const 'Sub' $P624 = "151_1271336396.90314" 
+    capture_lex $P624
+    .const 'Sub' $P600 = "149_1271336396.90314" 
+    capture_lex $P600
+    .const 'Sub' $P593 = "147_1271336396.90314" 
+    capture_lex $P593
+    .const 'Sub' $P586 = "145_1271336396.90314" 
+    capture_lex $P586
+    .const 'Sub' $P576 = "141_1271336396.90314" 
+    capture_lex $P576
+    .const 'Sub' $P565 = "139_1271336396.90314" 
+    capture_lex $P565
+    .const 'Sub' $P558 = "137_1271336396.90314" 
+    capture_lex $P558
+    .const 'Sub' $P551 = "135_1271336396.90314" 
+    capture_lex $P551
+    .const 'Sub' $P544 = "133_1271336396.90314" 
+    capture_lex $P544
+    .const 'Sub' $P517 = "129_1271336396.90314" 
+    capture_lex $P517
+    .const 'Sub' $P508 = "127_1271336396.90314" 
+    capture_lex $P508
+    .const 'Sub' $P501 = "125_1271336396.90314" 
+    capture_lex $P501
+    .const 'Sub' $P492 = "121_1271336396.90314" 
+    capture_lex $P492
+    .const 'Sub' $P487 = "119_1271336396.90314" 
+    capture_lex $P487
+    .const 'Sub' $P475 = "117_1271336396.90314" 
+    capture_lex $P475
+    .const 'Sub' $P463 = "115_1271336396.90314" 
+    capture_lex $P463
+    .const 'Sub' $P455 = "113_1271336396.90314" 
+    capture_lex $P455
+    .const 'Sub' $P450 = "111_1271336396.90314" 
+    capture_lex $P450
+    .const 'Sub' $P444 = "109_1271336396.90314" 
+    capture_lex $P444
+    .const 'Sub' $P438 = "107_1271336396.90314" 
+    capture_lex $P438
+    .const 'Sub' $P432 = "105_1271336396.90314" 
+    capture_lex $P432
+    .const 'Sub' $P426 = "103_1271336396.90314" 
+    capture_lex $P426
+    .const 'Sub' $P420 = "101_1271336396.90314" 
+    capture_lex $P420
+    .const 'Sub' $P414 = "99_1271336396.90314" 
+    capture_lex $P414
+    .const 'Sub' $P408 = "97_1271336396.90314" 
+    capture_lex $P408
+    .const 'Sub' $P402 = "95_1271336396.90314" 
+    capture_lex $P402
+    .const 'Sub' $P394 = "93_1271336396.90314" 
+    capture_lex $P394
+    .const 'Sub' $P386 = "91_1271336396.90314" 
+    capture_lex $P386
+    .const 'Sub' $P374 = "87_1271336396.90314" 
+    capture_lex $P374
+    .const 'Sub' $P366 = "85_1271336396.90314" 
+    capture_lex $P366
+    .const 'Sub' $P356 = "81_1271336396.90314" 
+    capture_lex $P356
+    .const 'Sub' $P349 = "79_1271336396.90314" 
+    capture_lex $P349
+    .const 'Sub' $P342 = "77_1271336396.90314" 
+    capture_lex $P342
+    .const 'Sub' $P330 = "73_1271336396.90314" 
+    capture_lex $P330
+    .const 'Sub' $P322 = "71_1271336396.90314" 
+    capture_lex $P322
+    .const 'Sub' $P314 = "69_1271336396.90314" 
+    capture_lex $P314
+    .const 'Sub' $P294 = "67_1271336396.90314" 
+    capture_lex $P294
+    .const 'Sub' $P285 = "65_1271336396.90314" 
+    capture_lex $P285
+    .const 'Sub' $P267 = "62_1271336396.90314" 
+    capture_lex $P267
+    .const 'Sub' $P247 = "60_1271336396.90314" 
+    capture_lex $P247
+    .const 'Sub' $P238 = "56_1271336396.90314" 
+    capture_lex $P238
+    .const 'Sub' $P233 = "54_1271336396.90314" 
+    capture_lex $P233
+    .const 'Sub' $P224 = "50_1271336396.90314" 
+    capture_lex $P224
+    .const 'Sub' $P219 = "48_1271336396.90314" 
+    capture_lex $P219
+    .const 'Sub' $P211 = "46_1271336396.90314" 
+    capture_lex $P211
+    .const 'Sub' $P204 = "44_1271336396.90314" 
+    capture_lex $P204
+    .const 'Sub' $P198 = "42_1271336396.90314" 
+    capture_lex $P198
+    .const 'Sub' $P190 = "40_1271336396.90314" 
+    capture_lex $P190
+    .const 'Sub' $P184 = "38_1271336396.90314" 
+    capture_lex $P184
+    .const 'Sub' $P178 = "36_1271336396.90314" 
+    capture_lex $P178
+    .const 'Sub' $P162 = "33_1271336396.90314" 
+    capture_lex $P162
+    .const 'Sub' $P149 = "31_1271336396.90314" 
+    capture_lex $P149
+    .const 'Sub' $P142 = "29_1271336396.90314" 
+    capture_lex $P142
+    .const 'Sub' $P96 = "26_1271336396.90314" 
     capture_lex $P96
-    .const 'Sub' $P78 = "23_1267204702.05125" 
+    .const 'Sub' $P78 = "23_1271336396.90314" 
     capture_lex $P78
-    .const 'Sub' $P68 = "21_1267204702.05125" 
+    .const 'Sub' $P68 = "21_1271336396.90314" 
     capture_lex $P68
-    .const 'Sub' $P54 = "19_1267204702.05125" 
+    .const 'Sub' $P54 = "19_1271336396.90314" 
     capture_lex $P54
-    .const 'Sub' $P46 = "17_1267204702.05125" 
+    .const 'Sub' $P46 = "17_1271336396.90314" 
     capture_lex $P46
-    .const 'Sub' $P39 = "15_1267204702.05125" 
+    .const 'Sub' $P39 = "15_1271336396.90314" 
     capture_lex $P39
-    .const 'Sub' $P33 = "13_1267204702.05125" 
+    .const 'Sub' $P33 = "13_1271336396.90314" 
     capture_lex $P33
-    .const 'Sub' $P15 = "12_1267204702.05125" 
+    .const 'Sub' $P15 = "12_1271336396.90314" 
     capture_lex $P15
-.annotate "line", 531
-    get_hll_global $P1240, ["NQP";"Regex"], "_block1239" 
-    capture_lex $P1240
-    $P1279 = $P1240()
+.annotate "line", 535
+    get_hll_global $P1243, ["NQP";"Regex"], "_block1242" 
+    capture_lex $P1243
+    $P1282 = $P1243()
 .annotate "line", 4
-    .return ($P1279)
+    .return ($P1282)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "" :load :init :subid("post332") :outer("11_1267204702.05125")
+.sub "" :load :init :subid("post332") :outer("11_1271336396.90314")
 .annotate "line", 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     .local pmc block
     set block, $P14
-.annotate "line", 418
-    get_hll_global $P1280, ["NQP"], "Grammar"
-    $P1280."O"(":prec<y=>, :assoc<unary>", "%methodop")
-.annotate "line", 419
-    get_hll_global $P1281, ["NQP"], "Grammar"
-    $P1281."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
-.annotate "line", 420
-    get_hll_global $P1282, ["NQP"], "Grammar"
-    $P1282."O"(":prec<w=>, :assoc<left>", "%exponentiation")
-.annotate "line", 421
-    get_hll_global $P1283, ["NQP"], "Grammar"
-    $P1283."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
 .annotate "line", 422
-    get_hll_global $P1284, ["NQP"], "Grammar"
-    $P1284."O"(":prec<u=>, :assoc<left>", "%multiplicative")
+    get_hll_global $P1283, ["NQP"], "Grammar"
+    $P1283."O"(":prec<y=>, :assoc<unary>", "%methodop")
 .annotate "line", 423
-    get_hll_global $P1285, ["NQP"], "Grammar"
-    $P1285."O"(":prec<t=>, :assoc<left>", "%additive")
+    get_hll_global $P1284, ["NQP"], "Grammar"
+    $P1284."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
 .annotate "line", 424
-    get_hll_global $P1286, ["NQP"], "Grammar"
-    $P1286."O"(":prec<r=>, :assoc<left>", "%concatenation")
+    get_hll_global $P1285, ["NQP"], "Grammar"
+    $P1285."O"(":prec<w=>, :assoc<left>", "%exponentiation")
 .annotate "line", 425
-    get_hll_global $P1287, ["NQP"], "Grammar"
-    $P1287."O"(":prec<m=>, :assoc<left>", "%relational")
+    get_hll_global $P1286, ["NQP"], "Grammar"
+    $P1286."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
 .annotate "line", 426
-    get_hll_global $P1288, ["NQP"], "Grammar"
-    $P1288."O"(":prec<l=>, :assoc<left>", "%tight_and")
+    get_hll_global $P1287, ["NQP"], "Grammar"
+    $P1287."O"(":prec<u=>, :assoc<left>", "%multiplicative")
 .annotate "line", 427
-    get_hll_global $P1289, ["NQP"], "Grammar"
-    $P1289."O"(":prec<k=>, :assoc<left>", "%tight_or")
+    get_hll_global $P1288, ["NQP"], "Grammar"
+    $P1288."O"(":prec<t=>, :assoc<left>", "%additive")
 .annotate "line", 428
-    get_hll_global $P1290, ["NQP"], "Grammar"
-    $P1290."O"(":prec<j=>, :assoc<right>", "%conditional")
+    get_hll_global $P1289, ["NQP"], "Grammar"
+    $P1289."O"(":prec<r=>, :assoc<left>", "%concatenation")
 .annotate "line", 429
-    get_hll_global $P1291, ["NQP"], "Grammar"
-    $P1291."O"(":prec<i=>, :assoc<right>", "%assignment")
+    get_hll_global $P1290, ["NQP"], "Grammar"
+    $P1290."O"(":prec<m=>, :assoc<left>", "%relational")
 .annotate "line", 430
-    get_hll_global $P1292, ["NQP"], "Grammar"
-    $P1292."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+    get_hll_global $P1291, ["NQP"], "Grammar"
+    $P1291."O"(":prec<l=>, :assoc<left>", "%tight_and")
 .annotate "line", 431
-    get_hll_global $P1293, ["NQP"], "Grammar"
-    $P1293."O"(":prec<f=>, :assoc<list>", "%list_infix")
+    get_hll_global $P1292, ["NQP"], "Grammar"
+    $P1292."O"(":prec<k=>, :assoc<left>", "%tight_or")
 .annotate "line", 432
+    get_hll_global $P1293, ["NQP"], "Grammar"
+    $P1293."O"(":prec<j=>, :assoc<right>", "%conditional")
+.annotate "line", 433
     get_hll_global $P1294, ["NQP"], "Grammar"
-    $P1294."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
-.annotate "line", 417
-    $P1295 = get_root_global ["parrot"], "P6metaclass"
-    $P1295."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
+    $P1294."O"(":prec<i=>, :assoc<right>", "%assignment")
+.annotate "line", 434
+    get_hll_global $P1295, ["NQP"], "Grammar"
+    $P1295."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+.annotate "line", 435
+    get_hll_global $P1296, ["NQP"], "Grammar"
+    $P1296."O"(":prec<f=>, :assoc<list>", "%list_infix")
+.annotate "line", 436
+    get_hll_global $P1297, ["NQP"], "Grammar"
+    $P1297."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
+.annotate "line", 421
+    $P1298 = get_root_global ["parrot"], "P6metaclass"
+    $P1298."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "TOP"  :subid("12_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "TOP"  :subid("12_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
@@ -478,7 +478,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "identifier"  :subid("13_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "identifier"  :subid("13_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx34_tgt
     .local int rx34_pos
@@ -536,7 +536,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__identifier"  :subid("14_1267204702.05125") :method
+.sub "!PREFIX__identifier"  :subid("14_1271336396.90314") :method
 .annotate "line", 4
     $P36 = self."!PREFIX__!subrule"("ident", "")
     new $P37, "ResizablePMCArray"
@@ -546,7 +546,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "name"  :subid("15_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "name"  :subid("15_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx40_tgt
     .local int rx40_pos
@@ -620,7 +620,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__name"  :subid("16_1267204702.05125") :method
+.sub "!PREFIX__name"  :subid("16_1271336396.90314") :method
 .annotate "line", 4
     new $P42, "ResizablePMCArray"
     push $P42, ""
@@ -629,7 +629,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "deflongname"  :subid("17_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "deflongname"  :subid("17_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx47_tgt
     .local int rx47_pos
@@ -702,7 +702,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__deflongname"  :subid("18_1267204702.05125") :method
+.sub "!PREFIX__deflongname"  :subid("18_1271336396.90314") :method
 .annotate "line", 4
     $P49 = self."!PREFIX__!subrule"("identifier", "")
     new $P50, "ResizablePMCArray"
@@ -712,7 +712,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ENDSTMT"  :subid("19_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "ENDSTMT"  :subid("19_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx55_tgt
     .local int rx55_pos
@@ -844,7 +844,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ENDSTMT"  :subid("20_1267204702.05125") :method
+.sub "!PREFIX__ENDSTMT"  :subid("20_1271336396.90314") :method
 .annotate "line", 4
     new $P57, "ResizablePMCArray"
     push $P57, ""
@@ -853,7 +853,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ws"  :subid("21_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "ws"  :subid("21_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx69_tgt
     .local int rx69_pos
@@ -979,7 +979,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ws"  :subid("22_1267204702.05125") :method
+.sub "!PREFIX__ws"  :subid("22_1271336396.90314") :method
 .annotate "line", 4
     new $P71, "ResizablePMCArray"
     push $P71, ""
@@ -989,9 +989,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "unv"  :subid("23_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "unv"  :subid("23_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .const 'Sub' $P86 = "25_1267204702.05125" 
+    .const 'Sub' $P86 = "25_1271336396.90314" 
     capture_lex $P86
     .local string rx79_tgt
     .local int rx79_pos
@@ -1037,7 +1037,7 @@
   rxanchor84_done:
   # rx subrule "before" subtype=zerowidth negate=
     rx79_cur."!cursor_pos"(rx79_pos)
-    .const 'Sub' $P86 = "25_1267204702.05125" 
+    .const 'Sub' $P86 = "25_1271336396.90314" 
     capture_lex $P86
     $P10 = rx79_cur."before"($P86)
     unless $P10, rx79_fail
@@ -1116,7 +1116,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__unv"  :subid("24_1267204702.05125") :method
+.sub "!PREFIX__unv"  :subid("24_1271336396.90314") :method
 .annotate "line", 4
     new $P81, "ResizablePMCArray"
     push $P81, ""
@@ -1127,7 +1127,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block85"  :anon :subid("25_1267204702.05125") :method :outer("23_1267204702.05125")
+.sub "_block85"  :anon :subid("25_1271336396.90314") :method :outer("23_1271336396.90314")
 .annotate "line", 44
     .local string rx87_tgt
     .local int rx87_pos
@@ -1217,10 +1217,10 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pod_comment"  :subid("26_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "pod_comment"  :subid("26_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .const 'Sub' $P131 = "28_1267204702.05125" 
-    capture_lex $P131
+    .const 'Sub' $P133 = "28_1271336396.90314" 
+    capture_lex $P133
     .local string rx97_tgt
     .local int rx97_pos
     .local int rx97_off
@@ -1643,40 +1643,48 @@
 .annotate "line", 60
     goto alt104_end
   alt104_3:
-.annotate "line", 68
-  # rx rxquantr129 ** 0..1
-    set_addr $I137, rxquantr129_done
-    rx97_cur."!mark_push"(0, rx97_pos, $I137)
-  rxquantr129_loop:
-.annotate "line", 67
-  # rx subrule "before" subtype=zerowidth negate=
-    rx97_cur."!cursor_pos"(rx97_pos)
-    .const 'Sub' $P131 = "28_1267204702.05125" 
-    capture_lex $P131
-    $P10 = rx97_cur."before"($P131)
-    unless $P10, rx97_fail
-.annotate "line", 68
-  # rx subrule "panic" subtype=method negate=
+    set_addr $I10, alt104_4
+    rx97_cur."!mark_push"(0, rx97_pos, $I10)
+.annotate "line", 66
+  # rx subrule "identifier" subtype=capture negate=
     rx97_cur."!cursor_pos"(rx97_pos)
-    $P10 = rx97_cur."panic"("Obsolete pod format, please use =begin/=end instead")
+    $P10 = rx97_cur."identifier"()
     unless $P10, rx97_fail
+    rx97_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("identifier")
     rx97_pos = $P10."pos"()
-    (rx97_rep) = rx97_cur."!mark_commit"($I137)
-  rxquantr129_done:
-  alt138_0:
-.annotate "line", 69
-    set_addr $I10, alt138_1
+.annotate "line", 67
+  # rx rxquantf129 ** 0..*
+    set_addr $I10, rxquantf129_loop
     rx97_cur."!mark_push"(0, rx97_pos, $I10)
-  # rx subrule "alpha" subtype=capture negate=
+    goto rxquantf129_done
+  rxquantf129_loop:
+  # rx charclass .
+    ge rx97_pos, rx97_eos, rx97_fail
+    inc rx97_pos
+    set_addr $I10, rxquantf129_loop
+    rx97_cur."!mark_push"($I130, rx97_pos, $I10)
+  rxquantf129_done:
+  # rxanchor bol
+    eq rx97_pos, 0, rxanchor131_done
+    ge rx97_pos, rx97_eos, rx97_fail
+    sub $I10, rx97_pos, rx97_off
+    dec $I10
+    is_cclass $I11, 4096, rx97_tgt, $I10
+    unless $I11, rx97_fail
+  rxanchor131_done:
+  # rx subrule "before" subtype=zerowidth negate=
     rx97_cur."!cursor_pos"(rx97_pos)
-    $P10 = rx97_cur."alpha"()
+    .const 'Sub' $P133 = "28_1271336396.90314" 
+    capture_lex $P133
+    $P10 = rx97_cur."before"($P133)
     unless $P10, rx97_fail
-    rx97_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("alpha")
-    rx97_pos = $P10."pos"()
-    goto alt138_end
-  alt138_1:
-    set_addr $I10, alt138_2
+.annotate "line", 66
+    goto alt104_end
+  alt104_4:
+  alt141_0:
+.annotate "line", 73
+    set_addr $I10, alt141_1
     rx97_cur."!mark_push"(0, rx97_pos, $I10)
   # rx charclass s
     ge rx97_pos, rx97_eos, rx97_fail
@@ -1684,15 +1692,15 @@
     is_cclass $I11, 32, rx97_tgt, $I10
     unless $I11, rx97_fail
     inc rx97_pos
-    goto alt138_end
-  alt138_2:
+    goto alt141_end
+  alt141_1:
   # rx subrule "panic" subtype=method negate=
     rx97_cur."!cursor_pos"(rx97_pos)
     $P10 = rx97_cur."panic"("Illegal pod directive")
     unless $P10, rx97_fail
     rx97_pos = $P10."pos"()
-  alt138_end:
-.annotate "line", 70
+  alt141_end:
+.annotate "line", 74
   # rx charclass_q N r 0..-1
     sub $I10, rx97_pos, rx97_off
     find_cclass $I11, 4096, rx97_tgt, $I10, rx97_eos
@@ -1718,7 +1726,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pod_comment"  :subid("27_1267204702.05125") :method
+.sub "!PREFIX__pod_comment"  :subid("27_1271336396.90314") :method
 .annotate "line", 4
     new $P99, "ResizablePMCArray"
     push $P99, ""
@@ -1727,13585 +1735,13565 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block130"  :anon :subid("28_1267204702.05125") :method :outer("26_1267204702.05125")
+.sub "_block132"  :anon :subid("28_1271336396.90314") :method :outer("26_1271336396.90314")
 .annotate "line", 67
-    .local string rx132_tgt
-    .local int rx132_pos
-    .local int rx132_off
-    .local int rx132_eos
-    .local int rx132_rep
-    .local pmc rx132_cur
-    (rx132_cur, rx132_pos, rx132_tgt) = self."!cursor_start"()
-    rx132_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx132_cur
-    .local pmc match
-    .lex "$/", match
-    length rx132_eos, rx132_tgt
-    set rx132_off, 0
-    lt rx132_pos, 2, rx132_start
-    sub rx132_off, rx132_pos, 1
-    substr rx132_tgt, rx132_tgt, rx132_off
-  rx132_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan133_done
-    goto rxscan133_scan
-  rxscan133_loop:
-    ($P10) = rx132_cur."from"()
-    inc $P10
-    set rx132_pos, $P10
-    ge rx132_pos, rx132_eos, rxscan133_done
-  rxscan133_scan:
-    set_addr $I10, rxscan133_loop
-    rx132_cur."!mark_push"(0, rx132_pos, $I10)
-  rxscan133_done:
-  # rx rxquantf134 ** 0..*
-    set_addr $I10, rxquantf134_loop
-    rx132_cur."!mark_push"(0, rx132_pos, $I10)
-    goto rxquantf134_done
-  rxquantf134_loop:
-  # rx charclass .
-    ge rx132_pos, rx132_eos, rx132_fail
-    inc rx132_pos
-    set_addr $I10, rxquantf134_loop
-    rx132_cur."!mark_push"($I135, rx132_pos, $I10)
-  rxquantf134_done:
-  # rxanchor bol
-    eq rx132_pos, 0, rxanchor136_done
-    ge rx132_pos, rx132_eos, rx132_fail
-    sub $I10, rx132_pos, rx132_off
-    dec $I10
-    is_cclass $I11, 4096, rx132_tgt, $I10
-    unless $I11, rx132_fail
-  rxanchor136_done:
-  # rx literal  "=cut"
-    add $I11, rx132_pos, 4
-    gt $I11, rx132_eos, rx132_fail
-    sub $I11, rx132_pos, rx132_off
-    substr $S10, rx132_tgt, $I11, 4
-    ne $S10, "=cut", rx132_fail
-    add rx132_pos, 4
+    .local string rx134_tgt
+    .local int rx134_pos
+    .local int rx134_off
+    .local int rx134_eos
+    .local int rx134_rep
+    .local pmc rx134_cur
+    (rx134_cur, rx134_pos, rx134_tgt) = self."!cursor_start"()
+    rx134_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx134_cur
+    .local pmc match
+    .lex "$/", match
+    length rx134_eos, rx134_tgt
+    set rx134_off, 0
+    lt rx134_pos, 2, rx134_start
+    sub rx134_off, rx134_pos, 1
+    substr rx134_tgt, rx134_tgt, rx134_off
+  rx134_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan135_done
+    goto rxscan135_scan
+  rxscan135_loop:
+    ($P10) = rx134_cur."from"()
+    inc $P10
+    set rx134_pos, $P10
+    ge rx134_pos, rx134_eos, rxscan135_done
+  rxscan135_scan:
+    set_addr $I10, rxscan135_loop
+    rx134_cur."!mark_push"(0, rx134_pos, $I10)
+  rxscan135_done:
+  # rx rxquantr136 ** 0..*
+    set_addr $I137, rxquantr136_done
+    rx134_cur."!mark_push"(0, rx134_pos, $I137)
+  rxquantr136_loop:
+  # rx enumcharlist negate=0 
+    ge rx134_pos, rx134_eos, rx134_fail
+    sub $I10, rx134_pos, rx134_off
+    substr $S10, rx134_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, rx134_fail
+    inc rx134_pos
+    (rx134_rep) = rx134_cur."!mark_commit"($I137)
+    rx134_cur."!mark_push"(rx134_rep, rx134_pos, $I137)
+    goto rxquantr136_loop
+  rxquantr136_done:
+  alt138_0:
+    set_addr $I10, alt138_1
+    rx134_cur."!mark_push"(0, rx134_pos, $I10)
+.annotate "line", 68
+  # 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
+.annotate "line", 70
+  # rx rxquantr139 ** 0..1
+    set_addr $I140, rxquantr139_done
+    rx134_cur."!mark_push"(0, rx134_pos, $I140)
+  rxquantr139_loop:
+.annotate "line", 69
+  # rx literal  "cut"
+    add $I11, rx134_pos, 3
+    gt $I11, rx134_eos, rx134_fail
+    sub $I11, rx134_pos, rx134_off
+    substr $S10, rx134_tgt, $I11, 3
+    ne $S10, "cut", rx134_fail
+    add rx134_pos, 3
   # rxanchor rwb
-    le rx132_pos, 0, rx132_fail
-    sub $I10, rx132_pos, rx132_off
-    is_cclass $I11, 8192, rx132_tgt, $I10
-    if $I11, rx132_fail
+    le rx134_pos, 0, rx134_fail
+    sub $I10, rx134_pos, rx134_off
+    is_cclass $I11, 8192, rx134_tgt, $I10
+    if $I11, rx134_fail
     dec $I10
-    is_cclass $I11, 8192, rx132_tgt, $I10
-    unless $I11, rx132_fail
+    is_cclass $I11, 8192, rx134_tgt, $I10
+    unless $I11, rx134_fail
+.annotate "line", 70
+  # rx subrule "panic" subtype=method negate=
+    rx134_cur."!cursor_pos"(rx134_pos)
+    $P10 = rx134_cur."panic"("Obsolete pod format, please use =begin/=end instead")
+    unless $P10, rx134_fail
+    rx134_pos = $P10."pos"()
+    (rx134_rep) = rx134_cur."!mark_commit"($I140)
+  rxquantr139_done:
+.annotate "line", 67
+    goto alt138_end
+  alt138_1:
+.annotate "line", 71
+  # rx charclass nl
+    ge rx134_pos, rx134_eos, rx134_fail
+    sub $I10, rx134_pos, rx134_off
+    is_cclass $I11, 4096, rx134_tgt, $I10
+    unless $I11, rx134_fail
+    substr $S10, rx134_tgt, $I10, 2
+    iseq $I11, $S10, "\r\n"
+    add rx134_pos, $I11
+    inc rx134_pos
+  alt138_end:
+.annotate "line", 67
   # rx pass
-    rx132_cur."!cursor_pass"(rx132_pos, "")
-    rx132_cur."!cursor_debug"("PASS  ", "", " at pos=", rx132_pos)
-    .return (rx132_cur)
-  rx132_fail:
-    (rx132_rep, rx132_pos, $I10, $P10) = rx132_cur."!mark_fail"(0)
-    lt rx132_pos, -1, rx132_done
-    eq rx132_pos, -1, rx132_fail
-    jump $I10
-  rx132_done:
-    rx132_cur."!cursor_fail"()
-    rx132_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx132_cur)
+    rx134_cur."!cursor_pass"(rx134_pos, "")
+    rx134_cur."!cursor_debug"("PASS  ", "", " at pos=", rx134_pos)
+    .return (rx134_cur)
+  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  ", "")
+    .return (rx134_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "comp_unit"  :subid("29_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx140_tgt
-    .local int rx140_pos
-    .local int rx140_off
-    .local int rx140_eos
-    .local int rx140_rep
-    .local pmc rx140_cur
-    (rx140_cur, rx140_pos, rx140_tgt) = self."!cursor_start"()
-    rx140_cur."!cursor_debug"("START ", "comp_unit")
-    .lex unicode:"$\x{a2}", rx140_cur
-    .local pmc match
-    .lex "$/", match
-    length rx140_eos, rx140_tgt
-    set rx140_off, 0
-    lt rx140_pos, 2, rx140_start
-    sub rx140_off, rx140_pos, 1
-    substr rx140_tgt, rx140_tgt, rx140_off
-  rx140_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan144_done
-    goto rxscan144_scan
-  rxscan144_loop:
-    ($P10) = rx140_cur."from"()
-    inc $P10
-    set rx140_pos, $P10
-    ge rx140_pos, rx140_eos, rxscan144_done
-  rxscan144_scan:
-    set_addr $I10, rxscan144_loop
-    rx140_cur."!mark_push"(0, rx140_pos, $I10)
-  rxscan144_done:
-.annotate "line", 78
+.sub "comp_unit"  :subid("29_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 4
+    .local string rx143_tgt
+    .local int rx143_pos
+    .local int rx143_off
+    .local int rx143_eos
+    .local int rx143_rep
+    .local pmc rx143_cur
+    (rx143_cur, rx143_pos, rx143_tgt) = self."!cursor_start"()
+    rx143_cur."!cursor_debug"("START ", "comp_unit")
+    .lex unicode:"$\x{a2}", rx143_cur
+    .local pmc match
+    .lex "$/", match
+    length rx143_eos, rx143_tgt
+    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:
+    $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", 82
   # rx subrule "newpad" subtype=method negate=
-    rx140_cur."!cursor_pos"(rx140_pos)
-    $P10 = rx140_cur."newpad"()
-    unless $P10, rx140_fail
-    rx140_pos = $P10."pos"()
-.annotate "line", 79
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."newpad"()
+    unless $P10, rx143_fail
+    rx143_pos = $P10."pos"()
+.annotate "line", 83
   # rx subrule "statementlist" subtype=capture negate=
-    rx140_cur."!cursor_pos"(rx140_pos)
-    $P10 = rx140_cur."statementlist"()
-    unless $P10, rx140_fail
-    rx140_cur."!mark_push"(0, -1, 0, $P10)
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."statementlist"()
+    unless $P10, rx143_fail
+    rx143_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statementlist")
-    rx140_pos = $P10."pos"()
-  alt145_0:
-.annotate "line", 80
-    set_addr $I10, alt145_1
-    rx140_cur."!mark_push"(0, rx140_pos, $I10)
+    rx143_pos = $P10."pos"()
+  alt148_0:
+.annotate "line", 84
+    set_addr $I10, alt148_1
+    rx143_cur."!mark_push"(0, rx143_pos, $I10)
   # rxanchor eos
-    ne rx140_pos, rx140_eos, rx140_fail
-    goto alt145_end
-  alt145_1:
+    ne rx143_pos, rx143_eos, rx143_fail
+    goto alt148_end
+  alt148_1:
   # rx subrule "panic" subtype=method negate=
-    rx140_cur."!cursor_pos"(rx140_pos)
-    $P10 = rx140_cur."panic"("Confused")
-    unless $P10, rx140_fail
-    rx140_pos = $P10."pos"()
-  alt145_end:
-.annotate "line", 77
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."panic"("Confused")
+    unless $P10, rx143_fail
+    rx143_pos = $P10."pos"()
+  alt148_end:
+.annotate "line", 81
   # rx pass
-    rx140_cur."!cursor_pass"(rx140_pos, "comp_unit")
-    rx140_cur."!cursor_debug"("PASS  ", "comp_unit", " at pos=", rx140_pos)
-    .return (rx140_cur)
-  rx140_fail:
+    rx143_cur."!cursor_pass"(rx143_pos, "comp_unit")
+    rx143_cur."!cursor_debug"("PASS  ", "comp_unit", " at pos=", rx143_pos)
+    .return (rx143_cur)
+  rx143_fail:
 .annotate "line", 4
-    (rx140_rep, rx140_pos, $I10, $P10) = rx140_cur."!mark_fail"(0)
-    lt rx140_pos, -1, rx140_done
-    eq rx140_pos, -1, rx140_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
-  rx140_done:
-    rx140_cur."!cursor_fail"()
-    rx140_cur."!cursor_debug"("FAIL  ", "comp_unit")
-    .return (rx140_cur)
+  rx143_done:
+    rx143_cur."!cursor_fail"()
+    rx143_cur."!cursor_debug"("FAIL  ", "comp_unit")
+    .return (rx143_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__comp_unit"  :subid("30_1267204702.05125") :method
+.sub "!PREFIX__comp_unit"  :subid("30_1271336396.90314") :method
 .annotate "line", 4
-    $P142 = self."!PREFIX__!subrule"("", "")
-    new $P143, "ResizablePMCArray"
-    push $P143, $P142
-    .return ($P143)
+    $P145 = self."!PREFIX__!subrule"("", "")
+    new $P146, "ResizablePMCArray"
+    push $P146, $P145
+    .return ($P146)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statementlist"  :subid("31_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statementlist"  :subid("31_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx147_tgt
-    .local int rx147_pos
-    .local int rx147_off
-    .local int rx147_eos
-    .local int rx147_rep
-    .local pmc rx147_cur
-    (rx147_cur, rx147_pos, rx147_tgt) = self."!cursor_start"()
-    rx147_cur."!cursor_debug"("START ", "statementlist")
-    rx147_cur."!cursor_caparray"("statement")
-    .lex unicode:"$\x{a2}", rx147_cur
+    .local string rx150_tgt
+    .local int rx150_pos
+    .local int rx150_off
+    .local int rx150_eos
+    .local int rx150_rep
+    .local pmc rx150_cur
+    (rx150_cur, rx150_pos, rx150_tgt) = self."!cursor_start"()
+    rx150_cur."!cursor_debug"("START ", "statementlist")
+    rx150_cur."!cursor_caparray"("statement")
+    .lex unicode:"$\x{a2}", rx150_cur
     .local pmc match
     .lex "$/", match
-    length rx147_eos, rx147_tgt
-    set rx147_off, 0
-    lt rx147_pos, 2, rx147_start
-    sub rx147_off, rx147_pos, 1
-    substr rx147_tgt, rx147_tgt, rx147_off
-  rx147_start:
+    length rx150_eos, rx150_tgt
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan150_done
-    goto rxscan150_scan
-  rxscan150_loop:
-    ($P10) = rx147_cur."from"()
+    ne $I10, -1, rxscan153_done
+    goto rxscan153_scan
+  rxscan153_loop:
+    ($P10) = rx150_cur."from"()
     inc $P10
-    set rx147_pos, $P10
-    ge rx147_pos, rx147_eos, rxscan150_done
-  rxscan150_scan:
-    set_addr $I10, rxscan150_loop
-    rx147_cur."!mark_push"(0, rx147_pos, $I10)
-  rxscan150_done:
-  alt151_0:
-.annotate "line", 83
-    set_addr $I10, alt151_1
-    rx147_cur."!mark_push"(0, rx147_pos, $I10)
-.annotate "line", 84
+    set rx150_pos, $P10
+    ge rx150_pos, rx150_eos, rxscan153_done
+  rxscan153_scan:
+    set_addr $I10, rxscan153_loop
+    rx150_cur."!mark_push"(0, rx150_pos, $I10)
+  rxscan153_done:
+  alt154_0:
+.annotate "line", 87
+    set_addr $I10, alt154_1
+    rx150_cur."!mark_push"(0, rx150_pos, $I10)
+.annotate "line", 88
   # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
   # rxanchor eos
-    ne rx147_pos, rx147_eos, rx147_fail
+    ne rx150_pos, rx150_eos, rx150_fail
   # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-    goto alt151_end
-  alt151_1:
-.annotate "line", 85
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+    goto alt154_end
+  alt154_1:
+.annotate "line", 89
   # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-  # rx rxquantr155 ** 0..*
-    set_addr $I157, rxquantr155_done
-    rx147_cur."!mark_push"(0, rx147_pos, $I157)
-  rxquantr155_loop:
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+  # rx rxquantr158 ** 0..*
+    set_addr $I160, rxquantr158_done
+    rx150_cur."!mark_push"(0, rx150_pos, $I160)
+  rxquantr158_loop:
   # rx subrule "statement" subtype=capture negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."statement"()
-    unless $P10, rx147_fail
-    rx147_cur."!mark_push"(0, -1, 0, $P10)
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."statement"()
+    unless $P10, rx150_fail
+    rx150_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx147_pos = $P10."pos"()
+    rx150_pos = $P10."pos"()
   # rx subrule "eat_terminator" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."eat_terminator"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-    (rx147_rep) = rx147_cur."!mark_commit"($I157)
-    rx147_cur."!mark_push"(rx147_rep, rx147_pos, $I157)
-    goto rxquantr155_loop
-  rxquantr155_done:
-  # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-  alt151_end:
-.annotate "line", 83
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."eat_terminator"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+    (rx150_rep) = rx150_cur."!mark_commit"($I160)
+    rx150_cur."!mark_push"(rx150_rep, rx150_pos, $I160)
+    goto rxquantr158_loop
+  rxquantr158_done:
+  # rx subrule "ws" subtype=method negate=
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+  alt154_end:
+.annotate "line", 87
   # rx pass
-    rx147_cur."!cursor_pass"(rx147_pos, "statementlist")
-    rx147_cur."!cursor_debug"("PASS  ", "statementlist", " at pos=", rx147_pos)
-    .return (rx147_cur)
-  rx147_fail:
+    rx150_cur."!cursor_pass"(rx150_pos, "statementlist")
+    rx150_cur."!cursor_debug"("PASS  ", "statementlist", " at pos=", rx150_pos)
+    .return (rx150_cur)
+  rx150_fail:
 .annotate "line", 4
-    (rx147_rep, rx147_pos, $I10, $P10) = rx147_cur."!mark_fail"(0)
-    lt rx147_pos, -1, rx147_done
-    eq rx147_pos, -1, rx147_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
-  rx147_done:
-    rx147_cur."!cursor_fail"()
-    rx147_cur."!cursor_debug"("FAIL  ", "statementlist")
-    .return (rx147_cur)
+  rx150_done:
+    rx150_cur."!cursor_fail"()
+    rx150_cur."!cursor_debug"("FAIL  ", "statementlist")
+    .return (rx150_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statementlist"  :subid("32_1267204702.05125") :method
+.sub "!PREFIX__statementlist"  :subid("32_1271336396.90314") :method
 .annotate "line", 4
-    new $P149, "ResizablePMCArray"
-    push $P149, ""
-    push $P149, ""
-    .return ($P149)
+    new $P152, "ResizablePMCArray"
+    push $P152, ""
+    push $P152, ""
+    .return ($P152)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement"  :subid("33_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement"  :subid("33_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .const 'Sub' $P165 = "35_1267204702.05125" 
-    capture_lex $P165
-    .local string rx160_tgt
-    .local int rx160_pos
-    .local int rx160_off
-    .local int rx160_eos
-    .local int rx160_rep
-    .local pmc rx160_cur
-    (rx160_cur, rx160_pos, rx160_tgt) = self."!cursor_start"()
-    rx160_cur."!cursor_debug"("START ", "statement")
-    rx160_cur."!cursor_caparray"("statement_mod_cond", "statement_mod_loop")
-    .lex unicode:"$\x{a2}", rx160_cur
+    .const 'Sub' $P168 = "35_1271336396.90314" 
+    capture_lex $P168
+    .local string rx163_tgt
+    .local int rx163_pos
+    .local int rx163_off
+    .local int rx163_eos
+    .local int rx163_rep
+    .local pmc rx163_cur
+    (rx163_cur, rx163_pos, rx163_tgt) = self."!cursor_start"()
+    rx163_cur."!cursor_debug"("START ", "statement")
+    rx163_cur."!cursor_caparray"("statement_mod_loop", "statement_mod_cond")
+    .lex unicode:"$\x{a2}", rx163_cur
     .local pmc match
     .lex "$/", match
-    length rx160_eos, rx160_tgt
-    set rx160_off, 0
-    lt rx160_pos, 2, rx160_start
-    sub rx160_off, rx160_pos, 1
-    substr rx160_tgt, rx160_tgt, rx160_off
-  rx160_start:
+    length rx163_eos, rx163_tgt
+    set rx163_off, 0
+    lt rx163_pos, 2, rx163_start
+    sub rx163_off, rx163_pos, 1
+    substr rx163_tgt, rx163_tgt, rx163_off
+  rx163_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan163_done
-    goto rxscan163_scan
-  rxscan163_loop:
-    ($P10) = rx160_cur."from"()
+    ne $I10, -1, rxscan166_done
+    goto rxscan166_scan
+  rxscan166_loop:
+    ($P10) = rx163_cur."from"()
     inc $P10
-    set rx160_pos, $P10
-    ge rx160_pos, rx160_eos, rxscan163_done
-  rxscan163_scan:
-    set_addr $I10, rxscan163_loop
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-  rxscan163_done:
-.annotate "line", 89
+    set rx163_pos, $P10
+    ge rx163_pos, rx163_eos, rxscan166_done
+  rxscan166_scan:
+    set_addr $I10, rxscan166_loop
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+  rxscan166_done:
+.annotate "line", 93
   # rx subrule "before" subtype=zerowidth negate=1
-    rx160_cur."!cursor_pos"(rx160_pos)
-    .const 'Sub' $P165 = "35_1267204702.05125" 
-    capture_lex $P165
-    $P10 = rx160_cur."before"($P165)
-    if $P10, rx160_fail
-  alt169_0:
-.annotate "line", 90
-    set_addr $I10, alt169_1
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-.annotate "line", 91
+    rx163_cur."!cursor_pos"(rx163_pos)
+    .const 'Sub' $P168 = "35_1271336396.90314" 
+    capture_lex $P168
+    $P10 = rx163_cur."before"($P168)
+    if $P10, rx163_fail
+  alt172_0:
+.annotate "line", 94
+    set_addr $I10, alt172_1
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+.annotate "line", 95
   # rx subrule "statement_control" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_control"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_control"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_control")
-    rx160_pos = $P10."pos"()
-    goto alt169_end
-  alt169_1:
-.annotate "line", 92
+    rx163_pos = $P10."pos"()
+    goto alt172_end
+  alt172_1:
+.annotate "line", 96
   # rx subrule "EXPR" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."EXPR"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."EXPR"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx160_pos = $P10."pos"()
+    rx163_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."ws"()
-    unless $P10, rx160_fail
-    rx160_pos = $P10."pos"()
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."ws"()
+    unless $P10, rx163_fail
+    rx163_pos = $P10."pos"()
+.annotate "line", 101
+  # rx rxquantr173 ** 0..1
+    set_addr $I177, rxquantr173_done
+    rx163_cur."!mark_push"(0, rx163_pos, $I177)
+  rxquantr173_loop:
+  alt174_0:
 .annotate "line", 97
-  # rx rxquantr170 ** 0..1
-    set_addr $I174, rxquantr170_done
-    rx160_cur."!mark_push"(0, rx160_pos, $I174)
-  rxquantr170_loop:
-  alt171_0:
-.annotate "line", 93
-    set_addr $I10, alt171_1
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-.annotate "line", 94
+    set_addr $I10, alt174_1
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+.annotate "line", 98
   # rx subrule "MARKED" subtype=zerowidth negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."MARKED"("endstmt")
-    unless $P10, rx160_fail
-    goto alt171_end
-  alt171_1:
-    set_addr $I10, alt171_2
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-.annotate "line", 95
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."MARKED"("endstmt")
+    unless $P10, rx163_fail
+    goto alt174_end
+  alt174_1:
+    set_addr $I10, alt174_2
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+.annotate "line", 99
   # rx subrule "statement_mod_cond" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_mod_cond"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_mod_cond"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_cond")
-    rx160_pos = $P10."pos"()
-  # rx rxquantr172 ** 0..1
-    set_addr $I173, rxquantr172_done
-    rx160_cur."!mark_push"(0, rx160_pos, $I173)
-  rxquantr172_loop:
+    rx163_pos = $P10."pos"()
+  # rx rxquantr175 ** 0..1
+    set_addr $I176, rxquantr175_done
+    rx163_cur."!mark_push"(0, rx163_pos, $I176)
+  rxquantr175_loop:
   # rx subrule "statement_mod_loop" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_mod_loop"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_mod_loop"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_loop")
-    rx160_pos = $P10."pos"()
-    (rx160_rep) = rx160_cur."!mark_commit"($I173)
-  rxquantr172_done:
-    goto alt171_end
-  alt171_2:
-.annotate "line", 96
+    rx163_pos = $P10."pos"()
+    (rx163_rep) = rx163_cur."!mark_commit"($I176)
+  rxquantr175_done:
+    goto alt174_end
+  alt174_2:
+.annotate "line", 100
   # rx subrule "statement_mod_loop" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_mod_loop"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_mod_loop"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_loop")
-    rx160_pos = $P10."pos"()
-  alt171_end:
-.annotate "line", 97
-    (rx160_rep) = rx160_cur."!mark_commit"($I174)
-  rxquantr170_done:
-  alt169_end:
-.annotate "line", 88
+    rx163_pos = $P10."pos"()
+  alt174_end:
+.annotate "line", 101
+    (rx163_rep) = rx163_cur."!mark_commit"($I177)
+  rxquantr173_done:
+  alt172_end:
+.annotate "line", 92
   # rx pass
-    rx160_cur."!cursor_pass"(rx160_pos, "statement")
-    rx160_cur."!cursor_debug"("PASS  ", "statement", " at pos=", rx160_pos)
-    .return (rx160_cur)
-  rx160_fail:
+    rx163_cur."!cursor_pass"(rx163_pos, "statement")
+    rx163_cur."!cursor_debug"("PASS  ", "statement", " at pos=", rx163_pos)
+    .return (rx163_cur)
+  rx163_fail:
 .annotate "line", 4
-    (rx160_rep, rx160_pos, $I10, $P10) = rx160_cur."!mark_fail"(0)
-    lt rx160_pos, -1, rx160_done
-    eq rx160_pos, -1, rx160_fail
+    (rx163_rep, rx163_pos, $I10, $P10) = rx163_cur."!mark_fail"(0)
+    lt rx163_pos, -1, rx163_done
+    eq rx163_pos, -1, rx163_fail
     jump $I10
-  rx160_done:
-    rx160_cur."!cursor_fail"()
-    rx160_cur."!cursor_debug"("FAIL  ", "statement")
-    .return (rx160_cur)
+  rx163_done:
+    rx163_cur."!cursor_fail"()
+    rx163_cur."!cursor_debug"("FAIL  ", "statement")
+    .return (rx163_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement"  :subid("34_1267204702.05125") :method
+.sub "!PREFIX__statement"  :subid("34_1271336396.90314") :method
 .annotate "line", 4
-    new $P162, "ResizablePMCArray"
-    push $P162, ""
-    .return ($P162)
+    new $P165, "ResizablePMCArray"
+    push $P165, ""
+    .return ($P165)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block164"  :anon :subid("35_1267204702.05125") :method :outer("33_1267204702.05125")
-.annotate "line", 89
-    .local string rx166_tgt
-    .local int rx166_pos
-    .local int rx166_off
-    .local int rx166_eos
-    .local int rx166_rep
-    .local pmc rx166_cur
-    (rx166_cur, rx166_pos, rx166_tgt) = self."!cursor_start"()
-    rx166_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx166_cur
-    .local pmc match
-    .lex "$/", match
-    length rx166_eos, rx166_tgt
-    set rx166_off, 0
-    lt rx166_pos, 2, rx166_start
-    sub rx166_off, rx166_pos, 1
-    substr rx166_tgt, rx166_tgt, rx166_off
-  rx166_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan167_done
-    goto rxscan167_scan
-  rxscan167_loop:
-    ($P10) = rx166_cur."from"()
-    inc $P10
-    set rx166_pos, $P10
-    ge rx166_pos, rx166_eos, rxscan167_done
-  rxscan167_scan:
-    set_addr $I10, rxscan167_loop
-    rx166_cur."!mark_push"(0, rx166_pos, $I10)
-  rxscan167_done:
-  alt168_0:
-    set_addr $I10, alt168_1
-    rx166_cur."!mark_push"(0, rx166_pos, $I10)
+.sub "_block167"  :anon :subid("35_1271336396.90314") :method :outer("33_1271336396.90314")
+.annotate "line", 93
+    .local string rx169_tgt
+    .local int rx169_pos
+    .local int rx169_off
+    .local int rx169_eos
+    .local int rx169_rep
+    .local pmc rx169_cur
+    (rx169_cur, rx169_pos, rx169_tgt) = self."!cursor_start"()
+    rx169_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx169_cur
+    .local pmc match
+    .lex "$/", match
+    length rx169_eos, rx169_tgt
+    set rx169_off, 0
+    lt rx169_pos, 2, rx169_start
+    sub rx169_off, rx169_pos, 1
+    substr rx169_tgt, rx169_tgt, rx169_off
+  rx169_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan170_done
+    goto rxscan170_scan
+  rxscan170_loop:
+    ($P10) = rx169_cur."from"()
+    inc $P10
+    set rx169_pos, $P10
+    ge rx169_pos, rx169_eos, rxscan170_done
+  rxscan170_scan:
+    set_addr $I10, rxscan170_loop
+    rx169_cur."!mark_push"(0, rx169_pos, $I10)
+  rxscan170_done:
+  alt171_0:
+    set_addr $I10, alt171_1
+    rx169_cur."!mark_push"(0, rx169_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx166_pos, rx166_eos, rx166_fail
-    sub $I10, rx166_pos, rx166_off
-    substr $S10, rx166_tgt, $I10, 1
+    ge rx169_pos, rx169_eos, rx169_fail
+    sub $I10, rx169_pos, rx169_off
+    substr $S10, rx169_tgt, $I10, 1
     index $I11, "])}", $S10
-    lt $I11, 0, rx166_fail
-    inc rx166_pos
-    goto alt168_end
-  alt168_1:
+    lt $I11, 0, rx169_fail
+    inc rx169_pos
+    goto alt171_end
+  alt171_1:
   # rxanchor eos
-    ne rx166_pos, rx166_eos, rx166_fail
-  alt168_end:
+    ne rx169_pos, rx169_eos, rx169_fail
+  alt171_end:
   # rx pass
-    rx166_cur."!cursor_pass"(rx166_pos, "")
-    rx166_cur."!cursor_debug"("PASS  ", "", " at pos=", rx166_pos)
-    .return (rx166_cur)
-  rx166_fail:
-    (rx166_rep, rx166_pos, $I10, $P10) = rx166_cur."!mark_fail"(0)
-    lt rx166_pos, -1, rx166_done
-    eq rx166_pos, -1, rx166_fail
-    jump $I10
-  rx166_done:
-    rx166_cur."!cursor_fail"()
-    rx166_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx166_cur)
+    rx169_cur."!cursor_pass"(rx169_pos, "")
+    rx169_cur."!cursor_debug"("PASS  ", "", " at pos=", rx169_pos)
+    .return (rx169_cur)
+  rx169_fail:
+    (rx169_rep, rx169_pos, $I10, $P10) = rx169_cur."!mark_fail"(0)
+    lt rx169_pos, -1, rx169_done
+    eq rx169_pos, -1, rx169_fail
+    jump $I10
+  rx169_done:
+    rx169_cur."!cursor_fail"()
+    rx169_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx169_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "eat_terminator"  :subid("36_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx176_tgt
-    .local int rx176_pos
-    .local int rx176_off
-    .local int rx176_eos
-    .local int rx176_rep
-    .local pmc rx176_cur
-    (rx176_cur, rx176_pos, rx176_tgt) = self."!cursor_start"()
-    rx176_cur."!cursor_debug"("START ", "eat_terminator")
-    .lex unicode:"$\x{a2}", rx176_cur
-    .local pmc match
-    .lex "$/", match
-    length rx176_eos, rx176_tgt
-    set rx176_off, 0
-    lt rx176_pos, 2, rx176_start
-    sub rx176_off, rx176_pos, 1
-    substr rx176_tgt, rx176_tgt, rx176_off
-  rx176_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan179_done
-    goto rxscan179_scan
-  rxscan179_loop:
-    ($P10) = rx176_cur."from"()
-    inc $P10
-    set rx176_pos, $P10
-    ge rx176_pos, rx176_eos, rxscan179_done
-  rxscan179_scan:
-    set_addr $I10, rxscan179_loop
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-  rxscan179_done:
-  alt180_0:
-.annotate "line", 101
-    set_addr $I10, alt180_1
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 102
+.sub "eat_terminator"  :subid("36_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 4
+    .local string rx179_tgt
+    .local int rx179_pos
+    .local int rx179_off
+    .local int rx179_eos
+    .local int rx179_rep
+    .local pmc rx179_cur
+    (rx179_cur, rx179_pos, rx179_tgt) = self."!cursor_start"()
+    rx179_cur."!cursor_debug"("START ", "eat_terminator")
+    .lex unicode:"$\x{a2}", rx179_cur
+    .local pmc match
+    .lex "$/", match
+    length rx179_eos, rx179_tgt
+    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:
+    $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:
+  alt183_0:
+.annotate "line", 105
+    set_addr $I10, alt183_1
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+.annotate "line", 106
   # rx literal  ";"
-    add $I11, rx176_pos, 1
-    gt $I11, rx176_eos, rx176_fail
-    sub $I11, rx176_pos, rx176_off
-    substr $S10, rx176_tgt, $I11, 1
-    ne $S10, ";", rx176_fail
-    add rx176_pos, 1
-    goto alt180_end
-  alt180_1:
-    set_addr $I10, alt180_2
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 103
+    add $I11, rx179_pos, 1
+    gt $I11, rx179_eos, rx179_fail
+    sub $I11, rx179_pos, rx179_off
+    substr $S10, rx179_tgt, $I11, 1
+    ne $S10, ";", rx179_fail
+    add rx179_pos, 1
+    goto alt183_end
+  alt183_1:
+    set_addr $I10, alt183_2
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+.annotate "line", 107
   # rx subrule "MARKED" subtype=zerowidth negate=
-    rx176_cur."!cursor_pos"(rx176_pos)
-    $P10 = rx176_cur."MARKED"("endstmt")
-    unless $P10, rx176_fail
-    goto alt180_end
-  alt180_2:
-    set_addr $I10, alt180_3
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 104
+    rx179_cur."!cursor_pos"(rx179_pos)
+    $P10 = rx179_cur."MARKED"("endstmt")
+    unless $P10, rx179_fail
+    goto alt183_end
+  alt183_2:
+    set_addr $I10, alt183_3
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+.annotate "line", 108
   # rx subrule "terminator" subtype=zerowidth negate=
-    rx176_cur."!cursor_pos"(rx176_pos)
-    $P10 = rx176_cur."terminator"()
-    unless $P10, rx176_fail
-    goto alt180_end
-  alt180_3:
-.annotate "line", 105
+    rx179_cur."!cursor_pos"(rx179_pos)
+    $P10 = rx179_cur."terminator"()
+    unless $P10, rx179_fail
+    goto alt183_end
+  alt183_3:
+.annotate "line", 109
   # rxanchor eos
-    ne rx176_pos, rx176_eos, rx176_fail
-  alt180_end:
-.annotate "line", 101
+    ne rx179_pos, rx179_eos, rx179_fail
+  alt183_end:
+.annotate "line", 105
   # rx pass
-    rx176_cur."!cursor_pass"(rx176_pos, "eat_terminator")
-    rx176_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx176_pos)
-    .return (rx176_cur)
-  rx176_fail:
+    rx179_cur."!cursor_pass"(rx179_pos, "eat_terminator")
+    rx179_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx179_pos)
+    .return (rx179_cur)
+  rx179_fail:
 .annotate "line", 4
-    (rx176_rep, rx176_pos, $I10, $P10) = rx176_cur."!mark_fail"(0)
-    lt rx176_pos, -1, rx176_done
-    eq rx176_pos, -1, rx176_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
-  rx176_done:
-    rx176_cur."!cursor_fail"()
-    rx176_cur."!cursor_debug"("FAIL  ", "eat_terminator")
-    .return (rx176_cur)
+  rx179_done:
+    rx179_cur."!cursor_fail"()
+    rx179_cur."!cursor_debug"("FAIL  ", "eat_terminator")
+    .return (rx179_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__eat_terminator"  :subid("37_1267204702.05125") :method
+.sub "!PREFIX__eat_terminator"  :subid("37_1271336396.90314") :method
 .annotate "line", 4
-    new $P178, "ResizablePMCArray"
-    push $P178, ""
-    push $P178, ""
-    push $P178, ""
-    push $P178, ";"
-    .return ($P178)
+    new $P181, "ResizablePMCArray"
+    push $P181, ""
+    push $P181, ""
+    push $P181, ""
+    push $P181, ";"
+    .return ($P181)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "xblock"  :subid("38_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "xblock"  :subid("38_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx182_tgt
-    .local int rx182_pos
-    .local int rx182_off
-    .local int rx182_eos
-    .local int rx182_rep
-    .local pmc rx182_cur
-    (rx182_cur, rx182_pos, rx182_tgt) = self."!cursor_start"()
-    rx182_cur."!cursor_debug"("START ", "xblock")
-    .lex unicode:"$\x{a2}", rx182_cur
+    .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) = self."!cursor_start"()
+    rx185_cur."!cursor_debug"("START ", "xblock")
+    .lex unicode:"$\x{a2}", rx185_cur
     .local pmc match
     .lex "$/", match
-    length rx182_eos, rx182_tgt
-    set rx182_off, 0
-    lt rx182_pos, 2, rx182_start
-    sub rx182_off, rx182_pos, 1
-    substr rx182_tgt, rx182_tgt, rx182_off
-  rx182_start:
+    length rx185_eos, rx185_tgt
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan186_done
-    goto rxscan186_scan
-  rxscan186_loop:
-    ($P10) = rx182_cur."from"()
+    ne $I10, -1, rxscan189_done
+    goto rxscan189_scan
+  rxscan189_loop:
+    ($P10) = rx185_cur."from"()
     inc $P10
-    set rx182_pos, $P10
-    ge rx182_pos, rx182_eos, rxscan186_done
-  rxscan186_scan:
-    set_addr $I10, rxscan186_loop
-    rx182_cur."!mark_push"(0, rx182_pos, $I10)
-  rxscan186_done:
-.annotate "line", 109
+    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", 113
   # rx subrule "EXPR" subtype=capture negate=
-    rx182_cur."!cursor_pos"(rx182_pos)
-    $P10 = rx182_cur."EXPR"()
-    unless $P10, rx182_fail
-    rx182_cur."!mark_push"(0, -1, 0, $P10)
+    rx185_cur."!cursor_pos"(rx185_pos)
+    $P10 = rx185_cur."EXPR"()
+    unless $P10, rx185_fail
+    rx185_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx182_pos = $P10."pos"()
+    rx185_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx182_cur."!cursor_pos"(rx182_pos)
-    $P10 = rx182_cur."ws"()
-    unless $P10, rx182_fail
-    rx182_pos = $P10."pos"()
+    rx185_cur."!cursor_pos"(rx185_pos)
+    $P10 = rx185_cur."ws"()
+    unless $P10, rx185_fail
+    rx185_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx182_cur."!cursor_pos"(rx182_pos)
-    $P10 = rx182_cur."pblock"()
-    unless $P10, rx182_fail
-    rx182_cur."!mark_push"(0, -1, 0, $P10)
+    rx185_cur."!cursor_pos"(rx185_pos)
+    $P10 = rx185_cur."pblock"()
+    unless $P10, rx185_fail
+    rx185_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx182_pos = $P10."pos"()
-.annotate "line", 108
+    rx185_pos = $P10."pos"()
+.annotate "line", 112
   # rx pass
-    rx182_cur."!cursor_pass"(rx182_pos, "xblock")
-    rx182_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx182_pos)
-    .return (rx182_cur)
-  rx182_fail:
+    rx185_cur."!cursor_pass"(rx185_pos, "xblock")
+    rx185_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx185_pos)
+    .return (rx185_cur)
+  rx185_fail:
 .annotate "line", 4
-    (rx182_rep, rx182_pos, $I10, $P10) = rx182_cur."!mark_fail"(0)
-    lt rx182_pos, -1, rx182_done
-    eq rx182_pos, -1, rx182_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
-  rx182_done:
-    rx182_cur."!cursor_fail"()
-    rx182_cur."!cursor_debug"("FAIL  ", "xblock")
-    .return (rx182_cur)
+  rx185_done:
+    rx185_cur."!cursor_fail"()
+    rx185_cur."!cursor_debug"("FAIL  ", "xblock")
+    .return (rx185_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__xblock"  :subid("39_1267204702.05125") :method
+.sub "!PREFIX__xblock"  :subid("39_1271336396.90314") :method
 .annotate "line", 4
-    $P184 = self."!PREFIX__!subrule"("EXPR", "")
-    new $P185, "ResizablePMCArray"
-    push $P185, $P184
-    .return ($P185)
+    $P187 = self."!PREFIX__!subrule"("EXPR", "")
+    new $P188, "ResizablePMCArray"
+    push $P188, $P187
+    .return ($P188)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pblock"  :subid("40_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "pblock"  :subid("40_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx188_tgt
-    .local int rx188_pos
-    .local int rx188_off
-    .local int rx188_eos
-    .local int rx188_rep
-    .local pmc rx188_cur
-    (rx188_cur, rx188_pos, rx188_tgt) = self."!cursor_start"()
-    rx188_cur."!cursor_debug"("START ", "pblock")
-    .lex unicode:"$\x{a2}", rx188_cur
+    .local string rx191_tgt
+    .local int rx191_pos
+    .local int rx191_off
+    .local int rx191_eos
+    .local int rx191_rep
+    .local pmc rx191_cur
+    (rx191_cur, rx191_pos, rx191_tgt) = self."!cursor_start"()
+    rx191_cur."!cursor_debug"("START ", "pblock")
+    .lex unicode:"$\x{a2}", rx191_cur
     .local pmc match
     .lex "$/", match
-    length rx188_eos, rx188_tgt
-    set rx188_off, 0
-    lt rx188_pos, 2, rx188_start
-    sub rx188_off, rx188_pos, 1
-    substr rx188_tgt, rx188_tgt, rx188_off
-  rx188_start:
+    length rx191_eos, rx191_tgt
+    set rx191_off, 0
+    lt rx191_pos, 2, rx191_start
+    sub rx191_off, rx191_pos, 1
+    substr rx191_tgt, rx191_tgt, rx191_off
+  rx191_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan193_done
-    goto rxscan193_scan
-  rxscan193_loop:
-    ($P10) = rx188_cur."from"()
+    ne $I10, -1, rxscan196_done
+    goto rxscan196_scan
+  rxscan196_loop:
+    ($P10) = rx191_cur."from"()
     inc $P10
-    set rx188_pos, $P10
-    ge rx188_pos, rx188_eos, rxscan193_done
-  rxscan193_scan:
-    set_addr $I10, rxscan193_loop
-    rx188_cur."!mark_push"(0, rx188_pos, $I10)
-  rxscan193_done:
-  alt194_0:
-.annotate "line", 112
-    set_addr $I10, alt194_1
-    rx188_cur."!mark_push"(0, rx188_pos, $I10)
-.annotate "line", 113
+    set rx191_pos, $P10
+    ge rx191_pos, rx191_eos, rxscan196_done
+  rxscan196_scan:
+    set_addr $I10, rxscan196_loop
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+  rxscan196_done:
+  alt197_0:
+.annotate "line", 116
+    set_addr $I10, alt197_1
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+.annotate "line", 117
   # rx subrule "lambda" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."lambda"()
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-.annotate "line", 114
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."lambda"()
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+.annotate "line", 118
   # rx subrule "newpad" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."newpad"()
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-.annotate "line", 115
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."newpad"()
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+.annotate "line", 119
   # rx subrule "signature" subtype=capture negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."signature"()
-    unless $P10, rx188_fail
-    rx188_cur."!mark_push"(0, -1, 0, $P10)
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."signature"()
+    unless $P10, rx191_fail
+    rx191_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx188_pos = $P10."pos"()
-.annotate "line", 116
+    rx191_pos = $P10."pos"()
+.annotate "line", 120
   # rx subrule "blockoid" subtype=capture negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."blockoid"()
-    unless $P10, rx188_fail
-    rx188_cur."!mark_push"(0, -1, 0, $P10)
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."blockoid"()
+    unless $P10, rx191_fail
+    rx191_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx188_pos = $P10."pos"()
-.annotate "line", 113
-    goto alt194_end
-  alt194_1:
-    set_addr $I10, alt194_2
-    rx188_cur."!mark_push"(0, rx188_pos, $I10)
+    rx191_pos = $P10."pos"()
 .annotate "line", 117
+    goto alt197_end
+  alt197_1:
+    set_addr $I10, alt197_2
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+.annotate "line", 121
   # rx enumcharlist negate=0 zerowidth
-    ge rx188_pos, rx188_eos, rx188_fail
-    sub $I10, rx188_pos, rx188_off
-    substr $S10, rx188_tgt, $I10, 1
+    ge rx191_pos, rx191_eos, rx191_fail
+    sub $I10, rx191_pos, rx191_off
+    substr $S10, rx191_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx188_fail
-.annotate "line", 118
+    lt $I11, 0, rx191_fail
+.annotate "line", 122
   # rx subrule "newpad" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."newpad"()
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-.annotate "line", 119
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."newpad"()
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+.annotate "line", 123
   # rx subrule "blockoid" subtype=capture negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."blockoid"()
-    unless $P10, rx188_fail
-    rx188_cur."!mark_push"(0, -1, 0, $P10)
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."blockoid"()
+    unless $P10, rx191_fail
+    rx191_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx188_pos = $P10."pos"()
-.annotate "line", 117
-    goto alt194_end
-  alt194_2:
-.annotate "line", 120
+    rx191_pos = $P10."pos"()
+.annotate "line", 121
+    goto alt197_end
+  alt197_2:
+.annotate "line", 124
   # rx subrule "panic" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."panic"("Missing block")
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-  alt194_end:
-.annotate "line", 112
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."panic"("Missing block")
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+  alt197_end:
+.annotate "line", 116
   # rx pass
-    rx188_cur."!cursor_pass"(rx188_pos, "pblock")
-    rx188_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx188_pos)
-    .return (rx188_cur)
-  rx188_fail:
+    rx191_cur."!cursor_pass"(rx191_pos, "pblock")
+    rx191_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx191_pos)
+    .return (rx191_cur)
+  rx191_fail:
 .annotate "line", 4
-    (rx188_rep, rx188_pos, $I10, $P10) = rx188_cur."!mark_fail"(0)
-    lt rx188_pos, -1, rx188_done
-    eq rx188_pos, -1, rx188_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
-  rx188_done:
-    rx188_cur."!cursor_fail"()
-    rx188_cur."!cursor_debug"("FAIL  ", "pblock")
-    .return (rx188_cur)
+  rx191_done:
+    rx191_cur."!cursor_fail"()
+    rx191_cur."!cursor_debug"("FAIL  ", "pblock")
+    .return (rx191_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pblock"  :subid("41_1267204702.05125") :method
+.sub "!PREFIX__pblock"  :subid("41_1271336396.90314") :method
 .annotate "line", 4
-    $P190 = self."!PREFIX__!subrule"("", "")
-    $P191 = self."!PREFIX__!subrule"("", "")
-    new $P192, "ResizablePMCArray"
-    push $P192, $P190
-    push $P192, "{"
-    push $P192, $P191
-    .return ($P192)
+    $P193 = self."!PREFIX__!subrule"("", "")
+    $P194 = self."!PREFIX__!subrule"("", "")
+    new $P195, "ResizablePMCArray"
+    push $P195, $P193
+    push $P195, "{"
+    push $P195, $P194
+    .return ($P195)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "lambda"  :subid("42_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "lambda"  :subid("42_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx196_tgt
-    .local int rx196_pos
-    .local int rx196_off
-    .local int rx196_eos
-    .local int rx196_rep
-    .local pmc rx196_cur
-    (rx196_cur, rx196_pos, rx196_tgt) = self."!cursor_start"()
-    rx196_cur."!cursor_debug"("START ", "lambda")
-    .lex unicode:"$\x{a2}", rx196_cur
+    .local string rx199_tgt
+    .local int rx199_pos
+    .local int rx199_off
+    .local int rx199_eos
+    .local int rx199_rep
+    .local pmc rx199_cur
+    (rx199_cur, rx199_pos, rx199_tgt) = self."!cursor_start"()
+    rx199_cur."!cursor_debug"("START ", "lambda")
+    .lex unicode:"$\x{a2}", rx199_cur
     .local pmc match
     .lex "$/", match
-    length rx196_eos, rx196_tgt
-    set rx196_off, 0
-    lt rx196_pos, 2, rx196_start
-    sub rx196_off, rx196_pos, 1
-    substr rx196_tgt, rx196_tgt, rx196_off
-  rx196_start:
+    length rx199_eos, rx199_tgt
+    set rx199_off, 0
+    lt rx199_pos, 2, rx199_start
+    sub rx199_off, rx199_pos, 1
+    substr rx199_tgt, rx199_tgt, rx199_off
+  rx199_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan199_done
-    goto rxscan199_scan
-  rxscan199_loop:
-    ($P10) = rx196_cur."from"()
+    ne $I10, -1, rxscan202_done
+    goto rxscan202_scan
+  rxscan202_loop:
+    ($P10) = rx199_cur."from"()
     inc $P10
-    set rx196_pos, $P10
-    ge rx196_pos, rx196_eos, rxscan199_done
-  rxscan199_scan:
-    set_addr $I10, rxscan199_loop
-    rx196_cur."!mark_push"(0, rx196_pos, $I10)
-  rxscan199_done:
-  alt200_0:
-.annotate "line", 123
-    set_addr $I10, alt200_1
-    rx196_cur."!mark_push"(0, rx196_pos, $I10)
+    set rx199_pos, $P10
+    ge rx199_pos, rx199_eos, rxscan202_done
+  rxscan202_scan:
+    set_addr $I10, rxscan202_loop
+    rx199_cur."!mark_push"(0, rx199_pos, $I10)
+  rxscan202_done:
+  alt203_0:
+.annotate "line", 127
+    set_addr $I10, alt203_1
+    rx199_cur."!mark_push"(0, rx199_pos, $I10)
   # rx literal  "->"
-    add $I11, rx196_pos, 2
-    gt $I11, rx196_eos, rx196_fail
-    sub $I11, rx196_pos, rx196_off
-    substr $S10, rx196_tgt, $I11, 2
-    ne $S10, "->", rx196_fail
-    add rx196_pos, 2
-    goto alt200_end
-  alt200_1:
+    add $I11, rx199_pos, 2
+    gt $I11, rx199_eos, rx199_fail
+    sub $I11, rx199_pos, rx199_off
+    substr $S10, rx199_tgt, $I11, 2
+    ne $S10, "->", rx199_fail
+    add rx199_pos, 2
+    goto alt203_end
+  alt203_1:
   # rx literal  "<->"
-    add $I11, rx196_pos, 3
-    gt $I11, rx196_eos, rx196_fail
-    sub $I11, rx196_pos, rx196_off
-    substr $S10, rx196_tgt, $I11, 3
-    ne $S10, "<->", rx196_fail
-    add rx196_pos, 3
-  alt200_end:
+    add $I11, rx199_pos, 3
+    gt $I11, rx199_eos, rx199_fail
+    sub $I11, rx199_pos, rx199_off
+    substr $S10, rx199_tgt, $I11, 3
+    ne $S10, "<->", rx199_fail
+    add rx199_pos, 3
+  alt203_end:
   # rx pass
-    rx196_cur."!cursor_pass"(rx196_pos, "lambda")
-    rx196_cur."!cursor_debug"("PASS  ", "lambda", " at pos=", rx196_pos)
-    .return (rx196_cur)
-  rx196_fail:
+    rx199_cur."!cursor_pass"(rx199_pos, "lambda")
+    rx199_cur."!cursor_debug"("PASS  ", "lambda", " at pos=", rx199_pos)
+    .return (rx199_cur)
+  rx199_fail:
 .annotate "line", 4
-    (rx196_rep, rx196_pos, $I10, $P10) = rx196_cur."!mark_fail"(0)
-    lt rx196_pos, -1, rx196_done
-    eq rx196_pos, -1, rx196_fail
+    (rx199_rep, rx199_pos, $I10, $P10) = rx199_cur."!mark_fail"(0)
+    lt rx199_pos, -1, rx199_done
+    eq rx199_pos, -1, rx199_fail
     jump $I10
-  rx196_done:
-    rx196_cur."!cursor_fail"()
-    rx196_cur."!cursor_debug"("FAIL  ", "lambda")
-    .return (rx196_cur)
+  rx199_done:
+    rx199_cur."!cursor_fail"()
+    rx199_cur."!cursor_debug"("FAIL  ", "lambda")
+    .return (rx199_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__lambda"  :subid("43_1267204702.05125") :method
+.sub "!PREFIX__lambda"  :subid("43_1271336396.90314") :method
 .annotate "line", 4
-    new $P198, "ResizablePMCArray"
-    push $P198, "<->"
-    push $P198, "->"
-    .return ($P198)
+    new $P201, "ResizablePMCArray"
+    push $P201, "<->"
+    push $P201, "->"
+    .return ($P201)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "block"  :subid("44_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "block"  :subid("44_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx202_tgt
-    .local int rx202_pos
-    .local int rx202_off
-    .local int rx202_eos
-    .local int rx202_rep
-    .local pmc rx202_cur
-    (rx202_cur, rx202_pos, rx202_tgt) = self."!cursor_start"()
-    rx202_cur."!cursor_debug"("START ", "block")
-    .lex unicode:"$\x{a2}", rx202_cur
+    .local string rx205_tgt
+    .local int rx205_pos
+    .local int rx205_off
+    .local int rx205_eos
+    .local int rx205_rep
+    .local pmc rx205_cur
+    (rx205_cur, rx205_pos, rx205_tgt) = self."!cursor_start"()
+    rx205_cur."!cursor_debug"("START ", "block")
+    .lex unicode:"$\x{a2}", rx205_cur
     .local pmc match
     .lex "$/", match
-    length rx202_eos, rx202_tgt
-    set rx202_off, 0
-    lt rx202_pos, 2, rx202_start
-    sub rx202_off, rx202_pos, 1
-    substr rx202_tgt, rx202_tgt, rx202_off
-  rx202_start:
+    length rx205_eos, rx205_tgt
+    set rx205_off, 0
+    lt rx205_pos, 2, rx205_start
+    sub rx205_off, rx205_pos, 1
+    substr rx205_tgt, rx205_tgt, rx205_off
+  rx205_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan206_done
-    goto rxscan206_scan
-  rxscan206_loop:
-    ($P10) = rx202_cur."from"()
+    ne $I10, -1, rxscan209_done
+    goto rxscan209_scan
+  rxscan209_loop:
+    ($P10) = rx205_cur."from"()
     inc $P10
-    set rx202_pos, $P10
-    ge rx202_pos, rx202_eos, rxscan206_done
-  rxscan206_scan:
-    set_addr $I10, rxscan206_loop
-    rx202_cur."!mark_push"(0, rx202_pos, $I10)
-  rxscan206_done:
-  alt207_0:
-.annotate "line", 126
-    set_addr $I10, alt207_1
-    rx202_cur."!mark_push"(0, rx202_pos, $I10)
+    set rx205_pos, $P10
+    ge rx205_pos, rx205_eos, rxscan209_done
+  rxscan209_scan:
+    set_addr $I10, rxscan209_loop
+    rx205_cur."!mark_push"(0, rx205_pos, $I10)
+  rxscan209_done:
+  alt210_0:
+.annotate "line", 130
+    set_addr $I10, alt210_1
+    rx205_cur."!mark_push"(0, rx205_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx202_pos, rx202_eos, rx202_fail
-    sub $I10, rx202_pos, rx202_off
-    substr $S10, rx202_tgt, $I10, 1
+    ge rx205_pos, rx205_eos, rx205_fail
+    sub $I10, rx205_pos, rx205_off
+    substr $S10, rx205_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx202_fail
-    goto alt207_end
-  alt207_1:
+    lt $I11, 0, rx205_fail
+    goto alt210_end
+  alt210_1:
   # rx subrule "panic" subtype=method negate=
-    rx202_cur."!cursor_pos"(rx202_pos)
-    $P10 = rx202_cur."panic"("Missing block")
-    unless $P10, rx202_fail
-    rx202_pos = $P10."pos"()
-  alt207_end:
-.annotate "line", 127
+    rx205_cur."!cursor_pos"(rx205_pos)
+    $P10 = rx205_cur."panic"("Missing block")
+    unless $P10, rx205_fail
+    rx205_pos = $P10."pos"()
+  alt210_end:
+.annotate "line", 131
   # rx subrule "newpad" subtype=method negate=
-    rx202_cur."!cursor_pos"(rx202_pos)
-    $P10 = rx202_cur."newpad"()
-    unless $P10, rx202_fail
-    rx202_pos = $P10."pos"()
-.annotate "line", 128
+    rx205_cur."!cursor_pos"(rx205_pos)
+    $P10 = rx205_cur."newpad"()
+    unless $P10, rx205_fail
+    rx205_pos = $P10."pos"()
+.annotate "line", 132
   # rx subrule "blockoid" subtype=capture negate=
-    rx202_cur."!cursor_pos"(rx202_pos)
-    $P10 = rx202_cur."blockoid"()
-    unless $P10, rx202_fail
-    rx202_cur."!mark_push"(0, -1, 0, $P10)
+    rx205_cur."!cursor_pos"(rx205_pos)
+    $P10 = rx205_cur."blockoid"()
+    unless $P10, rx205_fail
+    rx205_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx202_pos = $P10."pos"()
-.annotate "line", 125
+    rx205_pos = $P10."pos"()
+.annotate "line", 129
   # rx pass
-    rx202_cur."!cursor_pass"(rx202_pos, "block")
-    rx202_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx202_pos)
-    .return (rx202_cur)
-  rx202_fail:
+    rx205_cur."!cursor_pass"(rx205_pos, "block")
+    rx205_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx205_pos)
+    .return (rx205_cur)
+  rx205_fail:
 .annotate "line", 4
-    (rx202_rep, rx202_pos, $I10, $P10) = rx202_cur."!mark_fail"(0)
-    lt rx202_pos, -1, rx202_done
-    eq rx202_pos, -1, rx202_fail
+    (rx205_rep, rx205_pos, $I10, $P10) = rx205_cur."!mark_fail"(0)
+    lt rx205_pos, -1, rx205_done
+    eq rx205_pos, -1, rx205_fail
     jump $I10
-  rx202_done:
-    rx202_cur."!cursor_fail"()
-    rx202_cur."!cursor_debug"("FAIL  ", "block")
-    .return (rx202_cur)
+  rx205_done:
+    rx205_cur."!cursor_fail"()
+    rx205_cur."!cursor_debug"("FAIL  ", "block")
+    .return (rx205_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__block"  :subid("45_1267204702.05125") :method
+.sub "!PREFIX__block"  :subid("45_1271336396.90314") :method
 .annotate "line", 4
-    $P204 = self."!PREFIX__!subrule"("", "")
-    new $P205, "ResizablePMCArray"
-    push $P205, $P204
-    push $P205, "{"
-    .return ($P205)
+    $P207 = self."!PREFIX__!subrule"("", "")
+    new $P208, "ResizablePMCArray"
+    push $P208, $P207
+    push $P208, "{"
+    .return ($P208)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blockoid"  :subid("46_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "blockoid"  :subid("46_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx209_tgt
-    .local int rx209_pos
-    .local int rx209_off
-    .local int rx209_eos
-    .local int rx209_rep
-    .local pmc rx209_cur
-    (rx209_cur, rx209_pos, rx209_tgt) = self."!cursor_start"()
-    rx209_cur."!cursor_debug"("START ", "blockoid")
-    .lex unicode:"$\x{a2}", rx209_cur
+    .local string rx212_tgt
+    .local int rx212_pos
+    .local int rx212_off
+    .local int rx212_eos
+    .local int rx212_rep
+    .local pmc rx212_cur
+    (rx212_cur, rx212_pos, rx212_tgt) = self."!cursor_start"()
+    rx212_cur."!cursor_debug"("START ", "blockoid")
+    .lex unicode:"$\x{a2}", rx212_cur
     .local pmc match
     .lex "$/", match
-    length rx209_eos, rx209_tgt
-    set rx209_off, 0
-    lt rx209_pos, 2, rx209_start
-    sub rx209_off, rx209_pos, 1
-    substr rx209_tgt, rx209_tgt, rx209_off
-  rx209_start:
+    length rx212_eos, rx212_tgt
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan213_done
-    goto rxscan213_scan
-  rxscan213_loop:
-    ($P10) = rx209_cur."from"()
+    ne $I10, -1, rxscan216_done
+    goto rxscan216_scan
+  rxscan216_loop:
+    ($P10) = rx212_cur."from"()
     inc $P10
-    set rx209_pos, $P10
-    ge rx209_pos, rx209_eos, rxscan213_done
-  rxscan213_scan:
-    set_addr $I10, rxscan213_loop
-    rx209_cur."!mark_push"(0, rx209_pos, $I10)
-  rxscan213_done:
-.annotate "line", 132
+    set rx212_pos, $P10
+    ge rx212_pos, rx212_eos, rxscan216_done
+  rxscan216_scan:
+    set_addr $I10, rxscan216_loop
+    rx212_cur."!mark_push"(0, rx212_pos, $I10)
+  rxscan216_done:
+.annotate "line", 136
   # rx subrule "finishpad" subtype=method negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."finishpad"()
-    unless $P10, rx209_fail
-    rx209_pos = $P10."pos"()
-.annotate "line", 133
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."finishpad"()
+    unless $P10, rx212_fail
+    rx212_pos = $P10."pos"()
+.annotate "line", 137
   # rx literal  "{"
-    add $I11, rx209_pos, 1
-    gt $I11, rx209_eos, rx209_fail
-    sub $I11, rx209_pos, rx209_off
-    substr $S10, rx209_tgt, $I11, 1
-    ne $S10, "{", rx209_fail
-    add rx209_pos, 1
+    add $I11, rx212_pos, 1
+    gt $I11, rx212_eos, rx212_fail
+    sub $I11, rx212_pos, rx212_off
+    substr $S10, rx212_tgt, $I11, 1
+    ne $S10, "{", rx212_fail
+    add rx212_pos, 1
   # rx subrule "statementlist" subtype=capture negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."statementlist"()
-    unless $P10, rx209_fail
-    rx209_cur."!mark_push"(0, -1, 0, $P10)
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."statementlist"()
+    unless $P10, rx212_fail
+    rx212_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statementlist")
-    rx209_pos = $P10."pos"()
-  alt214_0:
-    set_addr $I10, alt214_1
-    rx209_cur."!mark_push"(0, rx209_pos, $I10)
+    rx212_pos = $P10."pos"()
+  alt217_0:
+    set_addr $I10, alt217_1
+    rx212_cur."!mark_push"(0, rx212_pos, $I10)
   # rx literal  "}"
-    add $I11, rx209_pos, 1
-    gt $I11, rx209_eos, rx209_fail
-    sub $I11, rx209_pos, rx209_off
-    substr $S10, rx209_tgt, $I11, 1
-    ne $S10, "}", rx209_fail
-    add rx209_pos, 1
-    goto alt214_end
-  alt214_1:
+    add $I11, rx212_pos, 1
+    gt $I11, rx212_eos, rx212_fail
+    sub $I11, rx212_pos, rx212_off
+    substr $S10, rx212_tgt, $I11, 1
+    ne $S10, "}", rx212_fail
+    add rx212_pos, 1
+    goto alt217_end
+  alt217_1:
   # rx subrule "FAILGOAL" subtype=method negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."FAILGOAL"("'}'")
-    unless $P10, rx209_fail
-    rx209_pos = $P10."pos"()
-  alt214_end:
-.annotate "line", 134
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."FAILGOAL"("'}'")
+    unless $P10, rx212_fail
+    rx212_pos = $P10."pos"()
+  alt217_end:
+.annotate "line", 138
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."ENDSTMT"()
-    unless $P10, rx209_fail
-.annotate "line", 131
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."ENDSTMT"()
+    unless $P10, rx212_fail
+.annotate "line", 135
   # rx pass
-    rx209_cur."!cursor_pass"(rx209_pos, "blockoid")
-    rx209_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx209_pos)
-    .return (rx209_cur)
-  rx209_fail:
+    rx212_cur."!cursor_pass"(rx212_pos, "blockoid")
+    rx212_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx212_pos)
+    .return (rx212_cur)
+  rx212_fail:
 .annotate "line", 4
-    (rx209_rep, rx209_pos, $I10, $P10) = rx209_cur."!mark_fail"(0)
-    lt rx209_pos, -1, rx209_done
-    eq rx209_pos, -1, rx209_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
-  rx209_done:
-    rx209_cur."!cursor_fail"()
-    rx209_cur."!cursor_debug"("FAIL  ", "blockoid")
-    .return (rx209_cur)
+  rx212_done:
+    rx212_cur."!cursor_fail"()
+    rx212_cur."!cursor_debug"("FAIL  ", "blockoid")
+    .return (rx212_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blockoid"  :subid("47_1267204702.05125") :method
+.sub "!PREFIX__blockoid"  :subid("47_1271336396.90314") :method
 .annotate "line", 4
-    $P211 = self."!PREFIX__!subrule"("", "")
-    new $P212, "ResizablePMCArray"
-    push $P212, $P211
-    .return ($P212)
+    $P214 = self."!PREFIX__!subrule"("", "")
+    new $P215, "ResizablePMCArray"
+    push $P215, $P214
+    .return ($P215)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "newpad"  :subid("48_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "newpad"  :subid("48_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx217_tgt
-    .local int rx217_pos
-    .local int rx217_off
-    .local int rx217_eos
-    .local int rx217_rep
-    .local pmc rx217_cur
-    (rx217_cur, rx217_pos, rx217_tgt) = self."!cursor_start"()
-    rx217_cur."!cursor_debug"("START ", "newpad")
-    .lex unicode:"$\x{a2}", rx217_cur
+    .local string rx220_tgt
+    .local int rx220_pos
+    .local int rx220_off
+    .local int rx220_eos
+    .local int rx220_rep
+    .local pmc rx220_cur
+    (rx220_cur, rx220_pos, rx220_tgt) = self."!cursor_start"()
+    rx220_cur."!cursor_debug"("START ", "newpad")
+    .lex unicode:"$\x{a2}", rx220_cur
     .local pmc match
     .lex "$/", match
-    length rx217_eos, rx217_tgt
-    set rx217_off, 0
-    lt rx217_pos, 2, rx217_start
-    sub rx217_off, rx217_pos, 1
-    substr rx217_tgt, rx217_tgt, rx217_off
-  rx217_start:
+    length rx220_eos, rx220_tgt
+    set rx220_off, 0
+    lt rx220_pos, 2, rx220_start
+    sub rx220_off, rx220_pos, 1
+    substr rx220_tgt, rx220_tgt, rx220_off
+  rx220_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan220_done
-    goto rxscan220_scan
-  rxscan220_loop:
-    ($P10) = rx217_cur."from"()
+    ne $I10, -1, rxscan223_done
+    goto rxscan223_scan
+  rxscan223_loop:
+    ($P10) = rx220_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", 137
+    set rx220_pos, $P10
+    ge rx220_pos, rx220_eos, rxscan223_done
+  rxscan223_scan:
+    set_addr $I10, rxscan223_loop
+    rx220_cur."!mark_push"(0, rx220_pos, $I10)
+  rxscan223_done:
+.annotate "line", 141
   # rx pass
-    rx217_cur."!cursor_pass"(rx217_pos, "newpad")
-    rx217_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx217_pos)
-    .return (rx217_cur)
-  rx217_fail:
+    rx220_cur."!cursor_pass"(rx220_pos, "newpad")
+    rx220_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx220_pos)
+    .return (rx220_cur)
+  rx220_fail:
 .annotate "line", 4
-    (rx217_rep, rx217_pos, $I10, $P10) = rx217_cur."!mark_fail"(0)
-    lt rx217_pos, -1, rx217_done
-    eq rx217_pos, -1, rx217_fail
+    (rx220_rep, rx220_pos, $I10, $P10) = rx220_cur."!mark_fail"(0)
+    lt rx220_pos, -1, rx220_done
+    eq rx220_pos, -1, rx220_fail
     jump $I10
-  rx217_done:
-    rx217_cur."!cursor_fail"()
-    rx217_cur."!cursor_debug"("FAIL  ", "newpad")
-    .return (rx217_cur)
+  rx220_done:
+    rx220_cur."!cursor_fail"()
+    rx220_cur."!cursor_debug"("FAIL  ", "newpad")
+    .return (rx220_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__newpad"  :subid("49_1267204702.05125") :method
+.sub "!PREFIX__newpad"  :subid("49_1271336396.90314") :method
 .annotate "line", 4
-    new $P219, "ResizablePMCArray"
-    push $P219, ""
-    .return ($P219)
+    new $P222, "ResizablePMCArray"
+    push $P222, ""
+    .return ($P222)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "finishpad"  :subid("50_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "finishpad"  :subid("50_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx222_tgt
-    .local int rx222_pos
-    .local int rx222_off
-    .local int rx222_eos
-    .local int rx222_rep
-    .local pmc rx222_cur
-    (rx222_cur, rx222_pos, rx222_tgt) = self."!cursor_start"()
-    rx222_cur."!cursor_debug"("START ", "finishpad")
-    .lex unicode:"$\x{a2}", rx222_cur
+    .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) = self."!cursor_start"()
+    rx225_cur."!cursor_debug"("START ", "finishpad")
+    .lex unicode:"$\x{a2}", rx225_cur
     .local pmc match
     .lex "$/", match
-    length rx222_eos, rx222_tgt
-    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:
+    length rx225_eos, rx225_tgt
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan225_done
-    goto rxscan225_scan
-  rxscan225_loop:
-    ($P10) = rx222_cur."from"()
+    ne $I10, -1, rxscan228_done
+    goto rxscan228_scan
+  rxscan228_loop:
+    ($P10) = rx225_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", 138
+    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", 142
   # rx pass
-    rx222_cur."!cursor_pass"(rx222_pos, "finishpad")
-    rx222_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx222_pos)
-    .return (rx222_cur)
-  rx222_fail:
+    rx225_cur."!cursor_pass"(rx225_pos, "finishpad")
+    rx225_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx225_pos)
+    .return (rx225_cur)
+  rx225_fail:
 .annotate "line", 4
-    (rx222_rep, rx222_pos, $I10, $P10) = rx222_cur."!mark_fail"(0)
-    lt rx222_pos, -1, rx222_done
-    eq rx222_pos, -1, rx222_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
-  rx222_done:
-    rx222_cur."!cursor_fail"()
-    rx222_cur."!cursor_debug"("FAIL  ", "finishpad")
-    .return (rx222_cur)
+  rx225_done:
+    rx225_cur."!cursor_fail"()
+    rx225_cur."!cursor_debug"("FAIL  ", "finishpad")
+    .return (rx225_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__finishpad"  :subid("51_1267204702.05125") :method
+.sub "!PREFIX__finishpad"  :subid("51_1271336396.90314") :method
 .annotate "line", 4
-    new $P224, "ResizablePMCArray"
-    push $P224, ""
-    .return ($P224)
+    new $P227, "ResizablePMCArray"
+    push $P227, ""
+    .return ($P227)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator"  :subid("52_1267204702.05125") :method
-.annotate "line", 140
-    $P227 = self."!protoregex"("terminator")
-    .return ($P227)
+.sub "terminator"  :subid("52_1271336396.90314") :method
+.annotate "line", 144
+    $P230 = self."!protoregex"("terminator")
+    .return ($P230)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator"  :subid("53_1267204702.05125") :method
-.annotate "line", 140
-    $P229 = self."!PREFIX__!protoregex"("terminator")
-    .return ($P229)
+.sub "!PREFIX__terminator"  :subid("53_1271336396.90314") :method
+.annotate "line", 144
+    $P232 = self."!PREFIX__!protoregex"("terminator")
+    .return ($P232)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<;>"  :subid("54_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "terminator:sym<;>"  :subid("54_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .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) = self."!cursor_start"()
-    rx231_cur."!cursor_debug"("START ", "terminator:sym<;>")
-    .lex unicode:"$\x{a2}", rx231_cur
-    .local pmc match
-    .lex "$/", match
-    length rx231_eos, rx231_tgt
-    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:
-    $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", 142
+    .local string rx234_tgt
+    .local int rx234_pos
+    .local int rx234_off
+    .local int rx234_eos
+    .local int rx234_rep
+    .local pmc rx234_cur
+    (rx234_cur, rx234_pos, rx234_tgt) = self."!cursor_start"()
+    rx234_cur."!cursor_debug"("START ", "terminator:sym<;>")
+    .lex unicode:"$\x{a2}", rx234_cur
+    .local pmc match
+    .lex "$/", match
+    length rx234_eos, rx234_tgt
+    set rx234_off, 0
+    lt rx234_pos, 2, rx234_start
+    sub rx234_off, rx234_pos, 1
+    substr rx234_tgt, rx234_tgt, rx234_off
+  rx234_start:
+    $I10 = self.'from'()
+    ne $I10, -1, 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", 146
   # rx enumcharlist negate=0 zerowidth
-    ge rx231_pos, rx231_eos, rx231_fail
-    sub $I10, rx231_pos, rx231_off
-    substr $S10, rx231_tgt, $I10, 1
+    ge rx234_pos, rx234_eos, rx234_fail
+    sub $I10, rx234_pos, rx234_off
+    substr $S10, rx234_tgt, $I10, 1
     index $I11, ";", $S10
-    lt $I11, 0, rx231_fail
+    lt $I11, 0, rx234_fail
   # rx pass
-    rx231_cur."!cursor_pass"(rx231_pos, "terminator:sym<;>")
-    rx231_cur."!cursor_debug"("PASS  ", "terminator:sym<;>", " at pos=", rx231_pos)
-    .return (rx231_cur)
-  rx231_fail:
+    rx234_cur."!cursor_pass"(rx234_pos, "terminator:sym<;>")
+    rx234_cur."!cursor_debug"("PASS  ", "terminator:sym<;>", " at pos=", rx234_pos)
+    .return (rx234_cur)
+  rx234_fail:
 .annotate "line", 4
-    (rx231_rep, rx231_pos, $I10, $P10) = rx231_cur."!mark_fail"(0)
-    lt rx231_pos, -1, rx231_done
-    eq rx231_pos, -1, rx231_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
-  rx231_done:
-    rx231_cur."!cursor_fail"()
-    rx231_cur."!cursor_debug"("FAIL  ", "terminator:sym<;>")
-    .return (rx231_cur)
+  rx234_done:
+    rx234_cur."!cursor_fail"()
+    rx234_cur."!cursor_debug"("FAIL  ", "terminator:sym<;>")
+    .return (rx234_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<;>"  :subid("55_1267204702.05125") :method
+.sub "!PREFIX__terminator:sym<;>"  :subid("55_1271336396.90314") :method
 .annotate "line", 4
-    new $P233, "ResizablePMCArray"
-    push $P233, ";"
-    .return ($P233)
+    new $P236, "ResizablePMCArray"
+    push $P236, ";"
+    .return ($P236)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<}>"  :subid("56_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "terminator:sym<}>"  :subid("56_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx236_tgt
-    .local int rx236_pos
-    .local int rx236_off
-    .local int rx236_eos
-    .local int rx236_rep
-    .local pmc rx236_cur
-    (rx236_cur, rx236_pos, rx236_tgt) = self."!cursor_start"()
-    rx236_cur."!cursor_debug"("START ", "terminator:sym<}>")
-    .lex unicode:"$\x{a2}", rx236_cur
+    .local string rx239_tgt
+    .local int rx239_pos
+    .local int rx239_off
+    .local int rx239_eos
+    .local int rx239_rep
+    .local pmc rx239_cur
+    (rx239_cur, rx239_pos, rx239_tgt) = self."!cursor_start"()
+    rx239_cur."!cursor_debug"("START ", "terminator:sym<}>")
+    .lex unicode:"$\x{a2}", rx239_cur
     .local pmc match
     .lex "$/", match
-    length rx236_eos, rx236_tgt
-    set rx236_off, 0
-    lt rx236_pos, 2, rx236_start
-    sub rx236_off, rx236_pos, 1
-    substr rx236_tgt, rx236_tgt, rx236_off
-  rx236_start:
+    length rx239_eos, rx239_tgt
+    set rx239_off, 0
+    lt rx239_pos, 2, rx239_start
+    sub rx239_off, rx239_pos, 1
+    substr rx239_tgt, rx239_tgt, rx239_off
+  rx239_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan239_done
-    goto rxscan239_scan
-  rxscan239_loop:
-    ($P10) = rx236_cur."from"()
+    ne $I10, -1, rxscan242_done
+    goto rxscan242_scan
+  rxscan242_loop:
+    ($P10) = rx239_cur."from"()
     inc $P10
-    set rx236_pos, $P10
-    ge rx236_pos, rx236_eos, rxscan239_done
-  rxscan239_scan:
-    set_addr $I10, rxscan239_loop
-    rx236_cur."!mark_push"(0, rx236_pos, $I10)
-  rxscan239_done:
-.annotate "line", 143
+    set rx239_pos, $P10
+    ge rx239_pos, rx239_eos, rxscan242_done
+  rxscan242_scan:
+    set_addr $I10, rxscan242_loop
+    rx239_cur."!mark_push"(0, rx239_pos, $I10)
+  rxscan242_done:
+.annotate "line", 147
   # rx enumcharlist negate=0 zerowidth
-    ge rx236_pos, rx236_eos, rx236_fail
-    sub $I10, rx236_pos, rx236_off
-    substr $S10, rx236_tgt, $I10, 1
+    ge rx239_pos, rx239_eos, rx239_fail
+    sub $I10, rx239_pos, rx239_off
+    substr $S10, rx239_tgt, $I10, 1
     index $I11, "}", $S10
-    lt $I11, 0, rx236_fail
+    lt $I11, 0, rx239_fail
   # rx pass
-    rx236_cur."!cursor_pass"(rx236_pos, "terminator:sym<}>")
-    rx236_cur."!cursor_debug"("PASS  ", "terminator:sym<}>", " at pos=", rx236_pos)
-    .return (rx236_cur)
-  rx236_fail:
+    rx239_cur."!cursor_pass"(rx239_pos, "terminator:sym<}>")
+    rx239_cur."!cursor_debug"("PASS  ", "terminator:sym<}>", " at pos=", rx239_pos)
+    .return (rx239_cur)
+  rx239_fail:
 .annotate "line", 4
-    (rx236_rep, rx236_pos, $I10, $P10) = rx236_cur."!mark_fail"(0)
-    lt rx236_pos, -1, rx236_done
-    eq rx236_pos, -1, rx236_fail
+    (rx239_rep, rx239_pos, $I10, $P10) = rx239_cur."!mark_fail"(0)
+    lt rx239_pos, -1, rx239_done
+    eq rx239_pos, -1, rx239_fail
     jump $I10
-  rx236_done:
-    rx236_cur."!cursor_fail"()
-    rx236_cur."!cursor_debug"("FAIL  ", "terminator:sym<}>")
-    .return (rx236_cur)
+  rx239_done:
+    rx239_cur."!cursor_fail"()
+    rx239_cur."!cursor_debug"("FAIL  ", "terminator:sym<}>")
+    .return (rx239_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<}>"  :subid("57_1267204702.05125") :method
+.sub "!PREFIX__terminator:sym<}>"  :subid("57_1271336396.90314") :method
 .annotate "line", 4
-    new $P238, "ResizablePMCArray"
-    push $P238, "}"
-    .return ($P238)
+    new $P241, "ResizablePMCArray"
+    push $P241, "}"
+    .return ($P241)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control"  :subid("58_1267204702.05125") :method
-.annotate "line", 147
-    $P241 = self."!protoregex"("statement_control")
-    .return ($P241)
+.sub "statement_control"  :subid("58_1271336396.90314") :method
+.annotate "line", 151
+    $P244 = self."!protoregex"("statement_control")
+    .return ($P244)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control"  :subid("59_1267204702.05125") :method
-.annotate "line", 147
-    $P243 = self."!PREFIX__!protoregex"("statement_control")
-    .return ($P243)
+.sub "!PREFIX__statement_control"  :subid("59_1271336396.90314") :method
+.annotate "line", 151
+    $P246 = self."!PREFIX__!protoregex"("statement_control")
+    .return ($P246)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<if>"  :subid("60_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<if>"  :subid("60_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx245_tgt
-    .local int rx245_pos
-    .local int rx245_off
-    .local int rx245_eos
-    .local int rx245_rep
-    .local pmc rx245_cur
-    (rx245_cur, rx245_pos, rx245_tgt) = self."!cursor_start"()
-    rx245_cur."!cursor_debug"("START ", "statement_control:sym<if>")
-    rx245_cur."!cursor_caparray"("else", "xblock")
-    .lex unicode:"$\x{a2}", rx245_cur
-    .local pmc match
-    .lex "$/", match
-    length rx245_eos, rx245_tgt
-    set rx245_off, 0
-    lt rx245_pos, 2, rx245_start
-    sub rx245_off, rx245_pos, 1
-    substr rx245_tgt, rx245_tgt, rx245_off
-  rx245_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan248_done
-    goto rxscan248_scan
-  rxscan248_loop:
-    ($P10) = rx245_cur."from"()
-    inc $P10
-    set rx245_pos, $P10
-    ge rx245_pos, rx245_eos, rxscan248_done
-  rxscan248_scan:
-    set_addr $I10, rxscan248_loop
-    rx245_cur."!mark_push"(0, rx245_pos, $I10)
-  rxscan248_done:
-.annotate "line", 150
+    .local string rx248_tgt
+    .local int rx248_pos
+    .local int rx248_off
+    .local int rx248_eos
+    .local int rx248_rep
+    .local pmc rx248_cur
+    (rx248_cur, rx248_pos, rx248_tgt) = self."!cursor_start"()
+    rx248_cur."!cursor_debug"("START ", "statement_control:sym<if>")
+    rx248_cur."!cursor_caparray"("else", "xblock")
+    .lex unicode:"$\x{a2}", rx248_cur
+    .local pmc match
+    .lex "$/", match
+    length rx248_eos, rx248_tgt
+    set rx248_off, 0
+    lt rx248_pos, 2, rx248_start
+    sub rx248_off, rx248_pos, 1
+    substr rx248_tgt, rx248_tgt, rx248_off
+  rx248_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan251_done
+    goto rxscan251_scan
+  rxscan251_loop:
+    ($P10) = rx248_cur."from"()
+    inc $P10
+    set rx248_pos, $P10
+    ge rx248_pos, rx248_eos, rxscan251_done
+  rxscan251_scan:
+    set_addr $I10, rxscan251_loop
+    rx248_cur."!mark_push"(0, rx248_pos, $I10)
+  rxscan251_done:
+.annotate "line", 154
   # rx subcapture "sym"
-    set_addr $I10, rxcap_249_fail
-    rx245_cur."!mark_push"(0, rx245_pos, $I10)
+    set_addr $I10, rxcap_252_fail
+    rx248_cur."!mark_push"(0, rx248_pos, $I10)
   # rx literal  "if"
-    add $I11, rx245_pos, 2
-    gt $I11, rx245_eos, rx245_fail
-    sub $I11, rx245_pos, rx245_off
-    substr $S10, rx245_tgt, $I11, 2
-    ne $S10, "if", rx245_fail
-    add rx245_pos, 2
-    set_addr $I10, rxcap_249_fail
-    ($I12, $I11) = rx245_cur."!mark_peek"($I10)
-    rx245_cur."!cursor_pos"($I11)
-    ($P10) = rx245_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx245_pos, "")
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx248_pos, 2
+    gt $I11, rx248_eos, rx248_fail
+    sub $I11, rx248_pos, rx248_off
+    substr $S10, rx248_tgt, $I11, 2
+    ne $S10, "if", rx248_fail
+    add rx248_pos, 2
+    set_addr $I10, rxcap_252_fail
+    ($I12, $I11) = rx248_cur."!mark_peek"($I10)
+    rx248_cur."!cursor_pos"($I11)
+    ($P10) = rx248_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx248_pos, "")
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_249_done
-  rxcap_249_fail:
-    goto rx245_fail
-  rxcap_249_done:
+    goto rxcap_252_done
+  rxcap_252_fail:
+    goto rx248_fail
+  rxcap_252_done:
   # rx charclass s
-    ge rx245_pos, rx245_eos, rx245_fail
-    sub $I10, rx245_pos, rx245_off
-    is_cclass $I11, 32, rx245_tgt, $I10
-    unless $I11, rx245_fail
-    inc rx245_pos
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 151
+    ge rx248_pos, rx248_eos, rx248_fail
+    sub $I10, rx248_pos, rx248_off
+    is_cclass $I11, 32, rx248_tgt, $I10
+    unless $I11, rx248_fail
+    inc rx248_pos
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 155
   # rx subrule "xblock" subtype=capture negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."xblock"()
-    unless $P10, rx245_fail
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."xblock"()
+    unless $P10, rx248_fail
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx245_pos = $P10."pos"()
+    rx248_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 152
-  # rx rxquantr252 ** 0..*
-    set_addr $I256, rxquantr252_done
-    rx245_cur."!mark_push"(0, rx245_pos, $I256)
-  rxquantr252_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 156
+  # rx rxquantr255 ** 0..*
+    set_addr $I259, rxquantr255_done
+    rx248_cur."!mark_push"(0, rx248_pos, $I259)
+  rxquantr255_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx literal  "elsif"
-    add $I11, rx245_pos, 5
-    gt $I11, rx245_eos, rx245_fail
-    sub $I11, rx245_pos, rx245_off
-    substr $S10, rx245_tgt, $I11, 5
-    ne $S10, "elsif", rx245_fail
-    add rx245_pos, 5
+    add $I11, rx248_pos, 5
+    gt $I11, rx248_eos, rx248_fail
+    sub $I11, rx248_pos, rx248_off
+    substr $S10, rx248_tgt, $I11, 5
+    ne $S10, "elsif", rx248_fail
+    add rx248_pos, 5
   # rx charclass s
-    ge rx245_pos, rx245_eos, rx245_fail
-    sub $I10, rx245_pos, rx245_off
-    is_cclass $I11, 32, rx245_tgt, $I10
-    unless $I11, rx245_fail
-    inc rx245_pos
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    ge rx248_pos, rx248_eos, rx248_fail
+    sub $I10, rx248_pos, rx248_off
+    is_cclass $I11, 32, rx248_tgt, $I10
+    unless $I11, rx248_fail
+    inc rx248_pos
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx subrule "xblock" subtype=capture negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."xblock"()
-    unless $P10, rx245_fail
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."xblock"()
+    unless $P10, rx248_fail
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx245_pos = $P10."pos"()
+    rx248_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-    (rx245_rep) = rx245_cur."!mark_commit"($I256)
-    rx245_cur."!mark_push"(rx245_rep, rx245_pos, $I256)
-    goto rxquantr252_loop
-  rxquantr252_done:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 153
-  # rx rxquantr258 ** 0..1
-    set_addr $I262, rxquantr258_done
-    rx245_cur."!mark_push"(0, rx245_pos, $I262)
-  rxquantr258_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+    (rx248_rep) = rx248_cur."!mark_commit"($I259)
+    rx248_cur."!mark_push"(rx248_rep, rx248_pos, $I259)
+    goto rxquantr255_loop
+  rxquantr255_done:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 157
+  # rx rxquantr261 ** 0..1
+    set_addr $I265, rxquantr261_done
+    rx248_cur."!mark_push"(0, rx248_pos, $I265)
+  rxquantr261_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx literal  "else"
-    add $I11, rx245_pos, 4
-    gt $I11, rx245_eos, rx245_fail
-    sub $I11, rx245_pos, rx245_off
-    substr $S10, rx245_tgt, $I11, 4
-    ne $S10, "else", rx245_fail
-    add rx245_pos, 4
+    add $I11, rx248_pos, 4
+    gt $I11, rx248_eos, rx248_fail
+    sub $I11, rx248_pos, rx248_off
+    substr $S10, rx248_tgt, $I11, 4
+    ne $S10, "else", rx248_fail
+    add rx248_pos, 4
   # rx charclass s
-    ge rx245_pos, rx245_eos, rx245_fail
-    sub $I10, rx245_pos, rx245_off
-    is_cclass $I11, 32, rx245_tgt, $I10
-    unless $I11, rx245_fail
-    inc rx245_pos
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    ge rx248_pos, rx248_eos, rx248_fail
+    sub $I10, rx248_pos, rx248_off
+    is_cclass $I11, 32, rx248_tgt, $I10
+    unless $I11, rx248_fail
+    inc rx248_pos
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."pblock"()
-    unless $P10, rx245_fail
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."pblock"()
+    unless $P10, rx248_fail
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("else")
-    rx245_pos = $P10."pos"()
+    rx248_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-    (rx245_rep) = rx245_cur."!mark_commit"($I262)
-  rxquantr258_done:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 149
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+    (rx248_rep) = rx248_cur."!mark_commit"($I265)
+  rxquantr261_done:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 153
   # rx pass
-    rx245_cur."!cursor_pass"(rx245_pos, "statement_control:sym<if>")
-    rx245_cur."!cursor_debug"("PASS  ", "statement_control:sym<if>", " at pos=", rx245_pos)
-    .return (rx245_cur)
-  rx245_fail:
+    rx248_cur."!cursor_pass"(rx248_pos, "statement_control:sym<if>")
+    rx248_cur."!cursor_debug"("PASS  ", "statement_control:sym<if>", " at pos=", rx248_pos)
+    .return (rx248_cur)
+  rx248_fail:
 .annotate "line", 4
-    (rx245_rep, rx245_pos, $I10, $P10) = rx245_cur."!mark_fail"(0)
-    lt rx245_pos, -1, rx245_done
-    eq rx245_pos, -1, rx245_fail
+    (rx248_rep, rx248_pos, $I10, $P10) = rx248_cur."!mark_fail"(0)
+    lt rx248_pos, -1, rx248_done
+    eq rx248_pos, -1, rx248_fail
     jump $I10
-  rx245_done:
-    rx245_cur."!cursor_fail"()
-    rx245_cur."!cursor_debug"("FAIL  ", "statement_control:sym<if>")
-    .return (rx245_cur)
+  rx248_done:
+    rx248_cur."!cursor_fail"()
+    rx248_cur."!cursor_debug"("FAIL  ", "statement_control:sym<if>")
+    .return (rx248_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<if>"  :subid("61_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<if>"  :subid("61_1271336396.90314") :method
 .annotate "line", 4
-    new $P247, "ResizablePMCArray"
-    push $P247, "if"
-    .return ($P247)
+    new $P250, "ResizablePMCArray"
+    push $P250, "if"
+    .return ($P250)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<unless>"  :subid("62_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<unless>"  :subid("62_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .const 'Sub' $P275 = "64_1267204702.05125" 
-    capture_lex $P275
-    .local string rx265_tgt
-    .local int rx265_pos
-    .local int rx265_off
-    .local int rx265_eos
-    .local int rx265_rep
-    .local pmc rx265_cur
-    (rx265_cur, rx265_pos, rx265_tgt) = self."!cursor_start"()
-    rx265_cur."!cursor_debug"("START ", "statement_control:sym<unless>")
-    .lex unicode:"$\x{a2}", rx265_cur
+    .const 'Sub' $P278 = "64_1271336396.90314" 
+    capture_lex $P278
+    .local string rx268_tgt
+    .local int rx268_pos
+    .local int rx268_off
+    .local int rx268_eos
+    .local int rx268_rep
+    .local pmc rx268_cur
+    (rx268_cur, rx268_pos, rx268_tgt) = self."!cursor_start"()
+    rx268_cur."!cursor_debug"("START ", "statement_control:sym<unless>")
+    .lex unicode:"$\x{a2}", rx268_cur
     .local pmc match
     .lex "$/", match
-    length rx265_eos, rx265_tgt
-    set rx265_off, 0
-    lt rx265_pos, 2, rx265_start
-    sub rx265_off, rx265_pos, 1
-    substr rx265_tgt, rx265_tgt, rx265_off
-  rx265_start:
+    length rx268_eos, rx268_tgt
+    set rx268_off, 0
+    lt rx268_pos, 2, rx268_start
+    sub rx268_off, rx268_pos, 1
+    substr rx268_tgt, rx268_tgt, rx268_off
+  rx268_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan268_done
-    goto rxscan268_scan
-  rxscan268_loop:
-    ($P10) = rx265_cur."from"()
+    ne $I10, -1, rxscan271_done
+    goto rxscan271_scan
+  rxscan271_loop:
+    ($P10) = rx268_cur."from"()
     inc $P10
-    set rx265_pos, $P10
-    ge rx265_pos, rx265_eos, rxscan268_done
-  rxscan268_scan:
-    set_addr $I10, rxscan268_loop
-    rx265_cur."!mark_push"(0, rx265_pos, $I10)
-  rxscan268_done:
-.annotate "line", 157
+    set rx268_pos, $P10
+    ge rx268_pos, rx268_eos, rxscan271_done
+  rxscan271_scan:
+    set_addr $I10, rxscan271_loop
+    rx268_cur."!mark_push"(0, rx268_pos, $I10)
+  rxscan271_done:
+.annotate "line", 161
   # rx subcapture "sym"
-    set_addr $I10, rxcap_269_fail
-    rx265_cur."!mark_push"(0, rx265_pos, $I10)
+    set_addr $I10, rxcap_272_fail
+    rx268_cur."!mark_push"(0, rx268_pos, $I10)
   # rx literal  "unless"
-    add $I11, rx265_pos, 6
-    gt $I11, rx265_eos, rx265_fail
-    sub $I11, rx265_pos, rx265_off
-    substr $S10, rx265_tgt, $I11, 6
-    ne $S10, "unless", rx265_fail
-    add rx265_pos, 6
-    set_addr $I10, rxcap_269_fail
-    ($I12, $I11) = rx265_cur."!mark_peek"($I10)
-    rx265_cur."!cursor_pos"($I11)
-    ($P10) = rx265_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx265_pos, "")
-    rx265_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx268_pos, 6
+    gt $I11, rx268_eos, rx268_fail
+    sub $I11, rx268_pos, rx268_off
+    substr $S10, rx268_tgt, $I11, 6
+    ne $S10, "unless", rx268_fail
+    add rx268_pos, 6
+    set_addr $I10, rxcap_272_fail
+    ($I12, $I11) = rx268_cur."!mark_peek"($I10)
+    rx268_cur."!cursor_pos"($I11)
+    ($P10) = rx268_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx268_pos, "")
+    rx268_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_269_done
-  rxcap_269_fail:
-    goto rx265_fail
-  rxcap_269_done:
+    goto rxcap_272_done
+  rxcap_272_fail:
+    goto rx268_fail
+  rxcap_272_done:
   # rx charclass s
-    ge rx265_pos, rx265_eos, rx265_fail
-    sub $I10, rx265_pos, rx265_off
-    is_cclass $I11, 32, rx265_tgt, $I10
-    unless $I11, rx265_fail
-    inc rx265_pos
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-.annotate "line", 158
+    ge rx268_pos, rx268_eos, rx268_fail
+    sub $I10, rx268_pos, rx268_off
+    is_cclass $I11, 32, rx268_tgt, $I10
+    unless $I11, rx268_fail
+    inc rx268_pos
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+.annotate "line", 162
   # rx subrule "xblock" subtype=capture negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."xblock"()
-    unless $P10, rx265_fail
-    rx265_cur."!mark_push"(0, -1, 0, $P10)
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."xblock"()
+    unless $P10, rx268_fail
+    rx268_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx265_pos = $P10."pos"()
+    rx268_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-  alt272_0:
-.annotate "line", 159
-    set_addr $I10, alt272_1
-    rx265_cur."!mark_push"(0, rx265_pos, $I10)
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+  alt275_0:
+.annotate "line", 163
+    set_addr $I10, alt275_1
+    rx268_cur."!mark_push"(0, rx268_pos, $I10)
   # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
   # rx subrule "before" subtype=zerowidth negate=1
-    rx265_cur."!cursor_pos"(rx265_pos)
-    .const 'Sub' $P275 = "64_1267204702.05125" 
-    capture_lex $P275
-    $P10 = rx265_cur."before"($P275)
-    if $P10, rx265_fail
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-    goto alt272_end
-  alt272_1:
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
+    rx268_cur."!cursor_pos"(rx268_pos)
+    .const 'Sub' $P278 = "64_1271336396.90314" 
+    capture_lex $P278
+    $P10 = rx268_cur."before"($P278)
+    if $P10, rx268_fail
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+    goto alt275_end
+  alt275_1:
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."panic"("unless does not take \"else\", please rewrite using \"if\"")
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-  alt272_end:
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-.annotate "line", 156
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."panic"("unless does not take \"else\", please rewrite using \"if\"")
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+  alt275_end:
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+.annotate "line", 160
   # rx pass
-    rx265_cur."!cursor_pass"(rx265_pos, "statement_control:sym<unless>")
-    rx265_cur."!cursor_debug"("PASS  ", "statement_control:sym<unless>", " at pos=", rx265_pos)
-    .return (rx265_cur)
-  rx265_fail:
+    rx268_cur."!cursor_pass"(rx268_pos, "statement_control:sym<unless>")
+    rx268_cur."!cursor_debug"("PASS  ", "statement_control:sym<unless>", " at pos=", rx268_pos)
+    .return (rx268_cur)
+  rx268_fail:
 .annotate "line", 4
-    (rx265_rep, rx265_pos, $I10, $P10) = rx265_cur."!mark_fail"(0)
-    lt rx265_pos, -1, rx265_done
-    eq rx265_pos, -1, rx265_fail
+    (rx268_rep, rx268_pos, $I10, $P10) = rx268_cur."!mark_fail"(0)
+    lt rx268_pos, -1, rx268_done
+    eq rx268_pos, -1, rx268_fail
     jump $I10
-  rx265_done:
-    rx265_cur."!cursor_fail"()
-    rx265_cur."!cursor_debug"("FAIL  ", "statement_control:sym<unless>")
-    .return (rx265_cur)
+  rx268_done:
+    rx268_cur."!cursor_fail"()
+    rx268_cur."!cursor_debug"("FAIL  ", "statement_control:sym<unless>")
+    .return (rx268_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<unless>"  :subid("63_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<unless>"  :subid("63_1271336396.90314") :method
 .annotate "line", 4
-    new $P267, "ResizablePMCArray"
-    push $P267, "unless"
-    .return ($P267)
+    new $P270, "ResizablePMCArray"
+    push $P270, "unless"
+    .return ($P270)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block274"  :anon :subid("64_1267204702.05125") :method :outer("62_1267204702.05125")
-.annotate "line", 159
-    .local string rx276_tgt
-    .local int rx276_pos
-    .local int rx276_off
-    .local int rx276_eos
-    .local int rx276_rep
-    .local pmc rx276_cur
-    (rx276_cur, rx276_pos, rx276_tgt) = self."!cursor_start"()
-    rx276_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx276_cur
-    .local pmc match
-    .lex "$/", match
-    length rx276_eos, rx276_tgt
-    set rx276_off, 0
-    lt rx276_pos, 2, rx276_start
-    sub rx276_off, rx276_pos, 1
-    substr rx276_tgt, rx276_tgt, rx276_off
-  rx276_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan277_done
-    goto rxscan277_scan
-  rxscan277_loop:
-    ($P10) = rx276_cur."from"()
-    inc $P10
-    set rx276_pos, $P10
-    ge rx276_pos, rx276_eos, rxscan277_done
-  rxscan277_scan:
-    set_addr $I10, rxscan277_loop
-    rx276_cur."!mark_push"(0, rx276_pos, $I10)
-  rxscan277_done:
+.sub "_block277"  :anon :subid("64_1271336396.90314") :method :outer("62_1271336396.90314")
+.annotate "line", 163
+    .local string rx279_tgt
+    .local int rx279_pos
+    .local int rx279_off
+    .local int rx279_eos
+    .local int rx279_rep
+    .local pmc rx279_cur
+    (rx279_cur, rx279_pos, rx279_tgt) = self."!cursor_start"()
+    rx279_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx279_cur
+    .local pmc match
+    .lex "$/", match
+    length rx279_eos, rx279_tgt
+    set rx279_off, 0
+    lt rx279_pos, 2, rx279_start
+    sub rx279_off, rx279_pos, 1
+    substr rx279_tgt, rx279_tgt, rx279_off
+  rx279_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan280_done
+    goto rxscan280_scan
+  rxscan280_loop:
+    ($P10) = rx279_cur."from"()
+    inc $P10
+    set rx279_pos, $P10
+    ge rx279_pos, rx279_eos, rxscan280_done
+  rxscan280_scan:
+    set_addr $I10, rxscan280_loop
+    rx279_cur."!mark_push"(0, rx279_pos, $I10)
+  rxscan280_done:
   # rx literal  "else"
-    add $I11, rx276_pos, 4
-    gt $I11, rx276_eos, rx276_fail
-    sub $I11, rx276_pos, rx276_off
-    substr $S10, rx276_tgt, $I11, 4
-    ne $S10, "else", rx276_fail
-    add rx276_pos, 4
-  # rx pass
-    rx276_cur."!cursor_pass"(rx276_pos, "")
-    rx276_cur."!cursor_debug"("PASS  ", "", " at pos=", rx276_pos)
-    .return (rx276_cur)
-  rx276_fail:
-    (rx276_rep, rx276_pos, $I10, $P10) = rx276_cur."!mark_fail"(0)
-    lt rx276_pos, -1, rx276_done
-    eq rx276_pos, -1, rx276_fail
-    jump $I10
-  rx276_done:
-    rx276_cur."!cursor_fail"()
-    rx276_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx276_cur)
+    add $I11, rx279_pos, 4
+    gt $I11, rx279_eos, rx279_fail
+    sub $I11, rx279_pos, rx279_off
+    substr $S10, rx279_tgt, $I11, 4
+    ne $S10, "else", rx279_fail
+    add rx279_pos, 4
+  # rx pass
+    rx279_cur."!cursor_pass"(rx279_pos, "")
+    rx279_cur."!cursor_debug"("PASS  ", "", " at pos=", rx279_pos)
+    .return (rx279_cur)
+  rx279_fail:
+    (rx279_rep, rx279_pos, $I10, $P10) = rx279_cur."!mark_fail"(0)
+    lt rx279_pos, -1, rx279_done
+    eq rx279_pos, -1, rx279_fail
+    jump $I10
+  rx279_done:
+    rx279_cur."!cursor_fail"()
+    rx279_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx279_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<while>"  :subid("65_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx283_tgt
-    .local int rx283_pos
-    .local int rx283_off
-    .local int rx283_eos
-    .local int rx283_rep
-    .local pmc rx283_cur
-    (rx283_cur, rx283_pos, rx283_tgt) = self."!cursor_start"()
-    rx283_cur."!cursor_debug"("START ", "statement_control:sym<while>")
-    .lex unicode:"$\x{a2}", rx283_cur
-    .local pmc match
-    .lex "$/", match
-    length rx283_eos, rx283_tgt
-    set rx283_off, 0
-    lt rx283_pos, 2, rx283_start
-    sub rx283_off, rx283_pos, 1
-    substr rx283_tgt, rx283_tgt, rx283_off
-  rx283_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan286_done
-    goto rxscan286_scan
-  rxscan286_loop:
-    ($P10) = rx283_cur."from"()
-    inc $P10
-    set rx283_pos, $P10
-    ge rx283_pos, rx283_eos, rxscan286_done
-  rxscan286_scan:
-    set_addr $I10, rxscan286_loop
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
-  rxscan286_done:
-.annotate "line", 163
+.sub "statement_control:sym<while>"  :subid("65_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 4
+    .local string rx286_tgt
+    .local int rx286_pos
+    .local int rx286_off
+    .local int rx286_eos
+    .local int rx286_rep
+    .local pmc rx286_cur
+    (rx286_cur, rx286_pos, rx286_tgt) = self."!cursor_start"()
+    rx286_cur."!cursor_debug"("START ", "statement_control:sym<while>")
+    .lex unicode:"$\x{a2}", rx286_cur
+    .local pmc match
+    .lex "$/", match
+    length rx286_eos, rx286_tgt
+    set rx286_off, 0
+    lt rx286_pos, 2, rx286_start
+    sub rx286_off, rx286_pos, 1
+    substr rx286_tgt, rx286_tgt, rx286_off
+  rx286_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan289_done
+    goto rxscan289_scan
+  rxscan289_loop:
+    ($P10) = rx286_cur."from"()
+    inc $P10
+    set rx286_pos, $P10
+    ge rx286_pos, rx286_eos, rxscan289_done
+  rxscan289_scan:
+    set_addr $I10, rxscan289_loop
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
+  rxscan289_done:
+.annotate "line", 167
   # rx subcapture "sym"
-    set_addr $I10, rxcap_288_fail
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
-  alt287_0:
-    set_addr $I10, alt287_1
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
+    set_addr $I10, rxcap_291_fail
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
+  alt290_0:
+    set_addr $I10, alt290_1
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
   # rx literal  "while"
-    add $I11, rx283_pos, 5
-    gt $I11, rx283_eos, rx283_fail
-    sub $I11, rx283_pos, rx283_off
-    substr $S10, rx283_tgt, $I11, 5
-    ne $S10, "while", rx283_fail
-    add rx283_pos, 5
-    goto alt287_end
-  alt287_1:
+    add $I11, rx286_pos, 5
+    gt $I11, rx286_eos, rx286_fail
+    sub $I11, rx286_pos, rx286_off
+    substr $S10, rx286_tgt, $I11, 5
+    ne $S10, "while", rx286_fail
+    add rx286_pos, 5
+    goto alt290_end
+  alt290_1:
   # rx literal  "until"
-    add $I11, rx283_pos, 5
-    gt $I11, rx283_eos, rx283_fail
-    sub $I11, rx283_pos, rx283_off
-    substr $S10, rx283_tgt, $I11, 5
-    ne $S10, "until", rx283_fail
-    add rx283_pos, 5
-  alt287_end:
-    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, rx286_pos, 5
+    gt $I11, rx286_eos, rx286_fail
+    sub $I11, rx286_pos, rx286_off
+    substr $S10, rx286_tgt, $I11, 5
+    ne $S10, "until", rx286_fail
+    add rx286_pos, 5
+  alt290_end:
+    set_addr $I10, rxcap_291_fail
+    ($I12, $I11) = rx286_cur."!mark_peek"($I10)
+    rx286_cur."!cursor_pos"($I11)
+    ($P10) = rx286_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx286_pos, "")
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_288_done
-  rxcap_288_fail:
-    goto rx283_fail
-  rxcap_288_done:
+    goto rxcap_291_done
+  rxcap_291_fail:
+    goto rx286_fail
+  rxcap_291_done:
   # rx charclass s
-    ge rx283_pos, rx283_eos, rx283_fail
-    sub $I10, rx283_pos, rx283_off
-    is_cclass $I11, 32, rx283_tgt, $I10
-    unless $I11, rx283_fail
-    inc rx283_pos
-  # rx subrule "ws" subtype=method negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."ws"()
-    unless $P10, rx283_fail
-    rx283_pos = $P10."pos"()
-.annotate "line", 164
+    ge rx286_pos, rx286_eos, rx286_fail
+    sub $I10, rx286_pos, rx286_off
+    is_cclass $I11, 32, rx286_tgt, $I10
+    unless $I11, rx286_fail
+    inc rx286_pos
+  # rx subrule "ws" subtype=method negate=
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."ws"()
+    unless $P10, rx286_fail
+    rx286_pos = $P10."pos"()
+.annotate "line", 168
   # rx subrule "xblock" subtype=capture negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."xblock"()
-    unless $P10, rx283_fail
-    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."xblock"()
+    unless $P10, rx286_fail
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx283_pos = $P10."pos"()
+    rx286_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."ws"()
-    unless $P10, rx283_fail
-    rx283_pos = $P10."pos"()
-.annotate "line", 162
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."ws"()
+    unless $P10, rx286_fail
+    rx286_pos = $P10."pos"()
+.annotate "line", 166
   # rx pass
-    rx283_cur."!cursor_pass"(rx283_pos, "statement_control:sym<while>")
-    rx283_cur."!cursor_debug"("PASS  ", "statement_control:sym<while>", " at pos=", rx283_pos)
-    .return (rx283_cur)
-  rx283_fail:
+    rx286_cur."!cursor_pass"(rx286_pos, "statement_control:sym<while>")
+    rx286_cur."!cursor_debug"("PASS  ", "statement_control:sym<while>", " at pos=", rx286_pos)
+    .return (rx286_cur)
+  rx286_fail:
 .annotate "line", 4
-    (rx283_rep, rx283_pos, $I10, $P10) = rx283_cur."!mark_fail"(0)
-    lt rx283_pos, -1, rx283_done
-    eq rx283_pos, -1, rx283_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
-  rx283_done:
-    rx283_cur."!cursor_fail"()
-    rx283_cur."!cursor_debug"("FAIL  ", "statement_control:sym<while>")
-    .return (rx283_cur)
+  rx286_done:
+    rx286_cur."!cursor_fail"()
+    rx286_cur."!cursor_debug"("FAIL  ", "statement_control:sym<while>")
+    .return (rx286_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<while>"  :subid("66_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<while>"  :subid("66_1271336396.90314") :method
 .annotate "line", 4
-    new $P285, "ResizablePMCArray"
-    push $P285, "until"
-    push $P285, "while"
-    .return ($P285)
+    new $P288, "ResizablePMCArray"
+    push $P288, "until"
+    push $P288, "while"
+    .return ($P288)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<repeat>"  :subid("67_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<repeat>"  :subid("67_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx292_tgt
-    .local int rx292_pos
-    .local int rx292_off
-    .local int rx292_eos
-    .local int rx292_rep
-    .local pmc rx292_cur
-    (rx292_cur, rx292_pos, rx292_tgt) = self."!cursor_start"()
-    rx292_cur."!cursor_debug"("START ", "statement_control:sym<repeat>")
-    .lex unicode:"$\x{a2}", rx292_cur
+    .local string rx295_tgt
+    .local int rx295_pos
+    .local int rx295_off
+    .local int rx295_eos
+    .local int rx295_rep
+    .local pmc rx295_cur
+    (rx295_cur, rx295_pos, rx295_tgt) = self."!cursor_start"()
+    rx295_cur."!cursor_debug"("START ", "statement_control:sym<repeat>")
+    .lex unicode:"$\x{a2}", rx295_cur
     .local pmc match
     .lex "$/", match
-    length rx292_eos, rx292_tgt
-    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:
+    length rx295_eos, rx295_tgt
+    set rx295_off, 0
+    lt rx295_pos, 2, rx295_start
+    sub rx295_off, rx295_pos, 1
+    substr rx295_tgt, rx295_tgt, rx295_off
+  rx295_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan295_done
-    goto rxscan295_scan
-  rxscan295_loop:
-    ($P10) = rx292_cur."from"()
+    ne $I10, -1, rxscan298_done
+    goto rxscan298_scan
+  rxscan298_loop:
+    ($P10) = rx295_cur."from"()
     inc $P10
-    set rx292_pos, $P10
-    ge rx292_pos, rx292_eos, rxscan295_done
-  rxscan295_scan:
-    set_addr $I10, rxscan295_loop
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  rxscan295_done:
-.annotate "line", 168
+    set rx295_pos, $P10
+    ge rx295_pos, rx295_eos, rxscan298_done
+  rxscan298_scan:
+    set_addr $I10, rxscan298_loop
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+  rxscan298_done:
+.annotate "line", 172
   # rx subcapture "sym"
-    set_addr $I10, rxcap_296_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+    set_addr $I10, rxcap_299_fail
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
   # rx literal  "repeat"
-    add $I11, rx292_pos, 6
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 6
-    ne $S10, "repeat", rx292_fail
-    add rx292_pos, 6
-    set_addr $I10, rxcap_296_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)
+    add $I11, rx295_pos, 6
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 6
+    ne $S10, "repeat", rx295_fail
+    add rx295_pos, 6
+    set_addr $I10, rxcap_299_fail
+    ($I12, $I11) = rx295_cur."!mark_peek"($I10)
+    rx295_cur."!cursor_pos"($I11)
+    ($P10) = rx295_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx295_pos, "")
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_296_done
-  rxcap_296_fail:
-    goto rx292_fail
-  rxcap_296_done:
+    goto rxcap_299_done
+  rxcap_299_fail:
+    goto rx295_fail
+  rxcap_299_done:
   # rx charclass s
-    ge rx292_pos, rx292_eos, rx292_fail
-    sub $I10, rx292_pos, rx292_off
-    is_cclass $I11, 32, rx292_tgt, $I10
-    unless $I11, rx292_fail
-    inc rx292_pos
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-  alt298_0:
-.annotate "line", 169
-    set_addr $I10, alt298_1
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-.annotate "line", 170
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    ge rx295_pos, rx295_eos, rx295_fail
+    sub $I10, rx295_pos, rx295_off
+    is_cclass $I11, 32, rx295_tgt, $I10
+    unless $I11, rx295_fail
+    inc rx295_pos
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+  alt301_0:
+.annotate "line", 173
+    set_addr $I10, alt301_1
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+.annotate "line", 174
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subcapture "wu"
-    set_addr $I10, rxcap_301_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  alt300_0:
-    set_addr $I10, alt300_1
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+    set_addr $I10, rxcap_304_fail
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+  alt303_0:
+    set_addr $I10, alt303_1
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
   # rx literal  "while"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "while", rx292_fail
-    add rx292_pos, 5
-    goto alt300_end
-  alt300_1:
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "while", rx295_fail
+    add rx295_pos, 5
+    goto alt303_end
+  alt303_1:
   # rx literal  "until"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "until", rx292_fail
-    add rx292_pos, 5
-  alt300_end:
-    set_addr $I10, rxcap_301_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)
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "until", rx295_fail
+    add rx295_pos, 5
+  alt303_end:
+    set_addr $I10, rxcap_304_fail
+    ($I12, $I11) = rx295_cur."!mark_peek"($I10)
+    rx295_cur."!cursor_pos"($I11)
+    ($P10) = rx295_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx295_pos, "")
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("wu")
-    goto rxcap_301_done
-  rxcap_301_fail:
-    goto rx292_fail
-  rxcap_301_done:
+    goto rxcap_304_done
+  rxcap_304_fail:
+    goto rx295_fail
+  rxcap_304_done:
   # rx charclass s
-    ge rx292_pos, rx292_eos, rx292_fail
-    sub $I10, rx292_pos, rx292_off
-    is_cclass $I11, 32, rx292_tgt, $I10
-    unless $I11, rx292_fail
-    inc rx292_pos
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    ge rx295_pos, rx295_eos, rx295_fail
+    sub $I10, rx295_pos, rx295_off
+    is_cclass $I11, 32, rx295_tgt, $I10
+    unless $I11, rx295_fail
+    inc rx295_pos
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subrule "xblock" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."xblock"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."xblock"()
+    unless $P10, rx295_fail
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx292_pos = $P10."pos"()
+    rx295_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-    goto alt298_end
-  alt298_1:
-.annotate "line", 171
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+    goto alt301_end
+  alt301_1:
+.annotate "line", 175
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."pblock"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."pblock"()
+    unless $P10, rx295_fail
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx292_pos = $P10."pos"()
+    rx295_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subcapture "wu"
-    set_addr $I10, rxcap_307_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  alt306_0:
-    set_addr $I10, alt306_1
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+    set_addr $I10, rxcap_310_fail
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+  alt309_0:
+    set_addr $I10, alt309_1
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
   # rx literal  "while"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "while", rx292_fail
-    add rx292_pos, 5
-    goto alt306_end
-  alt306_1:
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "while", rx295_fail
+    add rx295_pos, 5
+    goto alt309_end
+  alt309_1:
   # rx literal  "until"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "until", rx292_fail
-    add rx292_pos, 5
-  alt306_end:
-    set_addr $I10, rxcap_307_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)
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "until", rx295_fail
+    add rx295_pos, 5
+  alt309_end:
+    set_addr $I10, rxcap_310_fail
+    ($I12, $I11) = rx295_cur."!mark_peek"($I10)
+    rx295_cur."!cursor_pos"($I11)
+    ($P10) = rx295_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx295_pos, "")
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("wu")
-    goto rxcap_307_done
-  rxcap_307_fail:
-    goto rx292_fail
-  rxcap_307_done:
+    goto rxcap_310_done
+  rxcap_310_fail:
+    goto rx295_fail
+  rxcap_310_done:
   # rx charclass s
-    ge rx292_pos, rx292_eos, rx292_fail
-    sub $I10, rx292_pos, rx292_off
-    is_cclass $I11, 32, rx292_tgt, $I10
-    unless $I11, rx292_fail
-    inc rx292_pos
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    ge rx295_pos, rx295_eos, rx295_fail
+    sub $I10, rx295_pos, rx295_off
+    is_cclass $I11, 32, rx295_tgt, $I10
+    unless $I11, rx295_fail
+    inc rx295_pos
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."EXPR"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."EXPR"()
+    unless $P10, rx295_fail
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx292_pos = $P10."pos"()
+    rx295_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-  alt298_end:
-.annotate "line", 172
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+  alt301_end:
+.annotate "line", 176
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-.annotate "line", 167
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+.annotate "line", 171
   # rx pass
-    rx292_cur."!cursor_pass"(rx292_pos, "statement_control:sym<repeat>")
-    rx292_cur."!cursor_debug"("PASS  ", "statement_control:sym<repeat>", " at pos=", rx292_pos)
-    .return (rx292_cur)
-  rx292_fail:
+    rx295_cur."!cursor_pass"(rx295_pos, "statement_control:sym<repeat>")
+    rx295_cur."!cursor_debug"("PASS  ", "statement_control:sym<repeat>", " at pos=", rx295_pos)
+    .return (rx295_cur)
+  rx295_fail:
 .annotate "line", 4
-    (rx292_rep, rx292_pos, $I10, $P10) = rx292_cur."!mark_fail"(0)
-    lt rx292_pos, -1, rx292_done
-    eq rx292_pos, -1, rx292_fail
+    (rx295_rep, rx295_pos, $I10, $P10) = rx295_cur."!mark_fail"(0)
+    lt rx295_pos, -1, rx295_done
+    eq rx295_pos, -1, rx295_fail
     jump $I10
-  rx292_done:
-    rx292_cur."!cursor_fail"()
-    rx292_cur."!cursor_debug"("FAIL  ", "statement_control:sym<repeat>")
-    .return (rx292_cur)
+  rx295_done:
+    rx295_cur."!cursor_fail"()
+    rx295_cur."!cursor_debug"("FAIL  ", "statement_control:sym<repeat>")
+    .return (rx295_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<repeat>"  :subid("68_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<repeat>"  :subid("68_1271336396.90314") :method
 .annotate "line", 4
-    new $P294, "ResizablePMCArray"
-    push $P294, "repeat"
-    .return ($P294)
+    new $P297, "ResizablePMCArray"
+    push $P297, "repeat"
+    .return ($P297)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<for>"  :subid("69_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<for>"  :subid("69_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx312_tgt
-    .local int rx312_pos
-    .local int rx312_off
-    .local int rx312_eos
-    .local int rx312_rep
-    .local pmc rx312_cur
-    (rx312_cur, rx312_pos, rx312_tgt) = self."!cursor_start"()
-    rx312_cur."!cursor_debug"("START ", "statement_control:sym<for>")
-    .lex unicode:"$\x{a2}", rx312_cur
-    .local pmc match
-    .lex "$/", match
-    length rx312_eos, rx312_tgt
-    set rx312_off, 0
-    lt rx312_pos, 2, rx312_start
-    sub rx312_off, rx312_pos, 1
-    substr rx312_tgt, rx312_tgt, rx312_off
-  rx312_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan315_done
-    goto rxscan315_scan
-  rxscan315_loop:
-    ($P10) = rx312_cur."from"()
-    inc $P10
-    set rx312_pos, $P10
-    ge rx312_pos, rx312_eos, rxscan315_done
-  rxscan315_scan:
-    set_addr $I10, rxscan315_loop
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
-  rxscan315_done:
-.annotate "line", 176
+    .local string rx315_tgt
+    .local int rx315_pos
+    .local int rx315_off
+    .local int rx315_eos
+    .local int rx315_rep
+    .local pmc rx315_cur
+    (rx315_cur, rx315_pos, rx315_tgt) = self."!cursor_start"()
+    rx315_cur."!cursor_debug"("START ", "statement_control:sym<for>")
+    .lex unicode:"$\x{a2}", rx315_cur
+    .local pmc match
+    .lex "$/", match
+    length rx315_eos, rx315_tgt
+    set rx315_off, 0
+    lt rx315_pos, 2, rx315_start
+    sub rx315_off, rx315_pos, 1
+    substr rx315_tgt, rx315_tgt, rx315_off
+  rx315_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan318_done
+    goto rxscan318_scan
+  rxscan318_loop:
+    ($P10) = rx315_cur."from"()
+    inc $P10
+    set rx315_pos, $P10
+    ge rx315_pos, rx315_eos, rxscan318_done
+  rxscan318_scan:
+    set_addr $I10, rxscan318_loop
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
+  rxscan318_done:
+.annotate "line", 180
   # rx subcapture "sym"
-    set_addr $I10, rxcap_316_fail
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+    set_addr $I10, rxcap_319_fail
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
   # rx literal  "for"
-    add $I11, rx312_pos, 3
-    gt $I11, rx312_eos, rx312_fail
-    sub $I11, rx312_pos, rx312_off
-    substr $S10, rx312_tgt, $I11, 3
-    ne $S10, "for", rx312_fail
-    add rx312_pos, 3
-    set_addr $I10, rxcap_316_fail
-    ($I12, $I11) = rx312_cur."!mark_peek"($I10)
-    rx312_cur."!cursor_pos"($I11)
-    ($P10) = rx312_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx312_pos, "")
-    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx315_pos, 3
+    gt $I11, rx315_eos, rx315_fail
+    sub $I11, rx315_pos, rx315_off
+    substr $S10, rx315_tgt, $I11, 3
+    ne $S10, "for", rx315_fail
+    add rx315_pos, 3
+    set_addr $I10, rxcap_319_fail
+    ($I12, $I11) = rx315_cur."!mark_peek"($I10)
+    rx315_cur."!cursor_pos"($I11)
+    ($P10) = rx315_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx315_pos, "")
+    rx315_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_316_done
-  rxcap_316_fail:
-    goto rx312_fail
-  rxcap_316_done:
+    goto rxcap_319_done
+  rxcap_319_fail:
+    goto rx315_fail
+  rxcap_319_done:
   # rx charclass s
-    ge rx312_pos, rx312_eos, rx312_fail
-    sub $I10, rx312_pos, rx312_off
-    is_cclass $I11, 32, rx312_tgt, $I10
-    unless $I11, rx312_fail
-    inc rx312_pos
-  # rx subrule "ws" subtype=method negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."ws"()
-    unless $P10, rx312_fail
-    rx312_pos = $P10."pos"()
-.annotate "line", 177
+    ge rx315_pos, rx315_eos, rx315_fail
+    sub $I10, rx315_pos, rx315_off
+    is_cclass $I11, 32, rx315_tgt, $I10
+    unless $I11, rx315_fail
+    inc rx315_pos
+  # rx subrule "ws" subtype=method negate=
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."ws"()
+    unless $P10, rx315_fail
+    rx315_pos = $P10."pos"()
+.annotate "line", 181
   # rx subrule "xblock" subtype=capture negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."xblock"()
-    unless $P10, rx312_fail
-    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."xblock"()
+    unless $P10, rx315_fail
+    rx315_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx312_pos = $P10."pos"()
+    rx315_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."ws"()
-    unless $P10, rx312_fail
-    rx312_pos = $P10."pos"()
-.annotate "line", 175
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."ws"()
+    unless $P10, rx315_fail
+    rx315_pos = $P10."pos"()
+.annotate "line", 179
   # rx pass
-    rx312_cur."!cursor_pass"(rx312_pos, "statement_control:sym<for>")
-    rx312_cur."!cursor_debug"("PASS  ", "statement_control:sym<for>", " at pos=", rx312_pos)
-    .return (rx312_cur)
-  rx312_fail:
+    rx315_cur."!cursor_pass"(rx315_pos, "statement_control:sym<for>")
+    rx315_cur."!cursor_debug"("PASS  ", "statement_control:sym<for>", " at pos=", rx315_pos)
+    .return (rx315_cur)
+  rx315_fail:
 .annotate "line", 4
-    (rx312_rep, rx312_pos, $I10, $P10) = rx312_cur."!mark_fail"(0)
-    lt rx312_pos, -1, rx312_done
-    eq rx312_pos, -1, rx312_fail
+    (rx315_rep, rx315_pos, $I10, $P10) = rx315_cur."!mark_fail"(0)
+    lt rx315_pos, -1, rx315_done
+    eq rx315_pos, -1, rx315_fail
     jump $I10
-  rx312_done:
-    rx312_cur."!cursor_fail"()
-    rx312_cur."!cursor_debug"("FAIL  ", "statement_control:sym<for>")
-    .return (rx312_cur)
+  rx315_done:
+    rx315_cur."!cursor_fail"()
+    rx315_cur."!cursor_debug"("FAIL  ", "statement_control:sym<for>")
+    .return (rx315_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<for>"  :subid("70_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<for>"  :subid("70_1271336396.90314") :method
 .annotate "line", 4
-    new $P314, "ResizablePMCArray"
-    push $P314, "for"
-    .return ($P314)
+    new $P317, "ResizablePMCArray"
+    push $P317, "for"
+    .return ($P317)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CATCH>"  :subid("71_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<CATCH>"  :subid("71_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx320_tgt
-    .local int rx320_pos
-    .local int rx320_off
-    .local int rx320_eos
-    .local int rx320_rep
-    .local pmc rx320_cur
-    (rx320_cur, rx320_pos, rx320_tgt) = self."!cursor_start"()
-    rx320_cur."!cursor_debug"("START ", "statement_control:sym<CATCH>")
-    .lex unicode:"$\x{a2}", rx320_cur
+    .local string rx323_tgt
+    .local int rx323_pos
+    .local int rx323_off
+    .local int rx323_eos
+    .local int rx323_rep
+    .local pmc rx323_cur
+    (rx323_cur, rx323_pos, rx323_tgt) = self."!cursor_start"()
+    rx323_cur."!cursor_debug"("START ", "statement_control:sym<CATCH>")
+    .lex unicode:"$\x{a2}", rx323_cur
     .local pmc match
     .lex "$/", match
-    length rx320_eos, rx320_tgt
-    set rx320_off, 0
-    lt rx320_pos, 2, rx320_start
-    sub rx320_off, rx320_pos, 1
-    substr rx320_tgt, rx320_tgt, rx320_off
-  rx320_start:
+    length rx323_eos, rx323_tgt
+    set rx323_off, 0
+    lt rx323_pos, 2, rx323_start
+    sub rx323_off, rx323_pos, 1
+    substr rx323_tgt, rx323_tgt, rx323_off
+  rx323_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan323_done
-    goto rxscan323_scan
-  rxscan323_loop:
-    ($P10) = rx320_cur."from"()
+    ne $I10, -1, rxscan326_done
+    goto rxscan326_scan
+  rxscan326_loop:
+    ($P10) = rx323_cur."from"()
     inc $P10
-    set rx320_pos, $P10
-    ge rx320_pos, rx320_eos, rxscan323_done
-  rxscan323_scan:
-    set_addr $I10, rxscan323_loop
-    rx320_cur."!mark_push"(0, rx320_pos, $I10)
-  rxscan323_done:
-.annotate "line", 181
+    set rx323_pos, $P10
+    ge rx323_pos, rx323_eos, rxscan326_done
+  rxscan326_scan:
+    set_addr $I10, rxscan326_loop
+    rx323_cur."!mark_push"(0, rx323_pos, $I10)
+  rxscan326_done:
+.annotate "line", 185
   # rx subcapture "sym"
-    set_addr $I10, rxcap_324_fail
-    rx320_cur."!mark_push"(0, rx320_pos, $I10)
+    set_addr $I10, rxcap_327_fail
+    rx323_cur."!mark_push"(0, rx323_pos, $I10)
   # rx literal  "CATCH"
-    add $I11, rx320_pos, 5
-    gt $I11, rx320_eos, rx320_fail
-    sub $I11, rx320_pos, rx320_off
-    substr $S10, rx320_tgt, $I11, 5
-    ne $S10, "CATCH", rx320_fail
-    add rx320_pos, 5
-    set_addr $I10, rxcap_324_fail
-    ($I12, $I11) = rx320_cur."!mark_peek"($I10)
-    rx320_cur."!cursor_pos"($I11)
-    ($P10) = rx320_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx320_pos, "")
-    rx320_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx323_pos, 5
+    gt $I11, rx323_eos, rx323_fail
+    sub $I11, rx323_pos, rx323_off
+    substr $S10, rx323_tgt, $I11, 5
+    ne $S10, "CATCH", rx323_fail
+    add rx323_pos, 5
+    set_addr $I10, rxcap_327_fail
+    ($I12, $I11) = rx323_cur."!mark_peek"($I10)
+    rx323_cur."!cursor_pos"($I11)
+    ($P10) = rx323_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx323_pos, "")
+    rx323_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_324_done
-  rxcap_324_fail:
-    goto rx320_fail
-  rxcap_324_done:
+    goto rxcap_327_done
+  rxcap_327_fail:
+    goto rx323_fail
+  rxcap_327_done:
   # rx charclass s
-    ge rx320_pos, rx320_eos, rx320_fail
-    sub $I10, rx320_pos, rx320_off
-    is_cclass $I11, 32, rx320_tgt, $I10
-    unless $I11, rx320_fail
-    inc rx320_pos
-  # rx subrule "ws" subtype=method negate=
-    rx320_cur."!cursor_pos"(rx320_pos)
-    $P10 = rx320_cur."ws"()
-    unless $P10, rx320_fail
-    rx320_pos = $P10."pos"()
-.annotate "line", 182
+    ge rx323_pos, rx323_eos, rx323_fail
+    sub $I10, rx323_pos, rx323_off
+    is_cclass $I11, 32, rx323_tgt, $I10
+    unless $I11, rx323_fail
+    inc rx323_pos
+  # rx subrule "ws" subtype=method negate=
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."ws"()
+    unless $P10, rx323_fail
+    rx323_pos = $P10."pos"()
+.annotate "line", 186
   # rx subrule "block" subtype=capture negate=
-    rx320_cur."!cursor_pos"(rx320_pos)
-    $P10 = rx320_cur."block"()
-    unless $P10, rx320_fail
-    rx320_cur."!mark_push"(0, -1, 0, $P10)
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."block"()
+    unless $P10, rx323_fail
+    rx323_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx320_pos = $P10."pos"()
+    rx323_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx320_cur."!cursor_pos"(rx320_pos)
-    $P10 = rx320_cur."ws"()
-    unless $P10, rx320_fail
-    rx320_pos = $P10."pos"()
-.annotate "line", 180
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."ws"()
+    unless $P10, rx323_fail
+    rx323_pos = $P10."pos"()
+.annotate "line", 184
   # rx pass
-    rx320_cur."!cursor_pass"(rx320_pos, "statement_control:sym<CATCH>")
-    rx320_cur."!cursor_debug"("PASS  ", "statement_control:sym<CATCH>", " at pos=", rx320_pos)
-    .return (rx320_cur)
-  rx320_fail:
+    rx323_cur."!cursor_pass"(rx323_pos, "statement_control:sym<CATCH>")
+    rx323_cur."!cursor_debug"("PASS  ", "statement_control:sym<CATCH>", " at pos=", rx323_pos)
+    .return (rx323_cur)
+  rx323_fail:
 .annotate "line", 4
-    (rx320_rep, rx320_pos, $I10, $P10) = rx320_cur."!mark_fail"(0)
-    lt rx320_pos, -1, rx320_done
-    eq rx320_pos, -1, rx320_fail
+    (rx323_rep, rx323_pos, $I10, $P10) = rx323_cur."!mark_fail"(0)
+    lt rx323_pos, -1, rx323_done
+    eq rx323_pos, -1, rx323_fail
     jump $I10
-  rx320_done:
-    rx320_cur."!cursor_fail"()
-    rx320_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CATCH>")
-    .return (rx320_cur)
+  rx323_done:
+    rx323_cur."!cursor_fail"()
+    rx323_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CATCH>")
+    .return (rx323_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("72_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("72_1271336396.90314") :method
 .annotate "line", 4
-    new $P322, "ResizablePMCArray"
-    push $P322, "CATCH"
-    .return ($P322)
+    new $P325, "ResizablePMCArray"
+    push $P325, "CATCH"
+    .return ($P325)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CONTROL>"  :subid("73_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<CONTROL>"  :subid("73_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx328_tgt
-    .local int rx328_pos
-    .local int rx328_off
-    .local int rx328_eos
-    .local int rx328_rep
-    .local pmc rx328_cur
-    (rx328_cur, rx328_pos, rx328_tgt) = self."!cursor_start"()
-    rx328_cur."!cursor_debug"("START ", "statement_control:sym<CONTROL>")
-    .lex unicode:"$\x{a2}", rx328_cur
+    .local string rx331_tgt
+    .local int rx331_pos
+    .local int rx331_off
+    .local int rx331_eos
+    .local int rx331_rep
+    .local pmc rx331_cur
+    (rx331_cur, rx331_pos, rx331_tgt) = self."!cursor_start"()
+    rx331_cur."!cursor_debug"("START ", "statement_control:sym<CONTROL>")
+    .lex unicode:"$\x{a2}", rx331_cur
     .local pmc match
     .lex "$/", match
-    length rx328_eos, rx328_tgt
-    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:
+    length rx331_eos, rx331_tgt
+    set rx331_off, 0
+    lt rx331_pos, 2, rx331_start
+    sub rx331_off, rx331_pos, 1
+    substr rx331_tgt, rx331_tgt, rx331_off
+  rx331_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan331_done
-    goto rxscan331_scan
-  rxscan331_loop:
-    ($P10) = rx328_cur."from"()
+    ne $I10, -1, rxscan334_done
+    goto rxscan334_scan
+  rxscan334_loop:
+    ($P10) = rx331_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", 186
+    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", 190
   # rx subcapture "sym"
-    set_addr $I10, rxcap_332_fail
-    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+    set_addr $I10, rxcap_335_fail
+    rx331_cur."!mark_push"(0, rx331_pos, $I10)
   # rx literal  "CONTROL"
-    add $I11, rx328_pos, 7
-    gt $I11, rx328_eos, rx328_fail
-    sub $I11, rx328_pos, rx328_off
-    substr $S10, rx328_tgt, $I11, 7
-    ne $S10, "CONTROL", rx328_fail
-    add rx328_pos, 7
-    set_addr $I10, rxcap_332_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)
+    add $I11, rx331_pos, 7
+    gt $I11, rx331_eos, rx331_fail
+    sub $I11, rx331_pos, rx331_off
+    substr $S10, rx331_tgt, $I11, 7
+    ne $S10, "CONTROL", rx331_fail
+    add rx331_pos, 7
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_332_done
-  rxcap_332_fail:
-    goto rx328_fail
-  rxcap_332_done:
+    goto rxcap_335_done
+  rxcap_335_fail:
+    goto rx331_fail
+  rxcap_335_done:
   # rx charclass s
-    ge rx328_pos, rx328_eos, rx328_fail
-    sub $I10, rx328_pos, rx328_off
-    is_cclass $I11, 32, rx328_tgt, $I10
-    unless $I11, rx328_fail
-    inc rx328_pos
-  # rx subrule "ws" subtype=method negate=
-    rx328_cur."!cursor_pos"(rx328_pos)
-    $P10 = rx328_cur."ws"()
-    unless $P10, rx328_fail
-    rx328_pos = $P10."pos"()
-.annotate "line", 187
+    ge rx331_pos, rx331_eos, rx331_fail
+    sub $I10, rx331_pos, rx331_off
+    is_cclass $I11, 32, rx331_tgt, $I10
+    unless $I11, rx331_fail
+    inc rx331_pos
+  # rx subrule "ws" subtype=method negate=
+    rx331_cur."!cursor_pos"(rx331_pos)
+    $P10 = rx331_cur."ws"()
+    unless $P10, rx331_fail
+    rx331_pos = $P10."pos"()
+.annotate "line", 191
   # rx subrule "block" subtype=capture negate=
-    rx328_cur."!cursor_pos"(rx328_pos)
-    $P10 = rx328_cur."block"()
-    unless $P10, rx328_fail
-    rx328_cur."!mark_push"(0, -1, 0, $P10)
+    rx331_cur."!cursor_pos"(rx331_pos)
+    $P10 = rx331_cur."block"()
+    unless $P10, rx331_fail
+    rx331_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx328_pos = $P10."pos"()
+    rx331_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx328_cur."!cursor_pos"(rx328_pos)
-    $P10 = rx328_cur."ws"()
-    unless $P10, rx328_fail
-    rx328_pos = $P10."pos"()
-.annotate "line", 185
+    rx331_cur."!cursor_pos"(rx331_pos)
+    $P10 = rx331_cur."ws"()
+    unless $P10, rx331_fail
+    rx331_pos = $P10."pos"()
+.annotate "line", 189
   # rx pass
-    rx328_cur."!cursor_pass"(rx328_pos, "statement_control:sym<CONTROL>")
-    rx328_cur."!cursor_debug"("PASS  ", "statement_control:sym<CONTROL>", " at pos=", rx328_pos)
-    .return (rx328_cur)
-  rx328_fail:
+    rx331_cur."!cursor_pass"(rx331_pos, "statement_control:sym<CONTROL>")
+    rx331_cur."!cursor_debug"("PASS  ", "statement_control:sym<CONTROL>", " at pos=", rx331_pos)
+    .return (rx331_cur)
+  rx331_fail:
 .annotate "line", 4
-    (rx328_rep, rx328_pos, $I10, $P10) = rx328_cur."!mark_fail"(0)
-    lt rx328_pos, -1, rx328_done
-    eq rx328_pos, -1, rx328_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
-  rx328_done:
-    rx328_cur."!cursor_fail"()
-    rx328_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CONTROL>")
-    .return (rx328_cur)
+  rx331_done:
+    rx331_cur."!cursor_fail"()
+    rx331_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CONTROL>")
+    .return (rx331_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("74_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("74_1271336396.90314") :method
 .annotate "line", 4
-    new $P330, "ResizablePMCArray"
-    push $P330, "CONTROL"
-    .return ($P330)
+    new $P333, "ResizablePMCArray"
+    push $P333, "CONTROL"
+    .return ($P333)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix"  :subid("75_1267204702.05125") :method
-.annotate "line", 190
-    $P336 = self."!protoregex"("statement_prefix")
-    .return ($P336)
+.sub "statement_prefix"  :subid("75_1271336396.90314") :method
+.annotate "line", 194
+    $P339 = self."!protoregex"("statement_prefix")
+    .return ($P339)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix"  :subid("76_1267204702.05125") :method
-.annotate "line", 190
-    $P338 = self."!PREFIX__!protoregex"("statement_prefix")
-    .return ($P338)
+.sub "!PREFIX__statement_prefix"  :subid("76_1271336396.90314") :method
+.annotate "line", 194
+    $P341 = self."!PREFIX__!protoregex"("statement_prefix")
+    .return ($P341)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<INIT>"  :subid("77_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_prefix:sym<INIT>"  :subid("77_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx340_tgt
-    .local int rx340_pos
-    .local int rx340_off
-    .local int rx340_eos
-    .local int rx340_rep
-    .local pmc rx340_cur
-    (rx340_cur, rx340_pos, rx340_tgt) = self."!cursor_start"()
-    rx340_cur."!cursor_debug"("START ", "statement_prefix:sym<INIT>")
-    .lex unicode:"$\x{a2}", rx340_cur
-    .local pmc match
-    .lex "$/", match
-    length rx340_eos, rx340_tgt
-    set rx340_off, 0
-    lt rx340_pos, 2, rx340_start
-    sub rx340_off, rx340_pos, 1
-    substr rx340_tgt, rx340_tgt, rx340_off
-  rx340_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan344_done
-    goto rxscan344_scan
-  rxscan344_loop:
-    ($P10) = rx340_cur."from"()
-    inc $P10
-    set rx340_pos, $P10
-    ge rx340_pos, rx340_eos, rxscan344_done
-  rxscan344_scan:
-    set_addr $I10, rxscan344_loop
-    rx340_cur."!mark_push"(0, rx340_pos, $I10)
-  rxscan344_done:
-.annotate "line", 191
+    .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) = self."!cursor_start"()
+    rx343_cur."!cursor_debug"("START ", "statement_prefix:sym<INIT>")
+    .lex unicode:"$\x{a2}", rx343_cur
+    .local pmc match
+    .lex "$/", match
+    length rx343_eos, rx343_tgt
+    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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan347_done
+    goto rxscan347_scan
+  rxscan347_loop:
+    ($P10) = rx343_cur."from"()
+    inc $P10
+    set rx343_pos, $P10
+    ge rx343_pos, rx343_eos, rxscan347_done
+  rxscan347_scan:
+    set_addr $I10, rxscan347_loop
+    rx343_cur."!mark_push"(0, rx343_pos, $I10)
+  rxscan347_done:
+.annotate "line", 195
   # rx subcapture "sym"
-    set_addr $I10, rxcap_345_fail
-    rx340_cur."!mark_push"(0, rx340_pos, $I10)
+    set_addr $I10, rxcap_348_fail
+    rx343_cur."!mark_push"(0, rx343_pos, $I10)
   # rx literal  "INIT"
-    add $I11, rx340_pos, 4
-    gt $I11, rx340_eos, rx340_fail
-    sub $I11, rx340_pos, rx340_off
-    substr $S10, rx340_tgt, $I11, 4
-    ne $S10, "INIT", rx340_fail
-    add rx340_pos, 4
-    set_addr $I10, rxcap_345_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)
+    add $I11, rx343_pos, 4
+    gt $I11, rx343_eos, rx343_fail
+    sub $I11, rx343_pos, rx343_off
+    substr $S10, rx343_tgt, $I11, 4
+    ne $S10, "INIT", rx343_fail
+    add rx343_pos, 4
+    set_addr $I10, rxcap_348_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)
     $P10."!cursor_names"("sym")
-    goto rxcap_345_done
-  rxcap_345_fail:
-    goto rx340_fail
-  rxcap_345_done:
+    goto rxcap_348_done
+  rxcap_348_fail:
+    goto rx343_fail
+  rxcap_348_done:
   # rx subrule "blorst" subtype=capture negate=
-    rx340_cur."!cursor_pos"(rx340_pos)
-    $P10 = rx340_cur."blorst"()
-    unless $P10, rx340_fail
-    rx340_cur."!mark_push"(0, -1, 0, $P10)
+    rx343_cur."!cursor_pos"(rx343_pos)
+    $P10 = rx343_cur."blorst"()
+    unless $P10, rx343_fail
+    rx343_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blorst")
-    rx340_pos = $P10."pos"()
+    rx343_pos = $P10."pos"()
   # rx pass
-    rx340_cur."!cursor_pass"(rx340_pos, "statement_prefix:sym<INIT>")
-    rx340_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<INIT>", " at pos=", rx340_pos)
-    .return (rx340_cur)
-  rx340_fail:
+    rx343_cur."!cursor_pass"(rx343_pos, "statement_prefix:sym<INIT>")
+    rx343_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<INIT>", " at pos=", rx343_pos)
+    .return (rx343_cur)
+  rx343_fail:
 .annotate "line", 4
-    (rx340_rep, rx340_pos, $I10, $P10) = rx340_cur."!mark_fail"(0)
-    lt rx340_pos, -1, rx340_done
-    eq rx340_pos, -1, rx340_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
-  rx340_done:
-    rx340_cur."!cursor_fail"()
-    rx340_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<INIT>")
-    .return (rx340_cur)
+  rx343_done:
+    rx343_cur."!cursor_fail"()
+    rx343_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<INIT>")
+    .return (rx343_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("78_1267204702.05125") :method
+.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("78_1271336396.90314") :method
 .annotate "line", 4
-    $P342 = self."!PREFIX__!subrule"("blorst", "INIT")
-    new $P343, "ResizablePMCArray"
-    push $P343, $P342
-    .return ($P343)
+    $P345 = self."!PREFIX__!subrule"("blorst", "INIT")
+    new $P346, "ResizablePMCArray"
+    push $P346, $P345
+    .return ($P346)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<try>"  :subid("79_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_prefix:sym<try>"  :subid("79_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx347_tgt
-    .local int rx347_pos
-    .local int rx347_off
-    .local int rx347_eos
-    .local int rx347_rep
-    .local pmc rx347_cur
-    (rx347_cur, rx347_pos, rx347_tgt) = self."!cursor_start"()
-    rx347_cur."!cursor_debug"("START ", "statement_prefix:sym<try>")
-    .lex unicode:"$\x{a2}", rx347_cur
-    .local pmc match
-    .lex "$/", match
-    length rx347_eos, rx347_tgt
-    set rx347_off, 0
-    lt rx347_pos, 2, rx347_start
-    sub rx347_off, rx347_pos, 1
-    substr rx347_tgt, rx347_tgt, rx347_off
-  rx347_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan351_done
-    goto rxscan351_scan
-  rxscan351_loop:
-    ($P10) = rx347_cur."from"()
-    inc $P10
-    set rx347_pos, $P10
-    ge rx347_pos, rx347_eos, rxscan351_done
-  rxscan351_scan:
-    set_addr $I10, rxscan351_loop
-    rx347_cur."!mark_push"(0, rx347_pos, $I10)
-  rxscan351_done:
-.annotate "line", 194
+    .local string rx350_tgt
+    .local int rx350_pos
+    .local int rx350_off
+    .local int rx350_eos
+    .local int rx350_rep
+    .local pmc rx350_cur
+    (rx350_cur, rx350_pos, rx350_tgt) = self."!cursor_start"()
+    rx350_cur."!cursor_debug"("START ", "statement_prefix:sym<try>")
+    .lex unicode:"$\x{a2}", rx350_cur
+    .local pmc match
+    .lex "$/", match
+    length rx350_eos, rx350_tgt
+    set rx350_off, 0
+    lt rx350_pos, 2, rx350_start
+    sub rx350_off, rx350_pos, 1
+    substr rx350_tgt, rx350_tgt, rx350_off
+  rx350_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan354_done
+    goto rxscan354_scan
+  rxscan354_loop:
+    ($P10) = rx350_cur."from"()
+    inc $P10
+    set rx350_pos, $P10
+    ge rx350_pos, rx350_eos, rxscan354_done
+  rxscan354_scan:
+    set_addr $I10, rxscan354_loop
+    rx350_cur."!mark_push"(0, rx350_pos, $I10)
+  rxscan354_done:
+.annotate "line", 198
   # rx subcapture "sym"
-    set_addr $I10, rxcap_352_fail
-    rx347_cur."!mark_push"(0, rx347_pos, $I10)
+    set_addr $I10, rxcap_355_fail
+    rx350_cur."!mark_push"(0, rx350_pos, $I10)
   # rx literal  "try"
-    add $I11, rx347_pos, 3
-    gt $I11, rx347_eos, rx347_fail
-    sub $I11, rx347_pos, rx347_off
-    substr $S10, rx347_tgt, $I11, 3
-    ne $S10, "try", rx347_fail
-    add rx347_pos, 3
-    set_addr $I10, rxcap_352_fail
-    ($I12, $I11) = rx347_cur."!mark_peek"($I10)
-    rx347_cur."!cursor_pos"($I11)
-    ($P10) = rx347_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx347_pos, "")
-    rx347_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx350_pos, 3
+    gt $I11, rx350_eos, rx350_fail
+    sub $I11, rx350_pos, rx350_off
+    substr $S10, rx350_tgt, $I11, 3
+    ne $S10, "try", rx350_fail
+    add rx350_pos, 3
+    set_addr $I10, rxcap_355_fail
+    ($I12, $I11) = rx350_cur."!mark_peek"($I10)
+    rx350_cur."!cursor_pos"($I11)
+    ($P10) = rx350_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx350_pos, "")
+    rx350_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_352_done
-  rxcap_352_fail:
-    goto rx347_fail
-  rxcap_352_done:
-.annotate "line", 195
+    goto rxcap_355_done
+  rxcap_355_fail:
+    goto rx350_fail
+  rxcap_355_done:
+.annotate "line", 199
   # rx subrule "blorst" subtype=capture negate=
-    rx347_cur."!cursor_pos"(rx347_pos)
-    $P10 = rx347_cur."blorst"()
-    unless $P10, rx347_fail
-    rx347_cur."!mark_push"(0, -1, 0, $P10)
+    rx350_cur."!cursor_pos"(rx350_pos)
+    $P10 = rx350_cur."blorst"()
+    unless $P10, rx350_fail
+    rx350_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blorst")
-    rx347_pos = $P10."pos"()
-.annotate "line", 193
+    rx350_pos = $P10."pos"()
+.annotate "line", 197
   # rx pass
-    rx347_cur."!cursor_pass"(rx347_pos, "statement_prefix:sym<try>")
-    rx347_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<try>", " at pos=", rx347_pos)
-    .return (rx347_cur)
-  rx347_fail:
+    rx350_cur."!cursor_pass"(rx350_pos, "statement_prefix:sym<try>")
+    rx350_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<try>", " at pos=", rx350_pos)
+    .return (rx350_cur)
+  rx350_fail:
 .annotate "line", 4
-    (rx347_rep, rx347_pos, $I10, $P10) = rx347_cur."!mark_fail"(0)
-    lt rx347_pos, -1, rx347_done
-    eq rx347_pos, -1, rx347_fail
+    (rx350_rep, rx350_pos, $I10, $P10) = rx350_cur."!mark_fail"(0)
+    lt rx350_pos, -1, rx350_done
+    eq rx350_pos, -1, rx350_fail
     jump $I10
-  rx347_done:
-    rx347_cur."!cursor_fail"()
-    rx347_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<try>")
-    .return (rx347_cur)
+  rx350_done:
+    rx350_cur."!cursor_fail"()
+    rx350_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<try>")
+    .return (rx350_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<try>"  :subid("80_1267204702.05125") :method
+.sub "!PREFIX__statement_prefix:sym<try>"  :subid("80_1271336396.90314") :method
 .annotate "line", 4
-    $P349 = self."!PREFIX__!subrule"("blorst", "try")
-    new $P350, "ResizablePMCArray"
-    push $P350, $P349
-    .return ($P350)
+    $P352 = self."!PREFIX__!subrule"("blorst", "try")
+    new $P353, "ResizablePMCArray"
+    push $P353, $P352
+    .return ($P353)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blorst"  :subid("81_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "blorst"  :subid("81_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx354_tgt
-    .local int rx354_pos
-    .local int rx354_off
-    .local int rx354_eos
-    .local int rx354_rep
-    .local pmc rx354_cur
-    (rx354_cur, rx354_pos, rx354_tgt) = self."!cursor_start"()
-    rx354_cur."!cursor_debug"("START ", "blorst")
-    .lex unicode:"$\x{a2}", rx354_cur
+    .local string rx357_tgt
+    .local int rx357_pos
+    .local int rx357_off
+    .local int rx357_eos
+    .local int rx357_rep
+    .local pmc rx357_cur
+    (rx357_cur, rx357_pos, rx357_tgt) = self."!cursor_start"()
+    rx357_cur."!cursor_debug"("START ", "blorst")
+    .lex unicode:"$\x{a2}", rx357_cur
     .local pmc match
     .lex "$/", match
-    length rx354_eos, rx354_tgt
-    set rx354_off, 0
-    lt rx354_pos, 2, rx354_start
-    sub rx354_off, rx354_pos, 1
-    substr rx354_tgt, rx354_tgt, rx354_off
-  rx354_start:
+    length rx357_eos, rx357_tgt
+    set rx357_off, 0
+    lt rx357_pos, 2, rx357_start
+    sub rx357_off, rx357_pos, 1
+    substr rx357_tgt, rx357_tgt, rx357_off
+  rx357_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan357_done
-    goto rxscan357_scan
-  rxscan357_loop:
-    ($P10) = rx354_cur."from"()
+    ne $I10, -1, rxscan360_done
+    goto rxscan360_scan
+  rxscan360_loop:
+    ($P10) = rx357_cur."from"()
     inc $P10
-    set rx354_pos, $P10
-    ge rx354_pos, rx354_eos, rxscan357_done
-  rxscan357_scan:
-    set_addr $I10, rxscan357_loop
-    rx354_cur."!mark_push"(0, rx354_pos, $I10)
-  rxscan357_done:
-.annotate "line", 199
+    set rx357_pos, $P10
+    ge rx357_pos, rx357_eos, rxscan360_done
+  rxscan360_scan:
+    set_addr $I10, rxscan360_loop
+    rx357_cur."!mark_push"(0, rx357_pos, $I10)
+  rxscan360_done:
+.annotate "line", 203
   # rx charclass s
-    ge rx354_pos, rx354_eos, rx354_fail
-    sub $I10, rx354_pos, rx354_off
-    is_cclass $I11, 32, rx354_tgt, $I10
-    unless $I11, rx354_fail
-    inc rx354_pos
-  # rx subrule "ws" subtype=method negate=
-    rx354_cur."!cursor_pos"(rx354_pos)
-    $P10 = rx354_cur."ws"()
-    unless $P10, rx354_fail
-    rx354_pos = $P10."pos"()
-  alt358_0:
-    set_addr $I10, alt358_1
-    rx354_cur."!mark_push"(0, rx354_pos, $I10)
+    ge rx357_pos, rx357_eos, rx357_fail
+    sub $I10, rx357_pos, rx357_off
+    is_cclass $I11, 32, rx357_tgt, $I10
+    unless $I11, rx357_fail
+    inc rx357_pos
+  # rx subrule "ws" subtype=method negate=
+    rx357_cur."!cursor_pos"(rx357_pos)
+    $P10 = rx357_cur."ws"()
+    unless $P10, rx357_fail
+    rx357_pos = $P10."pos"()
+  alt361_0:
+    set_addr $I10, alt361_1
+    rx357_cur."!mark_push"(0, rx357_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx354_pos, rx354_eos, rx354_fail
-    sub $I10, rx354_pos, rx354_off
-    substr $S10, rx354_tgt, $I10, 1
+    ge rx357_pos, rx357_eos, rx357_fail
+    sub $I10, rx357_pos, rx357_off
+    substr $S10, rx357_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx354_fail
+    lt $I11, 0, rx357_fail
   # rx subrule "block" subtype=capture negate=
-    rx354_cur."!cursor_pos"(rx354_pos)
-    $P10 = rx354_cur."block"()
-    unless $P10, rx354_fail
-    rx354_cur."!mark_push"(0, -1, 0, $P10)
+    rx357_cur."!cursor_pos"(rx357_pos)
+    $P10 = rx357_cur."block"()
+    unless $P10, rx357_fail
+    rx357_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx354_pos = $P10."pos"()
-    goto alt358_end
-  alt358_1:
+    rx357_pos = $P10."pos"()
+    goto alt361_end
+  alt361_1:
   # rx subrule "statement" subtype=capture negate=
-    rx354_cur."!cursor_pos"(rx354_pos)
-    $P10 = rx354_cur."statement"()
-    unless $P10, rx354_fail
-    rx354_cur."!mark_push"(0, -1, 0, $P10)
+    rx357_cur."!cursor_pos"(rx357_pos)
+    $P10 = rx357_cur."statement"()
+    unless $P10, rx357_fail
+    rx357_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx354_pos = $P10."pos"()
-  alt358_end:
-.annotate "line", 198
+    rx357_pos = $P10."pos"()
+  alt361_end:
+.annotate "line", 202
   # rx pass
-    rx354_cur."!cursor_pass"(rx354_pos, "blorst")
-    rx354_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx354_pos)
-    .return (rx354_cur)
-  rx354_fail:
+    rx357_cur."!cursor_pass"(rx357_pos, "blorst")
+    rx357_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx357_pos)
+    .return (rx357_cur)
+  rx357_fail:
 .annotate "line", 4
-    (rx354_rep, rx354_pos, $I10, $P10) = rx354_cur."!mark_fail"(0)
-    lt rx354_pos, -1, rx354_done
-    eq rx354_pos, -1, rx354_fail
+    (rx357_rep, rx357_pos, $I10, $P10) = rx357_cur."!mark_fail"(0)
+    lt rx357_pos, -1, rx357_done
+    eq rx357_pos, -1, rx357_fail
     jump $I10
-  rx354_done:
-    rx354_cur."!cursor_fail"()
-    rx354_cur."!cursor_debug"("FAIL  ", "blorst")
-    .return (rx354_cur)
+  rx357_done:
+    rx357_cur."!cursor_fail"()
+    rx357_cur."!cursor_debug"("FAIL  ", "blorst")
+    .return (rx357_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blorst"  :subid("82_1267204702.05125") :method
+.sub "!PREFIX__blorst"  :subid("82_1271336396.90314") :method
 .annotate "line", 4
-    new $P356, "ResizablePMCArray"
-    push $P356, ""
-    .return ($P356)
+    new $P359, "ResizablePMCArray"
+    push $P359, ""
+    .return ($P359)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond"  :subid("83_1267204702.05125") :method
-.annotate "line", 204
-    $P360 = self."!protoregex"("statement_mod_cond")
-    .return ($P360)
+.sub "statement_mod_cond"  :subid("83_1271336396.90314") :method
+.annotate "line", 208
+    $P363 = self."!protoregex"("statement_mod_cond")
+    .return ($P363)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond"  :subid("84_1267204702.05125") :method
-.annotate "line", 204
-    $P362 = self."!PREFIX__!protoregex"("statement_mod_cond")
-    .return ($P362)
+.sub "!PREFIX__statement_mod_cond"  :subid("84_1271336396.90314") :method
+.annotate "line", 208
+    $P365 = self."!PREFIX__!protoregex"("statement_mod_cond")
+    .return ($P365)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<if>"  :subid("85_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_cond:sym<if>"  :subid("85_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx364_tgt
-    .local int rx364_pos
-    .local int rx364_off
-    .local int rx364_eos
-    .local int rx364_rep
-    .local pmc rx364_cur
-    (rx364_cur, rx364_pos, rx364_tgt) = self."!cursor_start"()
-    rx364_cur."!cursor_debug"("START ", "statement_mod_cond:sym<if>")
-    .lex unicode:"$\x{a2}", rx364_cur
-    .local pmc match
-    .lex "$/", match
-    length rx364_eos, rx364_tgt
-    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:
-    $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", 206
+    .local string rx367_tgt
+    .local int rx367_pos
+    .local int rx367_off
+    .local int rx367_eos
+    .local int rx367_rep
+    .local pmc rx367_cur
+    (rx367_cur, rx367_pos, rx367_tgt) = self."!cursor_start"()
+    rx367_cur."!cursor_debug"("START ", "statement_mod_cond:sym<if>")
+    .lex unicode:"$\x{a2}", rx367_cur
+    .local pmc match
+    .lex "$/", match
+    length rx367_eos, rx367_tgt
+    set rx367_off, 0
+    lt rx367_pos, 2, rx367_start
+    sub rx367_off, rx367_pos, 1
+    substr rx367_tgt, rx367_tgt, rx367_off
+  rx367_start:
+    $I10 = self.'from'()
+    ne $I10, -1, 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", 210
   # rx subcapture "sym"
-    set_addr $I10, rxcap_368_fail
-    rx364_cur."!mark_push"(0, rx364_pos, $I10)
+    set_addr $I10, rxcap_371_fail
+    rx367_cur."!mark_push"(0, rx367_pos, $I10)
   # rx literal  "if"
-    add $I11, rx364_pos, 2
-    gt $I11, rx364_eos, rx364_fail
-    sub $I11, rx364_pos, rx364_off
-    substr $S10, rx364_tgt, $I11, 2
-    ne $S10, "if", rx364_fail
-    add rx364_pos, 2
-    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)
+    add $I11, rx367_pos, 2
+    gt $I11, rx367_eos, rx367_fail
+    sub $I11, rx367_pos, rx367_off
+    substr $S10, rx367_tgt, $I11, 2
+    ne $S10, "if", rx367_fail
+    add rx367_pos, 2
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_368_done
-  rxcap_368_fail:
-    goto rx364_fail
-  rxcap_368_done:
-  # rx subrule "ws" subtype=method negate=
-    rx364_cur."!cursor_pos"(rx364_pos)
-    $P10 = rx364_cur."ws"()
-    unless $P10, rx364_fail
-    rx364_pos = $P10."pos"()
+    goto rxcap_371_done
+  rxcap_371_fail:
+    goto rx367_fail
+  rxcap_371_done:
+  # rx subrule "ws" subtype=method negate=
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."ws"()
+    unless $P10, rx367_fail
+    rx367_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx364_cur."!cursor_pos"(rx364_pos)
-    $P10 = rx364_cur."EXPR"()
-    unless $P10, rx364_fail
-    rx364_cur."!mark_push"(0, -1, 0, $P10)
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."EXPR"()
+    unless $P10, rx367_fail
+    rx367_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx364_pos = $P10."pos"()
+    rx367_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx364_cur."!cursor_pos"(rx364_pos)
-    $P10 = rx364_cur."ws"()
-    unless $P10, rx364_fail
-    rx364_pos = $P10."pos"()
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."ws"()
+    unless $P10, rx367_fail
+    rx367_pos = $P10."pos"()
   # rx pass
-    rx364_cur."!cursor_pass"(rx364_pos, "statement_mod_cond:sym<if>")
-    rx364_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<if>", " at pos=", rx364_pos)
-    .return (rx364_cur)
-  rx364_fail:
+    rx367_cur."!cursor_pass"(rx367_pos, "statement_mod_cond:sym<if>")
+    rx367_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<if>", " at pos=", rx367_pos)
+    .return (rx367_cur)
+  rx367_fail:
 .annotate "line", 4
-    (rx364_rep, rx364_pos, $I10, $P10) = rx364_cur."!mark_fail"(0)
-    lt rx364_pos, -1, rx364_done
-    eq rx364_pos, -1, rx364_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
-  rx364_done:
-    rx364_cur."!cursor_fail"()
-    rx364_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<if>")
-    .return (rx364_cur)
+  rx367_done:
+    rx367_cur."!cursor_fail"()
+    rx367_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<if>")
+    .return (rx367_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("86_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("86_1271336396.90314") :method
 .annotate "line", 4
-    new $P366, "ResizablePMCArray"
-    push $P366, "if"
-    .return ($P366)
+    new $P369, "ResizablePMCArray"
+    push $P369, "if"
+    .return ($P369)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<unless>"  :subid("87_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_cond:sym<unless>"  :subid("87_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx372_tgt
-    .local int rx372_pos
-    .local int rx372_off
-    .local int rx372_eos
-    .local int rx372_rep
-    .local pmc rx372_cur
-    (rx372_cur, rx372_pos, rx372_tgt) = self."!cursor_start"()
-    rx372_cur."!cursor_debug"("START ", "statement_mod_cond:sym<unless>")
-    .lex unicode:"$\x{a2}", rx372_cur
+    .local string rx375_tgt
+    .local int rx375_pos
+    .local int rx375_off
+    .local int rx375_eos
+    .local int rx375_rep
+    .local pmc rx375_cur
+    (rx375_cur, rx375_pos, rx375_tgt) = self."!cursor_start"()
+    rx375_cur."!cursor_debug"("START ", "statement_mod_cond:sym<unless>")
+    .lex unicode:"$\x{a2}", rx375_cur
     .local pmc match
     .lex "$/", match
-    length rx372_eos, rx372_tgt
-    set rx372_off, 0
-    lt rx372_pos, 2, rx372_start
-    sub rx372_off, rx372_pos, 1
-    substr rx372_tgt, rx372_tgt, rx372_off
-  rx372_start:
+    length rx375_eos, rx375_tgt
+    set rx375_off, 0
+    lt rx375_pos, 2, rx375_start
+    sub rx375_off, rx375_pos, 1
+    substr rx375_tgt, rx375_tgt, rx375_off
+  rx375_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan375_done
-    goto rxscan375_scan
-  rxscan375_loop:
-    ($P10) = rx372_cur."from"()
+    ne $I10, -1, rxscan378_done
+    goto rxscan378_scan
+  rxscan378_loop:
+    ($P10) = rx375_cur."from"()
     inc $P10
-    set rx372_pos, $P10
-    ge rx372_pos, rx372_eos, rxscan375_done
-  rxscan375_scan:
-    set_addr $I10, rxscan375_loop
-    rx372_cur."!mark_push"(0, rx372_pos, $I10)
-  rxscan375_done:
-.annotate "line", 207
+    set rx375_pos, $P10
+    ge rx375_pos, rx375_eos, rxscan378_done
+  rxscan378_scan:
+    set_addr $I10, rxscan378_loop
+    rx375_cur."!mark_push"(0, rx375_pos, $I10)
+  rxscan378_done:
+.annotate "line", 211
   # rx subcapture "sym"
-    set_addr $I10, rxcap_376_fail
-    rx372_cur."!mark_push"(0, rx372_pos, $I10)
+    set_addr $I10, rxcap_379_fail
+    rx375_cur."!mark_push"(0, rx375_pos, $I10)
   # rx literal  "unless"
-    add $I11, rx372_pos, 6
-    gt $I11, rx372_eos, rx372_fail
-    sub $I11, rx372_pos, rx372_off
-    substr $S10, rx372_tgt, $I11, 6
-    ne $S10, "unless", rx372_fail
-    add rx372_pos, 6
-    set_addr $I10, rxcap_376_fail
-    ($I12, $I11) = rx372_cur."!mark_peek"($I10)
-    rx372_cur."!cursor_pos"($I11)
-    ($P10) = rx372_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx372_pos, "")
-    rx372_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx375_pos, 6
+    gt $I11, rx375_eos, rx375_fail
+    sub $I11, rx375_pos, rx375_off
+    substr $S10, rx375_tgt, $I11, 6
+    ne $S10, "unless", rx375_fail
+    add rx375_pos, 6
+    set_addr $I10, rxcap_379_fail
+    ($I12, $I11) = rx375_cur."!mark_peek"($I10)
+    rx375_cur."!cursor_pos"($I11)
+    ($P10) = rx375_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx375_pos, "")
+    rx375_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_376_done
-  rxcap_376_fail:
-    goto rx372_fail
-  rxcap_376_done:
-  # rx subrule "ws" subtype=method negate=
-    rx372_cur."!cursor_pos"(rx372_pos)
-    $P10 = rx372_cur."ws"()
-    unless $P10, rx372_fail
-    rx372_pos = $P10."pos"()
+    goto rxcap_379_done
+  rxcap_379_fail:
+    goto rx375_fail
+  rxcap_379_done:
+  # rx subrule "ws" subtype=method negate=
+    rx375_cur."!cursor_pos"(rx375_pos)
+    $P10 = rx375_cur."ws"()
+    unless $P10, rx375_fail
+    rx375_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx372_cur."!cursor_pos"(rx372_pos)
-    $P10 = rx372_cur."EXPR"()
-    unless $P10, rx372_fail
-    rx372_cur."!mark_push"(0, -1, 0, $P10)
+    rx375_cur."!cursor_pos"(rx375_pos)
+    $P10 = rx375_cur."EXPR"()
+    unless $P10, rx375_fail
+    rx375_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx372_pos = $P10."pos"()
+    rx375_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx372_cur."!cursor_pos"(rx372_pos)
-    $P10 = rx372_cur."ws"()
-    unless $P10, rx372_fail
-    rx372_pos = $P10."pos"()
+    rx375_cur."!cursor_pos"(rx375_pos)
+    $P10 = rx375_cur."ws"()
+    unless $P10, rx375_fail
+    rx375_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)
-    .return (rx372_cur)
-  rx372_fail:
+    rx375_cur."!cursor_pass"(rx375_pos, "statement_mod_cond:sym<unless>")
+    rx375_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<unless>", " at pos=", rx375_pos)
+    .return (rx375_cur)
+  rx375_fail:
 .annotate "line", 4
-    (rx372_rep, rx372_pos, $I10, $P10) = rx372_cur."!mark_fail"(0)
-    lt rx372_pos, -1, rx372_done
-    eq rx372_pos, -1, rx372_fail
+    (rx375_rep, rx375_pos, $I10, $P10) = rx375_cur."!mark_fail"(0)
+    lt rx375_pos, -1, rx375_done
+    eq rx375_pos, -1, rx375_fail
     jump $I10
-  rx372_done:
-    rx372_cur."!cursor_fail"()
-    rx372_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<unless>")
-    .return (rx372_cur)
+  rx375_done:
+    rx375_cur."!cursor_fail"()
+    rx375_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<unless>")
+    .return (rx375_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("88_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("88_1271336396.90314") :method
 .annotate "line", 4
-    new $P374, "ResizablePMCArray"
-    push $P374, "unless"
-    .return ($P374)
+    new $P377, "ResizablePMCArray"
+    push $P377, "unless"
+    .return ($P377)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop"  :subid("89_1267204702.05125") :method
-.annotate "line", 209
-    $P380 = self."!protoregex"("statement_mod_loop")
-    .return ($P380)
+.sub "statement_mod_loop"  :subid("89_1271336396.90314") :method
+.annotate "line", 213
+    $P383 = self."!protoregex"("statement_mod_loop")
+    .return ($P383)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop"  :subid("90_1267204702.05125") :method
-.annotate "line", 209
-    $P382 = self."!PREFIX__!protoregex"("statement_mod_loop")
-    .return ($P382)
+.sub "!PREFIX__statement_mod_loop"  :subid("90_1271336396.90314") :method
+.annotate "line", 213
+    $P385 = self."!PREFIX__!protoregex"("statement_mod_loop")
+    .return ($P385)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<while>"  :subid("91_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_loop:sym<while>"  :subid("91_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx384_tgt
-    .local int rx384_pos
-    .local int rx384_off
-    .local int rx384_eos
-    .local int rx384_rep
-    .local pmc rx384_cur
-    (rx384_cur, rx384_pos, rx384_tgt) = self."!cursor_start"()
-    rx384_cur."!cursor_debug"("START ", "statement_mod_loop:sym<while>")
-    .lex unicode:"$\x{a2}", rx384_cur
-    .local pmc match
-    .lex "$/", match
-    length rx384_eos, rx384_tgt
-    set rx384_off, 0
-    lt rx384_pos, 2, rx384_start
-    sub rx384_off, rx384_pos, 1
-    substr rx384_tgt, rx384_tgt, rx384_off
-  rx384_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan387_done
-    goto rxscan387_scan
-  rxscan387_loop:
-    ($P10) = rx384_cur."from"()
-    inc $P10
-    set rx384_pos, $P10
-    ge rx384_pos, rx384_eos, rxscan387_done
-  rxscan387_scan:
-    set_addr $I10, rxscan387_loop
-    rx384_cur."!mark_push"(0, rx384_pos, $I10)
-  rxscan387_done:
-.annotate "line", 211
+    .local string rx387_tgt
+    .local int rx387_pos
+    .local int rx387_off
+    .local int rx387_eos
+    .local int rx387_rep
+    .local pmc rx387_cur
+    (rx387_cur, rx387_pos, rx387_tgt) = self."!cursor_start"()
+    rx387_cur."!cursor_debug"("START ", "statement_mod_loop:sym<while>")
+    .lex unicode:"$\x{a2}", rx387_cur
+    .local pmc match
+    .lex "$/", match
+    length rx387_eos, rx387_tgt
+    set rx387_off, 0
+    lt rx387_pos, 2, rx387_start
+    sub rx387_off, rx387_pos, 1
+    substr rx387_tgt, rx387_tgt, rx387_off
+  rx387_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan390_done
+    goto rxscan390_scan
+  rxscan390_loop:
+    ($P10) = rx387_cur."from"()
+    inc $P10
+    set rx387_pos, $P10
+    ge rx387_pos, rx387_eos, rxscan390_done
+  rxscan390_scan:
+    set_addr $I10, rxscan390_loop
+    rx387_cur."!mark_push"(0, rx387_pos, $I10)
+  rxscan390_done:
+.annotate "line", 215
   # rx subcapture "sym"
-    set_addr $I10, rxcap_388_fail
-    rx384_cur."!mark_push"(0, rx384_pos, $I10)
+    set_addr $I10, rxcap_391_fail
+    rx387_cur."!mark_push"(0, rx387_pos, $I10)
   # rx literal  "while"
-    add $I11, rx384_pos, 5
-    gt $I11, rx384_eos, rx384_fail
-    sub $I11, rx384_pos, rx384_off
-    substr $S10, rx384_tgt, $I11, 5
-    ne $S10, "while", rx384_fail
-    add rx384_pos, 5
-    set_addr $I10, rxcap_388_fail
-    ($I12, $I11) = rx384_cur."!mark_peek"($I10)
-    rx384_cur."!cursor_pos"($I11)
-    ($P10) = rx384_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx384_pos, "")
-    rx384_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx387_pos, 5
+    gt $I11, rx387_eos, rx387_fail
+    sub $I11, rx387_pos, rx387_off
+    substr $S10, rx387_tgt, $I11, 5
+    ne $S10, "while", rx387_fail
+    add rx387_pos, 5
+    set_addr $I10, rxcap_391_fail
+    ($I12, $I11) = rx387_cur."!mark_peek"($I10)
+    rx387_cur."!cursor_pos"($I11)
+    ($P10) = rx387_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx387_pos, "")
+    rx387_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_388_done
-  rxcap_388_fail:
-    goto rx384_fail
-  rxcap_388_done:
-  # rx subrule "ws" subtype=method negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."ws"()
-    unless $P10, rx384_fail
-    rx384_pos = $P10."pos"()
+    goto rxcap_391_done
+  rxcap_391_fail:
+    goto rx387_fail
+  rxcap_391_done:
+  # rx subrule "ws" subtype=method negate=
+    rx387_cur."!cursor_pos"(rx387_pos)
+    $P10 = rx387_cur."ws"()
+    unless $P10, rx387_fail
+    rx387_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."EXPR"()
-    unless $P10, rx384_fail
-    rx384_cur."!mark_push"(0, -1, 0, $P10)
+    rx387_cur."!cursor_pos"(rx387_pos)
+    $P10 = rx387_cur."EXPR"()
+    unless $P10, rx387_fail
+    rx387_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx384_pos = $P10."pos"()
+    rx387_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."ws"()
-    unless $P10, rx384_fail
-    rx384_pos = $P10."pos"()
+    rx387_cur."!cursor_pos"(rx387_pos)
+    $P10 = rx387_cur."ws"()
+    unless $P10, rx387_fail
+    rx387_pos = $P10."pos"()
   # rx pass
-    rx384_cur."!cursor_pass"(rx384_pos, "statement_mod_loop:sym<while>")
-    rx384_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<while>", " at pos=", rx384_pos)
-    .return (rx384_cur)
-  rx384_fail:
+    rx387_cur."!cursor_pass"(rx387_pos, "statement_mod_loop:sym<while>")
+    rx387_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<while>", " at pos=", rx387_pos)
+    .return (rx387_cur)
+  rx387_fail:
 .annotate "line", 4
-    (rx384_rep, rx384_pos, $I10, $P10) = rx384_cur."!mark_fail"(0)
-    lt rx384_pos, -1, rx384_done
-    eq rx384_pos, -1, rx384_fail
+    (rx387_rep, rx387_pos, $I10, $P10) = rx387_cur."!mark_fail"(0)
+    lt rx387_pos, -1, rx387_done
+    eq rx387_pos, -1, rx387_fail
     jump $I10
-  rx384_done:
-    rx384_cur."!cursor_fail"()
-    rx384_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<while>")
-    .return (rx384_cur)
+  rx387_done:
+    rx387_cur."!cursor_fail"()
+    rx387_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<while>")
+    .return (rx387_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("92_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("92_1271336396.90314") :method
 .annotate "line", 4
-    new $P386, "ResizablePMCArray"
-    push $P386, "while"
-    .return ($P386)
+    new $P389, "ResizablePMCArray"
+    push $P389, "while"
+    .return ($P389)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<until>"  :subid("93_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_loop:sym<until>"  :subid("93_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx392_tgt
-    .local int rx392_pos
-    .local int rx392_off
-    .local int rx392_eos
-    .local int rx392_rep
-    .local pmc rx392_cur
-    (rx392_cur, rx392_pos, rx392_tgt) = self."!cursor_start"()
-    rx392_cur."!cursor_debug"("START ", "statement_mod_loop:sym<until>")
-    .lex unicode:"$\x{a2}", rx392_cur
+    .local string rx395_tgt
+    .local int rx395_pos
+    .local int rx395_off
+    .local int rx395_eos
+    .local int rx395_rep
+    .local pmc rx395_cur
+    (rx395_cur, rx395_pos, rx395_tgt) = self."!cursor_start"()
+    rx395_cur."!cursor_debug"("START ", "statement_mod_loop:sym<until>")
+    .lex unicode:"$\x{a2}", rx395_cur
     .local pmc match
     .lex "$/", match
-    length rx392_eos, rx392_tgt
-    set rx392_off, 0
-    lt rx392_pos, 2, rx392_start
-    sub rx392_off, rx392_pos, 1
-    substr rx392_tgt, rx392_tgt, rx392_off
-  rx392_start:
+    length rx395_eos, rx395_tgt
+    set rx395_off, 0
+    lt rx395_pos, 2, rx395_start
+    sub rx395_off, rx395_pos, 1
+    substr rx395_tgt, rx395_tgt, rx395_off
+  rx395_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan395_done
-    goto rxscan395_scan
-  rxscan395_loop:
-    ($P10) = rx392_cur."from"()
+    ne $I10, -1, rxscan398_done
+    goto rxscan398_scan
+  rxscan398_loop:
+    ($P10) = rx395_cur."from"()
     inc $P10
-    set rx392_pos, $P10
-    ge rx392_pos, rx392_eos, rxscan395_done
-  rxscan395_scan:
-    set_addr $I10, rxscan395_loop
-    rx392_cur."!mark_push"(0, rx392_pos, $I10)
-  rxscan395_done:
-.annotate "line", 212
+    set rx395_pos, $P10
+    ge rx395_pos, rx395_eos, rxscan398_done
+  rxscan398_scan:
+    set_addr $I10, rxscan398_loop
+    rx395_cur."!mark_push"(0, rx395_pos, $I10)
+  rxscan398_done:
+.annotate "line", 216
   # rx subcapture "sym"
-    set_addr $I10, rxcap_396_fail
-    rx392_cur."!mark_push"(0, rx392_pos, $I10)
+    set_addr $I10, rxcap_399_fail
+    rx395_cur."!mark_push"(0, rx395_pos, $I10)
   # rx literal  "until"
-    add $I11, rx392_pos, 5
-    gt $I11, rx392_eos, rx392_fail
-    sub $I11, rx392_pos, rx392_off
-    substr $S10, rx392_tgt, $I11, 5
-    ne $S10, "until", rx392_fail
-    add rx392_pos, 5
-    set_addr $I10, rxcap_396_fail
-    ($I12, $I11) = rx392_cur."!mark_peek"($I10)
-    rx392_cur."!cursor_pos"($I11)
-    ($P10) = rx392_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx392_pos, "")
-    rx392_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx395_pos, 5
+    gt $I11, rx395_eos, rx395_fail
+    sub $I11, rx395_pos, rx395_off
+    substr $S10, rx395_tgt, $I11, 5
+    ne $S10, "until", rx395_fail
+    add rx395_pos, 5
+    set_addr $I10, rxcap_399_fail
+    ($I12, $I11) = rx395_cur."!mark_peek"($I10)
+    rx395_cur."!cursor_pos"($I11)
+    ($P10) = rx395_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx395_pos, "")
+    rx395_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_396_done
-  rxcap_396_fail:
-    goto rx392_fail
-  rxcap_396_done:
-  # rx subrule "ws" subtype=method negate=
-    rx392_cur."!cursor_pos"(rx392_pos)
-    $P10 = rx392_cur."ws"()
-    unless $P10, rx392_fail
-    rx392_pos = $P10."pos"()
+    goto rxcap_399_done
+  rxcap_399_fail:
+    goto rx395_fail
+  rxcap_399_done:
+  # rx subrule "ws" subtype=method negate=
+    rx395_cur."!cursor_pos"(rx395_pos)
+    $P10 = rx395_cur."ws"()
+    unless $P10, rx395_fail
+    rx395_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx392_cur."!cursor_pos"(rx392_pos)
-    $P10 = rx392_cur."EXPR"()
-    unless $P10, rx392_fail
-    rx392_cur."!mark_push"(0, -1, 0, $P10)
+    rx395_cur."!cursor_pos"(rx395_pos)
+    $P10 = rx395_cur."EXPR"()
+    unless $P10, rx395_fail
+    rx395_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx392_pos = $P10."pos"()
+    rx395_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx392_cur."!cursor_pos"(rx392_pos)
-    $P10 = rx392_cur."ws"()
-    unless $P10, rx392_fail
-    rx392_pos = $P10."pos"()
+    rx395_cur."!cursor_pos"(rx395_pos)
+    $P10 = rx395_cur."ws"()
+    unless $P10, rx395_fail
+    rx395_pos = $P10."pos"()
   # rx pass
-    rx392_cur."!cursor_pass"(rx392_pos, "statement_mod_loop:sym<until>")
-    rx392_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<until>", " at pos=", rx392_pos)
-    .return (rx392_cur)
-  rx392_fail:
+    rx395_cur."!cursor_pass"(rx395_pos, "statement_mod_loop:sym<until>")
+    rx395_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<until>", " at pos=", rx395_pos)
+    .return (rx395_cur)
+  rx395_fail:
 .annotate "line", 4
-    (rx392_rep, rx392_pos, $I10, $P10) = rx392_cur."!mark_fail"(0)
-    lt rx392_pos, -1, rx392_done
-    eq rx392_pos, -1, rx392_fail
+    (rx395_rep, rx395_pos, $I10, $P10) = rx395_cur."!mark_fail"(0)
+    lt rx395_pos, -1, rx395_done
+    eq rx395_pos, -1, rx395_fail
     jump $I10
-  rx392_done:
-    rx392_cur."!cursor_fail"()
-    rx392_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<until>")
-    .return (rx392_cur)
+  rx395_done:
+    rx395_cur."!cursor_fail"()
+    rx395_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<until>")
+    .return (rx395_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("94_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("94_1271336396.90314") :method
 .annotate "line", 4
-    new $P394, "ResizablePMCArray"
-    push $P394, "until"
-    .return ($P394)
+    new $P397, "ResizablePMCArray"
+    push $P397, "until"
+    .return ($P397)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<fatarrow>"  :subid("95_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<fatarrow>"  :subid("95_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx400_tgt
-    .local int rx400_pos
-    .local int rx400_off
-    .local int rx400_eos
-    .local int rx400_rep
-    .local pmc rx400_cur
-    (rx400_cur, rx400_pos, rx400_tgt) = self."!cursor_start"()
-    rx400_cur."!cursor_debug"("START ", "term:sym<fatarrow>")
-    .lex unicode:"$\x{a2}", rx400_cur
+    .local string rx403_tgt
+    .local int rx403_pos
+    .local int rx403_off
+    .local int rx403_eos
+    .local int rx403_rep
+    .local pmc rx403_cur
+    (rx403_cur, rx403_pos, rx403_tgt) = self."!cursor_start"()
+    rx403_cur."!cursor_debug"("START ", "term:sym<fatarrow>")
+    .lex unicode:"$\x{a2}", rx403_cur
     .local pmc match
     .lex "$/", match
-    length rx400_eos, rx400_tgt
-    set rx400_off, 0
-    lt rx400_pos, 2, rx400_start
-    sub rx400_off, rx400_pos, 1
-    substr rx400_tgt, rx400_tgt, rx400_off
-  rx400_start:
+    length rx403_eos, rx403_tgt
+    set rx403_off, 0
+    lt rx403_pos, 2, rx403_start
+    sub rx403_off, rx403_pos, 1
+    substr rx403_tgt, rx403_tgt, rx403_off
+  rx403_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan404_done
-    goto rxscan404_scan
-  rxscan404_loop:
-    ($P10) = rx400_cur."from"()
+    ne $I10, -1, rxscan407_done
+    goto rxscan407_scan
+  rxscan407_loop:
+    ($P10) = rx403_cur."from"()
     inc $P10
-    set rx400_pos, $P10
-    ge rx400_pos, rx400_eos, rxscan404_done
-  rxscan404_scan:
-    set_addr $I10, rxscan404_loop
-    rx400_cur."!mark_push"(0, rx400_pos, $I10)
-  rxscan404_done:
-.annotate "line", 216
+    set rx403_pos, $P10
+    ge rx403_pos, rx403_eos, rxscan407_done
+  rxscan407_scan:
+    set_addr $I10, rxscan407_loop
+    rx403_cur."!mark_push"(0, rx403_pos, $I10)
+  rxscan407_done:
+.annotate "line", 220
   # rx subrule "fatarrow" subtype=capture negate=
-    rx400_cur."!cursor_pos"(rx400_pos)
-    $P10 = rx400_cur."fatarrow"()
-    unless $P10, rx400_fail
-    rx400_cur."!mark_push"(0, -1, 0, $P10)
+    rx403_cur."!cursor_pos"(rx403_pos)
+    $P10 = rx403_cur."fatarrow"()
+    unless $P10, rx403_fail
+    rx403_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("fatarrow")
-    rx400_pos = $P10."pos"()
+    rx403_pos = $P10."pos"()
   # rx pass
-    rx400_cur."!cursor_pass"(rx400_pos, "term:sym<fatarrow>")
-    rx400_cur."!cursor_debug"("PASS  ", "term:sym<fatarrow>", " at pos=", rx400_pos)
-    .return (rx400_cur)
-  rx400_fail:
+    rx403_cur."!cursor_pass"(rx403_pos, "term:sym<fatarrow>")
+    rx403_cur."!cursor_debug"("PASS  ", "term:sym<fatarrow>", " at pos=", rx403_pos)
+    .return (rx403_cur)
+  rx403_fail:
 .annotate "line", 4
-    (rx400_rep, rx400_pos, $I10, $P10) = rx400_cur."!mark_fail"(0)
-    lt rx400_pos, -1, rx400_done
-    eq rx400_pos, -1, rx400_fail
+    (rx403_rep, rx403_pos, $I10, $P10) = rx403_cur."!mark_fail"(0)
+    lt rx403_pos, -1, rx403_done
+    eq rx403_pos, -1, rx403_fail
     jump $I10
-  rx400_done:
-    rx400_cur."!cursor_fail"()
-    rx400_cur."!cursor_debug"("FAIL  ", "term:sym<fatarrow>")
-    .return (rx400_cur)
+  rx403_done:
+    rx403_cur."!cursor_fail"()
+    rx403_cur."!cursor_debug"("FAIL  ", "term:sym<fatarrow>")
+    .return (rx403_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<fatarrow>"  :subid("96_1267204702.05125") :method
+.sub "!PREFIX__term:sym<fatarrow>"  :subid("96_1271336396.90314") :method
 .annotate "line", 4
-    $P402 = self."!PREFIX__!subrule"("fatarrow", "")
-    new $P403, "ResizablePMCArray"
-    push $P403, $P402
-    .return ($P403)
+    $P405 = self."!PREFIX__!subrule"("fatarrow", "")
+    new $P406, "ResizablePMCArray"
+    push $P406, $P405
+    .return ($P406)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<colonpair>"  :subid("97_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<colonpair>"  :subid("97_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx406_tgt
-    .local int rx406_pos
-    .local int rx406_off
-    .local int rx406_eos
-    .local int rx406_rep
-    .local pmc rx406_cur
-    (rx406_cur, rx406_pos, rx406_tgt) = self."!cursor_start"()
-    rx406_cur."!cursor_debug"("START ", "term:sym<colonpair>")
-    .lex unicode:"$\x{a2}", rx406_cur
+    .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) = self."!cursor_start"()
+    rx409_cur."!cursor_debug"("START ", "term:sym<colonpair>")
+    .lex unicode:"$\x{a2}", rx409_cur
     .local pmc match
     .lex "$/", match
-    length rx406_eos, rx406_tgt
-    set rx406_off, 0
-    lt rx406_pos, 2, rx406_start
-    sub rx406_off, rx406_pos, 1
-    substr rx406_tgt, rx406_tgt, rx406_off
-  rx406_start:
+    length rx409_eos, rx409_tgt
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan410_done
-    goto rxscan410_scan
-  rxscan410_loop:
-    ($P10) = rx406_cur."from"()
+    ne $I10, -1, rxscan413_done
+    goto rxscan413_scan
+  rxscan413_loop:
+    ($P10) = rx409_cur."from"()
     inc $P10
-    set rx406_pos, $P10
-    ge rx406_pos, rx406_eos, rxscan410_done
-  rxscan410_scan:
-    set_addr $I10, rxscan410_loop
-    rx406_cur."!mark_push"(0, rx406_pos, $I10)
-  rxscan410_done:
-.annotate "line", 217
+    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", 221
   # rx subrule "colonpair" subtype=capture negate=
-    rx406_cur."!cursor_pos"(rx406_pos)
-    $P10 = rx406_cur."colonpair"()
-    unless $P10, rx406_fail
-    rx406_cur."!mark_push"(0, -1, 0, $P10)
+    rx409_cur."!cursor_pos"(rx409_pos)
+    $P10 = rx409_cur."colonpair"()
+    unless $P10, rx409_fail
+    rx409_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("colonpair")
-    rx406_pos = $P10."pos"()
+    rx409_pos = $P10."pos"()
   # rx pass
-    rx406_cur."!cursor_pass"(rx406_pos, "term:sym<colonpair>")
-    rx406_cur."!cursor_debug"("PASS  ", "term:sym<colonpair>", " at pos=", rx406_pos)
-    .return (rx406_cur)
-  rx406_fail:
+    rx409_cur."!cursor_pass"(rx409_pos, "term:sym<colonpair>")
+    rx409_cur."!cursor_debug"("PASS  ", "term:sym<colonpair>", " at pos=", rx409_pos)
+    .return (rx409_cur)
+  rx409_fail:
 .annotate "line", 4
-    (rx406_rep, rx406_pos, $I10, $P10) = rx406_cur."!mark_fail"(0)
-    lt rx406_pos, -1, rx406_done
-    eq rx406_pos, -1, rx406_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
-  rx406_done:
-    rx406_cur."!cursor_fail"()
-    rx406_cur."!cursor_debug"("FAIL  ", "term:sym<colonpair>")
-    .return (rx406_cur)
+  rx409_done:
+    rx409_cur."!cursor_fail"()
+    rx409_cur."!cursor_debug"("FAIL  ", "term:sym<colonpair>")
+    .return (rx409_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<colonpair>"  :subid("98_1267204702.05125") :method
+.sub "!PREFIX__term:sym<colonpair>"  :subid("98_1271336396.90314") :method
 .annotate "line", 4
-    $P408 = self."!PREFIX__!subrule"("colonpair", "")
-    new $P409, "ResizablePMCArray"
-    push $P409, $P408
-    .return ($P409)
+    $P411 = self."!PREFIX__!subrule"("colonpair", "")
+    new $P412, "ResizablePMCArray"
+    push $P412, $P411
+    .return ($P412)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<variable>"  :subid("99_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<variable>"  :subid("99_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx412_tgt
-    .local int rx412_pos
-    .local int rx412_off
-    .local int rx412_eos
-    .local int rx412_rep
-    .local pmc rx412_cur
-    (rx412_cur, rx412_pos, rx412_tgt) = self."!cursor_start"()
-    rx412_cur."!cursor_debug"("START ", "term:sym<variable>")
-    .lex unicode:"$\x{a2}", rx412_cur
+    .local string rx415_tgt
+    .local int rx415_pos
+    .local int rx415_off
+    .local int rx415_eos
+    .local int rx415_rep
+    .local pmc rx415_cur
+    (rx415_cur, rx415_pos, rx415_tgt) = self."!cursor_start"()
+    rx415_cur."!cursor_debug"("START ", "term:sym<variable>")
+    .lex unicode:"$\x{a2}", rx415_cur
     .local pmc match
     .lex "$/", match
-    length rx412_eos, rx412_tgt
-    set rx412_off, 0
-    lt rx412_pos, 2, rx412_start
-    sub rx412_off, rx412_pos, 1
-    substr rx412_tgt, rx412_tgt, rx412_off
-  rx412_start:
+    length rx415_eos, rx415_tgt
+    set rx415_off, 0
+    lt rx415_pos, 2, rx415_start
+    sub rx415_off, rx415_pos, 1
+    substr rx415_tgt, rx415_tgt, rx415_off
+  rx415_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan416_done
-    goto rxscan416_scan
-  rxscan416_loop:
-    ($P10) = rx412_cur."from"()
+    ne $I10, -1, rxscan419_done
+    goto rxscan419_scan
+  rxscan419_loop:
+    ($P10) = rx415_cur."from"()
     inc $P10
-    set rx412_pos, $P10
-    ge rx412_pos, rx412_eos, rxscan416_done
-  rxscan416_scan:
-    set_addr $I10, rxscan416_loop
-    rx412_cur."!mark_push"(0, rx412_pos, $I10)
-  rxscan416_done:
-.annotate "line", 218
+    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", 222
   # rx subrule "variable" subtype=capture negate=
-    rx412_cur."!cursor_pos"(rx412_pos)
-    $P10 = rx412_cur."variable"()
-    unless $P10, rx412_fail
-    rx412_cur."!mark_push"(0, -1, 0, $P10)
+    rx415_cur."!cursor_pos"(rx415_pos)
+    $P10 = rx415_cur."variable"()
+    unless $P10, rx415_fail
+    rx415_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx412_pos = $P10."pos"()
+    rx415_pos = $P10."pos"()
   # rx pass
-    rx412_cur."!cursor_pass"(rx412_pos, "term:sym<variable>")
-    rx412_cur."!cursor_debug"("PASS  ", "term:sym<variable>", " at pos=", rx412_pos)
-    .return (rx412_cur)
-  rx412_fail:
+    rx415_cur."!cursor_pass"(rx415_pos, "term:sym<variable>")
+    rx415_cur."!cursor_debug"("PASS  ", "term:sym<variable>", " at pos=", rx415_pos)
+    .return (rx415_cur)
+  rx415_fail:
 .annotate "line", 4
-    (rx412_rep, rx412_pos, $I10, $P10) = rx412_cur."!mark_fail"(0)
-    lt rx412_pos, -1, rx412_done
-    eq rx412_pos, -1, rx412_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
-  rx412_done:
-    rx412_cur."!cursor_fail"()
-    rx412_cur."!cursor_debug"("FAIL  ", "term:sym<variable>")
-    .return (rx412_cur)
+  rx415_done:
+    rx415_cur."!cursor_fail"()
+    rx415_cur."!cursor_debug"("FAIL  ", "term:sym<variable>")
+    .return (rx415_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<variable>"  :subid("100_1267204702.05125") :method
+.sub "!PREFIX__term:sym<variable>"  :subid("100_1271336396.90314") :method
 .annotate "line", 4
-    $P414 = self."!PREFIX__!subrule"("variable", "")
-    new $P415, "ResizablePMCArray"
-    push $P415, $P414
-    .return ($P415)
+    $P417 = self."!PREFIX__!subrule"("variable", "")
+    new $P418, "ResizablePMCArray"
+    push $P418, $P417
+    .return ($P418)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<package_declarator>"  :subid("101_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<package_declarator>"  :subid("101_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx418_tgt
-    .local int rx418_pos
-    .local int rx418_off
-    .local int rx418_eos
-    .local int rx418_rep
-    .local pmc rx418_cur
-    (rx418_cur, rx418_pos, rx418_tgt) = self."!cursor_start"()
-    rx418_cur."!cursor_debug"("START ", "term:sym<package_declarator>")
-    .lex unicode:"$\x{a2}", rx418_cur
+    .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) = self."!cursor_start"()
+    rx421_cur."!cursor_debug"("START ", "term:sym<package_declarator>")
+    .lex unicode:"$\x{a2}", rx421_cur
     .local pmc match
     .lex "$/", match
-    length rx418_eos, rx418_tgt
-    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:
+    length rx421_eos, rx421_tgt
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan422_done
-    goto rxscan422_scan
-  rxscan422_loop:
-    ($P10) = rx418_cur."from"()
+    ne $I10, -1, rxscan425_done
+    goto rxscan425_scan
+  rxscan425_loop:
+    ($P10) = rx421_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", 219
+    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", 223
   # rx subrule "package_declarator" subtype=capture negate=
-    rx418_cur."!cursor_pos"(rx418_pos)
-    $P10 = rx418_cur."package_declarator"()
-    unless $P10, rx418_fail
-    rx418_cur."!mark_push"(0, -1, 0, $P10)
+    rx421_cur."!cursor_pos"(rx421_pos)
+    $P10 = rx421_cur."package_declarator"()
+    unless $P10, rx421_fail
+    rx421_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_declarator")
-    rx418_pos = $P10."pos"()
+    rx421_pos = $P10."pos"()
   # rx pass
-    rx418_cur."!cursor_pass"(rx418_pos, "term:sym<package_declarator>")
-    rx418_cur."!cursor_debug"("PASS  ", "term:sym<package_declarator>", " at pos=", rx418_pos)
-    .return (rx418_cur)
-  rx418_fail:
+    rx421_cur."!cursor_pass"(rx421_pos, "term:sym<package_declarator>")
+    rx421_cur."!cursor_debug"("PASS  ", "term:sym<package_declarator>", " at pos=", rx421_pos)
+    .return (rx421_cur)
+  rx421_fail:
 .annotate "line", 4
-    (rx418_rep, rx418_pos, $I10, $P10) = rx418_cur."!mark_fail"(0)
-    lt rx418_pos, -1, rx418_done
-    eq rx418_pos, -1, rx418_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
-  rx418_done:
-    rx418_cur."!cursor_fail"()
-    rx418_cur."!cursor_debug"("FAIL  ", "term:sym<package_declarator>")
-    .return (rx418_cur)
+  rx421_done:
+    rx421_cur."!cursor_fail"()
+    rx421_cur."!cursor_debug"("FAIL  ", "term:sym<package_declarator>")
+    .return (rx421_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<package_declarator>"  :subid("102_1267204702.05125") :method
+.sub "!PREFIX__term:sym<package_declarator>"  :subid("102_1271336396.90314") :method
 .annotate "line", 4
-    $P420 = self."!PREFIX__!subrule"("package_declarator", "")
-    new $P421, "ResizablePMCArray"
-    push $P421, $P420
-    .return ($P421)
+    $P423 = self."!PREFIX__!subrule"("package_declarator", "")
+    new $P424, "ResizablePMCArray"
+    push $P424, $P423
+    .return ($P424)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<scope_declarator>"  :subid("103_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<scope_declarator>"  :subid("103_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx424_tgt
-    .local int rx424_pos
-    .local int rx424_off
-    .local int rx424_eos
-    .local int rx424_rep
-    .local pmc rx424_cur
-    (rx424_cur, rx424_pos, rx424_tgt) = self."!cursor_start"()
-    rx424_cur."!cursor_debug"("START ", "term:sym<scope_declarator>")
-    .lex unicode:"$\x{a2}", rx424_cur
+    .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) = self."!cursor_start"()
+    rx427_cur."!cursor_debug"("START ", "term:sym<scope_declarator>")
+    .lex unicode:"$\x{a2}", rx427_cur
     .local pmc match
     .lex "$/", match
-    length rx424_eos, rx424_tgt
-    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:
+    length rx427_eos, rx427_tgt
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan428_done
-    goto rxscan428_scan
-  rxscan428_loop:
-    ($P10) = rx424_cur."from"()
+    ne $I10, -1, rxscan431_done
+    goto rxscan431_scan
+  rxscan431_loop:
+    ($P10) = rx427_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", 220
+    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", 224
   # rx subrule "scope_declarator" subtype=capture negate=
-    rx424_cur."!cursor_pos"(rx424_pos)
-    $P10 = rx424_cur."scope_declarator"()
-    unless $P10, rx424_fail
-    rx424_cur."!mark_push"(0, -1, 0, $P10)
+    rx427_cur."!cursor_pos"(rx427_pos)
+    $P10 = rx427_cur."scope_declarator"()
+    unless $P10, rx427_fail
+    rx427_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scope_declarator")
-    rx424_pos = $P10."pos"()
+    rx427_pos = $P10."pos"()
   # rx pass
-    rx424_cur."!cursor_pass"(rx424_pos, "term:sym<scope_declarator>")
-    rx424_cur."!cursor_debug"("PASS  ", "term:sym<scope_declarator>", " at pos=", rx424_pos)
-    .return (rx424_cur)
-  rx424_fail:
+    rx427_cur."!cursor_pass"(rx427_pos, "term:sym<scope_declarator>")
+    rx427_cur."!cursor_debug"("PASS  ", "term:sym<scope_declarator>", " at pos=", rx427_pos)
+    .return (rx427_cur)
+  rx427_fail:
 .annotate "line", 4
-    (rx424_rep, rx424_pos, $I10, $P10) = rx424_cur."!mark_fail"(0)
-    lt rx424_pos, -1, rx424_done
-    eq rx424_pos, -1, rx424_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
-  rx424_done:
-    rx424_cur."!cursor_fail"()
-    rx424_cur."!cursor_debug"("FAIL  ", "term:sym<scope_declarator>")
-    .return (rx424_cur)
+  rx427_done:
+    rx427_cur."!cursor_fail"()
+    rx427_cur."!cursor_debug"("FAIL  ", "term:sym<scope_declarator>")
+    .return (rx427_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<scope_declarator>"  :subid("104_1267204702.05125") :method
+.sub "!PREFIX__term:sym<scope_declarator>"  :subid("104_1271336396.90314") :method
 .annotate "line", 4
-    $P426 = self."!PREFIX__!subrule"("scope_declarator", "")
-    new $P427, "ResizablePMCArray"
-    push $P427, $P426
-    .return ($P427)
+    $P429 = self."!PREFIX__!subrule"("scope_declarator", "")
+    new $P430, "ResizablePMCArray"
+    push $P430, $P429
+    .return ($P430)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<routine_declarator>"  :subid("105_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<routine_declarator>"  :subid("105_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx430_tgt
-    .local int rx430_pos
-    .local int rx430_off
-    .local int rx430_eos
-    .local int rx430_rep
-    .local pmc rx430_cur
-    (rx430_cur, rx430_pos, rx430_tgt) = self."!cursor_start"()
-    rx430_cur."!cursor_debug"("START ", "term:sym<routine_declarator>")
-    .lex unicode:"$\x{a2}", rx430_cur
+    .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) = self."!cursor_start"()
+    rx433_cur."!cursor_debug"("START ", "term:sym<routine_declarator>")
+    .lex unicode:"$\x{a2}", rx433_cur
     .local pmc match
     .lex "$/", match
-    length rx430_eos, rx430_tgt
-    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:
+    length rx433_eos, rx433_tgt
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan434_done
-    goto rxscan434_scan
-  rxscan434_loop:
-    ($P10) = rx430_cur."from"()
+    ne $I10, -1, rxscan437_done
+    goto rxscan437_scan
+  rxscan437_loop:
+    ($P10) = rx433_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", 221
+    set rx433_pos, $P10
+    ge rx433_pos, rx433_eos, rxscan437_done
+  rxscan437_scan:
+    set_addr $I10, rxscan437_loop
+    rx433_cur."!mark_push"(0, rx433_pos, $I10)
+  rxscan437_done:
+.annotate "line", 225
   # rx subrule "routine_declarator" subtype=capture negate=
-    rx430_cur."!cursor_pos"(rx430_pos)
-    $P10 = rx430_cur."routine_declarator"()
-    unless $P10, rx430_fail
-    rx430_cur."!mark_push"(0, -1, 0, $P10)
+    rx433_cur."!cursor_pos"(rx433_pos)
+    $P10 = rx433_cur."routine_declarator"()
+    unless $P10, rx433_fail
+    rx433_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_declarator")
-    rx430_pos = $P10."pos"()
+    rx433_pos = $P10."pos"()
   # rx pass
-    rx430_cur."!cursor_pass"(rx430_pos, "term:sym<routine_declarator>")
-    rx430_cur."!cursor_debug"("PASS  ", "term:sym<routine_declarator>", " at pos=", rx430_pos)
-    .return (rx430_cur)
-  rx430_fail:
+    rx433_cur."!cursor_pass"(rx433_pos, "term:sym<routine_declarator>")
+    rx433_cur."!cursor_debug"("PASS  ", "term:sym<routine_declarator>", " at pos=", rx433_pos)
+    .return (rx433_cur)
+  rx433_fail:
 .annotate "line", 4
-    (rx430_rep, rx430_pos, $I10, $P10) = rx430_cur."!mark_fail"(0)
-    lt rx430_pos, -1, rx430_done
-    eq rx430_pos, -1, rx430_fail
+    (rx433_rep, rx433_pos, $I10, $P10) = rx433_cur."!mark_fail"(0)
+    lt rx433_pos, -1, rx433_done
+    eq rx433_pos, -1, rx433_fail
     jump $I10
-  rx430_done:
-    rx430_cur."!cursor_fail"()
-    rx430_cur."!cursor_debug"("FAIL  ", "term:sym<routine_declarator>")
-    .return (rx430_cur)
+  rx433_done:
+    rx433_cur."!cursor_fail"()
+    rx433_cur."!cursor_debug"("FAIL  ", "term:sym<routine_declarator>")
+    .return (rx433_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<routine_declarator>"  :subid("106_1267204702.05125") :method
+.sub "!PREFIX__term:sym<routine_declarator>"  :subid("106_1271336396.90314") :method
 .annotate "line", 4
-    $P432 = self."!PREFIX__!subrule"("routine_declarator", "")
-    new $P433, "ResizablePMCArray"
-    push $P433, $P432
-    .return ($P433)
+    $P435 = self."!PREFIX__!subrule"("routine_declarator", "")
+    new $P436, "ResizablePMCArray"
+    push $P436, $P435
+    .return ($P436)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<regex_declarator>"  :subid("107_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<regex_declarator>"  :subid("107_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx436_tgt
-    .local int rx436_pos
-    .local int rx436_off
-    .local int rx436_eos
-    .local int rx436_rep
-    .local pmc rx436_cur
-    (rx436_cur, rx436_pos, rx436_tgt) = self."!cursor_start"()
-    rx436_cur."!cursor_debug"("START ", "term:sym<regex_declarator>")
-    .lex unicode:"$\x{a2}", rx436_cur
+    .local string rx439_tgt
+    .local int rx439_pos
+    .local int rx439_off
+    .local int rx439_eos
+    .local int rx439_rep
+    .local pmc rx439_cur
+    (rx439_cur, rx439_pos, rx439_tgt) = self."!cursor_start"()
+    rx439_cur."!cursor_debug"("START ", "term:sym<regex_declarator>")
+    .lex unicode:"$\x{a2}", rx439_cur
     .local pmc match
     .lex "$/", match
-    length rx436_eos, rx436_tgt
-    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:
+    length rx439_eos, rx439_tgt
+    set rx439_off, 0
+    lt rx439_pos, 2, rx439_start
+    sub rx439_off, rx439_pos, 1
+    substr rx439_tgt, rx439_tgt, rx439_off
+  rx439_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan440_done
-    goto rxscan440_scan
-  rxscan440_loop:
-    ($P10) = rx436_cur."from"()
+    ne $I10, -1, rxscan443_done
+    goto rxscan443_scan
+  rxscan443_loop:
+    ($P10) = rx439_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", 222
+    set rx439_pos, $P10
+    ge rx439_pos, rx439_eos, rxscan443_done
+  rxscan443_scan:
+    set_addr $I10, rxscan443_loop
+    rx439_cur."!mark_push"(0, rx439_pos, $I10)
+  rxscan443_done:
+.annotate "line", 226
   # rx subrule "regex_declarator" subtype=capture negate=
-    rx436_cur."!cursor_pos"(rx436_pos)
-    $P10 = rx436_cur."regex_declarator"()
-    unless $P10, rx436_fail
-    rx436_cur."!mark_push"(0, -1, 0, $P10)
+    rx439_cur."!cursor_pos"(rx439_pos)
+    $P10 = rx439_cur."regex_declarator"()
+    unless $P10, rx439_fail
+    rx439_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("regex_declarator")
-    rx436_pos = $P10."pos"()
+    rx439_pos = $P10."pos"()
   # rx pass
-    rx436_cur."!cursor_pass"(rx436_pos, "term:sym<regex_declarator>")
-    rx436_cur."!cursor_debug"("PASS  ", "term:sym<regex_declarator>", " at pos=", rx436_pos)
-    .return (rx436_cur)
-  rx436_fail:
+    rx439_cur."!cursor_pass"(rx439_pos, "term:sym<regex_declarator>")
+    rx439_cur."!cursor_debug"("PASS  ", "term:sym<regex_declarator>", " at pos=", rx439_pos)
+    .return (rx439_cur)
+  rx439_fail:
 .annotate "line", 4
-    (rx436_rep, rx436_pos, $I10, $P10) = rx436_cur."!mark_fail"(0)
-    lt rx436_pos, -1, rx436_done
-    eq rx436_pos, -1, rx436_fail
+    (rx439_rep, rx439_pos, $I10, $P10) = rx439_cur."!mark_fail"(0)
+    lt rx439_pos, -1, rx439_done
+    eq rx439_pos, -1, rx439_fail
     jump $I10
-  rx436_done:
-    rx436_cur."!cursor_fail"()
-    rx436_cur."!cursor_debug"("FAIL  ", "term:sym<regex_declarator>")
-    .return (rx436_cur)
+  rx439_done:
+    rx439_cur."!cursor_fail"()
+    rx439_cur."!cursor_debug"("FAIL  ", "term:sym<regex_declarator>")
+    .return (rx439_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<regex_declarator>"  :subid("108_1267204702.05125") :method
+.sub "!PREFIX__term:sym<regex_declarator>"  :subid("108_1271336396.90314") :method
 .annotate "line", 4
-    $P438 = self."!PREFIX__!subrule"("regex_declarator", "")
-    new $P439, "ResizablePMCArray"
-    push $P439, $P438
-    .return ($P439)
+    $P441 = self."!PREFIX__!subrule"("regex_declarator", "")
+    new $P442, "ResizablePMCArray"
+    push $P442, $P441
+    .return ($P442)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<statement_prefix>"  :subid("109_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<statement_prefix>"  :subid("109_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx442_tgt
-    .local int rx442_pos
-    .local int rx442_off
-    .local int rx442_eos
-    .local int rx442_rep
-    .local pmc rx442_cur
-    (rx442_cur, rx442_pos, rx442_tgt) = self."!cursor_start"()
-    rx442_cur."!cursor_debug"("START ", "term:sym<statement_prefix>")
-    .lex unicode:"$\x{a2}", rx442_cur
+    .local string rx445_tgt
+    .local int rx445_pos
+    .local int rx445_off
+    .local int rx445_eos
+    .local int rx445_rep
+    .local pmc rx445_cur
+    (rx445_cur, rx445_pos, rx445_tgt) = self."!cursor_start"()
+    rx445_cur."!cursor_debug"("START ", "term:sym<statement_prefix>")
+    .lex unicode:"$\x{a2}", rx445_cur
     .local pmc match
     .lex "$/", match
-    length rx442_eos, rx442_tgt
-    set rx442_off, 0
-    lt rx442_pos, 2, rx442_start
-    sub rx442_off, rx442_pos, 1
-    substr rx442_tgt, rx442_tgt, rx442_off
-  rx442_start:
+    length rx445_eos, rx445_tgt
+    set rx445_off, 0
+    lt rx445_pos, 2, rx445_start
+    sub rx445_off, rx445_pos, 1
+    substr rx445_tgt, rx445_tgt, rx445_off
+  rx445_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan446_done
-    goto rxscan446_scan
-  rxscan446_loop:
-    ($P10) = rx442_cur."from"()
+    ne $I10, -1, rxscan449_done
+    goto rxscan449_scan
+  rxscan449_loop:
+    ($P10) = rx445_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", 223
+    set rx445_pos, $P10
+    ge rx445_pos, rx445_eos, rxscan449_done
+  rxscan449_scan:
+    set_addr $I10, rxscan449_loop
+    rx445_cur."!mark_push"(0, rx445_pos, $I10)
+  rxscan449_done:
+.annotate "line", 227
   # rx subrule "statement_prefix" subtype=capture negate=
-    rx442_cur."!cursor_pos"(rx442_pos)
-    $P10 = rx442_cur."statement_prefix"()
-    unless $P10, rx442_fail
-    rx442_cur."!mark_push"(0, -1, 0, $P10)
+    rx445_cur."!cursor_pos"(rx445_pos)
+    $P10 = rx445_cur."statement_prefix"()
+    unless $P10, rx445_fail
+    rx445_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_prefix")
-    rx442_pos = $P10."pos"()
+    rx445_pos = $P10."pos"()
   # rx pass
-    rx442_cur."!cursor_pass"(rx442_pos, "term:sym<statement_prefix>")
-    rx442_cur."!cursor_debug"("PASS  ", "term:sym<statement_prefix>", " at pos=", rx442_pos)
-    .return (rx442_cur)
-  rx442_fail:
+    rx445_cur."!cursor_pass"(rx445_pos, "term:sym<statement_prefix>")
+    rx445_cur."!cursor_debug"("PASS  ", "term:sym<statement_prefix>", " at pos=", rx445_pos)
+    .return (rx445_cur)
+  rx445_fail:
 .annotate "line", 4
-    (rx442_rep, rx442_pos, $I10, $P10) = rx442_cur."!mark_fail"(0)
-    lt rx442_pos, -1, rx442_done
-    eq rx442_pos, -1, rx442_fail
+    (rx445_rep, rx445_pos, $I10, $P10) = rx445_cur."!mark_fail"(0)
+    lt rx445_pos, -1, rx445_done
+    eq rx445_pos, -1, rx445_fail
     jump $I10
-  rx442_done:
-    rx442_cur."!cursor_fail"()
-    rx442_cur."!cursor_debug"("FAIL  ", "term:sym<statement_prefix>")
-    .return (rx442_cur)
+  rx445_done:
+    rx445_cur."!cursor_fail"()
+    rx445_cur."!cursor_debug"("FAIL  ", "term:sym<statement_prefix>")
+    .return (rx445_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<statement_prefix>"  :subid("110_1267204702.05125") :method
+.sub "!PREFIX__term:sym<statement_prefix>"  :subid("110_1271336396.90314") :method
 .annotate "line", 4
-    $P444 = self."!PREFIX__!subrule"("statement_prefix", "")
-    new $P445, "ResizablePMCArray"
-    push $P445, $P444
-    .return ($P445)
+    $P447 = self."!PREFIX__!subrule"("statement_prefix", "")
+    new $P448, "ResizablePMCArray"
+    push $P448, $P447
+    .return ($P448)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<lambda>"  :subid("111_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<lambda>"  :subid("111_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx448_tgt
-    .local int rx448_pos
-    .local int rx448_off
-    .local int rx448_eos
-    .local int rx448_rep
-    .local pmc rx448_cur
-    (rx448_cur, rx448_pos, rx448_tgt) = self."!cursor_start"()
-    rx448_cur."!cursor_debug"("START ", "term:sym<lambda>")
-    .lex unicode:"$\x{a2}", rx448_cur
+    .local string rx451_tgt
+    .local int rx451_pos
+    .local int rx451_off
+    .local int rx451_eos
+    .local int rx451_rep
+    .local pmc rx451_cur
+    (rx451_cur, rx451_pos, rx451_tgt) = self."!cursor_start"()
+    rx451_cur."!cursor_debug"("START ", "term:sym<lambda>")
+    .lex unicode:"$\x{a2}", rx451_cur
     .local pmc match
     .lex "$/", match
-    length rx448_eos, rx448_tgt
-    set rx448_off, 0
-    lt rx448_pos, 2, rx448_start
-    sub rx448_off, rx448_pos, 1
-    substr rx448_tgt, rx448_tgt, rx448_off
-  rx448_start:
+    length rx451_eos, rx451_tgt
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan451_done
-    goto rxscan451_scan
-  rxscan451_loop:
-    ($P10) = rx448_cur."from"()
+    ne $I10, -1, rxscan454_done
+    goto rxscan454_scan
+  rxscan454_loop:
+    ($P10) = rx451_cur."from"()
     inc $P10
-    set rx448_pos, $P10
-    ge rx448_pos, rx448_eos, rxscan451_done
-  rxscan451_scan:
-    set_addr $I10, rxscan451_loop
-    rx448_cur."!mark_push"(0, rx448_pos, $I10)
-  rxscan451_done:
-.annotate "line", 224
+    set rx451_pos, $P10
+    ge rx451_pos, rx451_eos, rxscan454_done
+  rxscan454_scan:
+    set_addr $I10, rxscan454_loop
+    rx451_cur."!mark_push"(0, rx451_pos, $I10)
+  rxscan454_done:
+.annotate "line", 228
   # rx subrule "lambda" subtype=zerowidth negate=
-    rx448_cur."!cursor_pos"(rx448_pos)
-    $P10 = rx448_cur."lambda"()
-    unless $P10, rx448_fail
+    rx451_cur."!cursor_pos"(rx451_pos)
+    $P10 = rx451_cur."lambda"()
+    unless $P10, rx451_fail
   # rx subrule "pblock" subtype=capture negate=
-    rx448_cur."!cursor_pos"(rx448_pos)
-    $P10 = rx448_cur."pblock"()
-    unless $P10, rx448_fail
-    rx448_cur."!mark_push"(0, -1, 0, $P10)
+    rx451_cur."!cursor_pos"(rx451_pos)
+    $P10 = rx451_cur."pblock"()
+    unless $P10, rx451_fail
+    rx451_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx448_pos = $P10."pos"()
+    rx451_pos = $P10."pos"()
   # rx pass
-    rx448_cur."!cursor_pass"(rx448_pos, "term:sym<lambda>")
-    rx448_cur."!cursor_debug"("PASS  ", "term:sym<lambda>", " at pos=", rx448_pos)
-    .return (rx448_cur)
-  rx448_fail:
+    rx451_cur."!cursor_pass"(rx451_pos, "term:sym<lambda>")
+    rx451_cur."!cursor_debug"("PASS  ", "term:sym<lambda>", " at pos=", rx451_pos)
+    .return (rx451_cur)
+  rx451_fail:
 .annotate "line", 4
-    (rx448_rep, rx448_pos, $I10, $P10) = rx448_cur."!mark_fail"(0)
-    lt rx448_pos, -1, rx448_done
-    eq rx448_pos, -1, rx448_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
-  rx448_done:
-    rx448_cur."!cursor_fail"()
-    rx448_cur."!cursor_debug"("FAIL  ", "term:sym<lambda>")
-    .return (rx448_cur)
+  rx451_done:
+    rx451_cur."!cursor_fail"()
+    rx451_cur."!cursor_debug"("FAIL  ", "term:sym<lambda>")
+    .return (rx451_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<lambda>"  :subid("112_1267204702.05125") :method
+.sub "!PREFIX__term:sym<lambda>"  :subid("112_1271336396.90314") :method
 .annotate "line", 4
-    new $P450, "ResizablePMCArray"
-    push $P450, ""
-    .return ($P450)
+    new $P453, "ResizablePMCArray"
+    push $P453, ""
+    .return ($P453)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "fatarrow"  :subid("113_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "fatarrow"  :subid("113_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx453_tgt
-    .local int rx453_pos
-    .local int rx453_off
-    .local int rx453_eos
-    .local int rx453_rep
-    .local pmc rx453_cur
-    (rx453_cur, rx453_pos, rx453_tgt) = self."!cursor_start"()
-    rx453_cur."!cursor_debug"("START ", "fatarrow")
-    .lex unicode:"$\x{a2}", rx453_cur
+    .local string rx456_tgt
+    .local int rx456_pos
+    .local int rx456_off
+    .local int rx456_eos
+    .local int rx456_rep
+    .local pmc rx456_cur
+    (rx456_cur, rx456_pos, rx456_tgt) = self."!cursor_start"()
+    rx456_cur."!cursor_debug"("START ", "fatarrow")
+    .lex unicode:"$\x{a2}", rx456_cur
     .local pmc match
     .lex "$/", match
-    length rx453_eos, rx453_tgt
-    set rx453_off, 0
-    lt rx453_pos, 2, rx453_start
-    sub rx453_off, rx453_pos, 1
-    substr rx453_tgt, rx453_tgt, rx453_off
-  rx453_start:
+    length rx456_eos, rx456_tgt
+    set rx456_off, 0
+    lt rx456_pos, 2, rx456_start
+    sub rx456_off, rx456_pos, 1
+    substr rx456_tgt, rx456_tgt, rx456_off
+  rx456_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan457_done
-    goto rxscan457_scan
-  rxscan457_loop:
-    ($P10) = rx453_cur."from"()
+    ne $I10, -1, rxscan460_done
+    goto rxscan460_scan
+  rxscan460_loop:
+    ($P10) = rx456_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", 227
+    set rx456_pos, $P10
+    ge rx456_pos, rx456_eos, rxscan460_done
+  rxscan460_scan:
+    set_addr $I10, rxscan460_loop
+    rx456_cur."!mark_push"(0, rx456_pos, $I10)
+  rxscan460_done:
+.annotate "line", 231
   # rx subrule "identifier" subtype=capture negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."identifier"()
-    unless $P10, rx453_fail
-    rx453_cur."!mark_push"(0, -1, 0, $P10)
+    rx456_cur."!cursor_pos"(rx456_pos)
+    $P10 = rx456_cur."identifier"()
+    unless $P10, rx456_fail
+    rx456_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("key")
-    rx453_pos = $P10."pos"()
-  # rx rxquantr458 ** 0..*
-    set_addr $I459, rxquantr458_done
-    rx453_cur."!mark_push"(0, rx453_pos, $I459)
-  rxquantr458_loop:
+    rx456_pos = $P10."pos"()
+  # rx rxquantr461 ** 0..*
+    set_addr $I462, rxquantr461_done
+    rx456_cur."!mark_push"(0, rx456_pos, $I462)
+  rxquantr461_loop:
   # rx enumcharlist negate=0 
-    ge rx453_pos, rx453_eos, rx453_fail
-    sub $I10, rx453_pos, rx453_off
-    substr $S10, rx453_tgt, $I10, 1
+    ge rx456_pos, rx456_eos, rx456_fail
+    sub $I10, rx456_pos, rx456_off
+    substr $S10, rx456_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, rx453_fail
-    inc rx453_pos
-    (rx453_rep) = rx453_cur."!mark_commit"($I459)
-    rx453_cur."!mark_push"(rx453_rep, rx453_pos, $I459)
-    goto rxquantr458_loop
-  rxquantr458_done:
+    lt $I11, 0, rx456_fail
+    inc rx456_pos
+    (rx456_rep) = rx456_cur."!mark_commit"($I462)
+    rx456_cur."!mark_push"(rx456_rep, rx456_pos, $I462)
+    goto rxquantr461_loop
+  rxquantr461_done:
   # rx literal  "=>"
-    add $I11, rx453_pos, 2
-    gt $I11, rx453_eos, rx453_fail
-    sub $I11, rx453_pos, rx453_off
-    substr $S10, rx453_tgt, $I11, 2
-    ne $S10, "=>", rx453_fail
-    add rx453_pos, 2
-  # rx subrule "ws" subtype=method negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."ws"()
-    unless $P10, rx453_fail
-    rx453_pos = $P10."pos"()
+    add $I11, rx456_pos, 2
+    gt $I11, rx456_eos, rx456_fail
+    sub $I11, rx456_pos, rx456_off
+    substr $S10, rx456_tgt, $I11, 2
+    ne $S10, "=>", rx456_fail
+    add rx456_pos, 2
+  # rx subrule "ws" subtype=method negate=
+    rx456_cur."!cursor_pos"(rx456_pos)
+    $P10 = rx456_cur."ws"()
+    unless $P10, rx456_fail
+    rx456_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."EXPR"("i=")
-    unless $P10, rx453_fail
-    rx453_cur."!mark_push"(0, -1, 0, $P10)
+    rx456_cur."!cursor_pos"(rx456_pos)
+    $P10 = rx456_cur."EXPR"("i=")
+    unless $P10, rx456_fail
+    rx456_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("val")
-    rx453_pos = $P10."pos"()
-.annotate "line", 226
+    rx456_pos = $P10."pos"()
+.annotate "line", 230
   # rx pass
-    rx453_cur."!cursor_pass"(rx453_pos, "fatarrow")
-    rx453_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx453_pos)
-    .return (rx453_cur)
-  rx453_fail:
+    rx456_cur."!cursor_pass"(rx456_pos, "fatarrow")
+    rx456_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx456_pos)
+    .return (rx456_cur)
+  rx456_fail:
 .annotate "line", 4
-    (rx453_rep, rx453_pos, $I10, $P10) = rx453_cur."!mark_fail"(0)
-    lt rx453_pos, -1, rx453_done
-    eq rx453_pos, -1, rx453_fail
+    (rx456_rep, rx456_pos, $I10, $P10) = rx456_cur."!mark_fail"(0)
+    lt rx456_pos, -1, rx456_done
+    eq rx456_pos, -1, rx456_fail
     jump $I10
-  rx453_done:
-    rx453_cur."!cursor_fail"()
-    rx453_cur."!cursor_debug"("FAIL  ", "fatarrow")
-    .return (rx453_cur)
+  rx456_done:
+    rx456_cur."!cursor_fail"()
+    rx456_cur."!cursor_debug"("FAIL  ", "fatarrow")
+    .return (rx456_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__fatarrow"  :subid("114_1267204702.05125") :method
+.sub "!PREFIX__fatarrow"  :subid("114_1271336396.90314") :method
 .annotate "line", 4
-    $P455 = self."!PREFIX__!subrule"("key", "")
-    new $P456, "ResizablePMCArray"
-    push $P456, $P455
-    .return ($P456)
+    $P458 = self."!PREFIX__!subrule"("key", "")
+    new $P459, "ResizablePMCArray"
+    push $P459, $P458
+    .return ($P459)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "colonpair"  :subid("115_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "colonpair"  :subid("115_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .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) = self."!cursor_start"()
-    rx461_cur."!cursor_debug"("START ", "colonpair")
-    rx461_cur."!cursor_caparray"("circumfix")
-    .lex unicode:"$\x{a2}", rx461_cur
+    .local string rx464_tgt
+    .local int rx464_pos
+    .local int rx464_off
+    .local int rx464_eos
+    .local int rx464_rep
+    .local pmc rx464_cur
+    (rx464_cur, rx464_pos, rx464_tgt) = self."!cursor_start"()
+    rx464_cur."!cursor_debug"("START ", "colonpair")
+    rx464_cur."!cursor_caparray"("circumfix")
+    .lex unicode:"$\x{a2}", rx464_cur
     .local pmc match
     .lex "$/", match
-    length rx461_eos, rx461_tgt
-    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:
+    length rx464_eos, rx464_tgt
+    set rx464_off, 0
+    lt rx464_pos, 2, rx464_start
+    sub rx464_off, rx464_pos, 1
+    substr rx464_tgt, rx464_tgt, rx464_off
+  rx464_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan467_done
-    goto rxscan467_scan
-  rxscan467_loop:
-    ($P10) = rx461_cur."from"()
+    ne $I10, -1, rxscan470_done
+    goto rxscan470_scan
+  rxscan470_loop:
+    ($P10) = rx464_cur."from"()
     inc $P10
-    set rx461_pos, $P10
-    ge rx461_pos, rx461_eos, rxscan467_done
-  rxscan467_scan:
-    set_addr $I10, rxscan467_loop
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-  rxscan467_done:
-.annotate "line", 231
+    set rx464_pos, $P10
+    ge rx464_pos, rx464_eos, rxscan470_done
+  rxscan470_scan:
+    set_addr $I10, rxscan470_loop
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
+  rxscan470_done:
+.annotate "line", 235
   # 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
-  alt468_0:
-.annotate "line", 232
-    set_addr $I10, alt468_1
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-.annotate "line", 233
+    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
+  alt471_0:
+.annotate "line", 236
+    set_addr $I10, alt471_1
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
+.annotate "line", 237
   # rx subcapture "not"
-    set_addr $I10, rxcap_469_fail
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
+    set_addr $I10, rxcap_472_fail
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
   # 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
-    set_addr $I10, rxcap_469_fail
-    ($I12, $I11) = rx461_cur."!mark_peek"($I10)
-    rx461_cur."!cursor_pos"($I11)
-    ($P10) = rx461_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx461_pos, "")
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    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
+    set_addr $I10, rxcap_472_fail
+    ($I12, $I11) = rx464_cur."!mark_peek"($I10)
+    rx464_cur."!cursor_pos"($I11)
+    ($P10) = rx464_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx464_pos, "")
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("not")
-    goto rxcap_469_done
-  rxcap_469_fail:
-    goto rx461_fail
-  rxcap_469_done:
+    goto rxcap_472_done
+  rxcap_472_fail:
+    goto rx464_fail
+  rxcap_472_done:
   # rx subrule "identifier" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."identifier"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."identifier"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx461_pos = $P10."pos"()
-    goto alt468_end
-  alt468_1:
-    set_addr $I10, alt468_2
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-.annotate "line", 234
+    rx464_pos = $P10."pos"()
+    goto alt471_end
+  alt471_1:
+    set_addr $I10, alt471_2
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
+.annotate "line", 238
   # rx subrule "identifier" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."identifier"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."identifier"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx461_pos = $P10."pos"()
-  # rx rxquantr470 ** 0..1
-    set_addr $I471, rxquantr470_done
-    rx461_cur."!mark_push"(0, rx461_pos, $I471)
-  rxquantr470_loop:
+    rx464_pos = $P10."pos"()
+  # rx rxquantr473 ** 0..1
+    set_addr $I474, rxquantr473_done
+    rx464_cur."!mark_push"(0, rx464_pos, $I474)
+  rxquantr473_loop:
   # rx subrule "circumfix" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."circumfix"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."circumfix"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("circumfix")
-    rx461_pos = $P10."pos"()
-    (rx461_rep) = rx461_cur."!mark_commit"($I471)
-  rxquantr470_done:
-    goto alt468_end
-  alt468_2:
-.annotate "line", 235
+    rx464_pos = $P10."pos"()
+    (rx464_rep) = rx464_cur."!mark_commit"($I474)
+  rxquantr473_done:
+    goto alt471_end
+  alt471_2:
+.annotate "line", 239
   # rx subrule "circumfix" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."circumfix"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."circumfix"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("circumfix")
-    rx461_pos = $P10."pos"()
-  alt468_end:
-.annotate "line", 230
+    rx464_pos = $P10."pos"()
+  alt471_end:
+.annotate "line", 234
   # rx pass
-    rx461_cur."!cursor_pass"(rx461_pos, "colonpair")
-    rx461_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx461_pos)
-    .return (rx461_cur)
-  rx461_fail:
+    rx464_cur."!cursor_pass"(rx464_pos, "colonpair")
+    rx464_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx464_pos)
+    .return (rx464_cur)
+  rx464_fail:
 .annotate "line", 4
-    (rx461_rep, rx461_pos, $I10, $P10) = rx461_cur."!mark_fail"(0)
-    lt rx461_pos, -1, rx461_done
-    eq rx461_pos, -1, rx461_fail
+    (rx464_rep, rx464_pos, $I10, $P10) = rx464_cur."!mark_fail"(0)
+    lt rx464_pos, -1, rx464_done
+    eq rx464_pos, -1, rx464_fail
     jump $I10
-  rx461_done:
-    rx461_cur."!cursor_fail"()
-    rx461_cur."!cursor_debug"("FAIL  ", "colonpair")
-    .return (rx461_cur)
+  rx464_done:
+    rx464_cur."!cursor_fail"()
+    rx464_cur."!cursor_debug"("FAIL  ", "colonpair")
+    .return (rx464_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__colonpair"  :subid("116_1267204702.05125") :method
+.sub "!PREFIX__colonpair"  :subid("116_1271336396.90314") :method
 .annotate "line", 4
-    $P463 = self."!PREFIX__!subrule"("circumfix", ":")
-    $P464 = self."!PREFIX__!subrule"("identifier", ":")
-    $P465 = self."!PREFIX__!subrule"("identifier", ":!")
-    new $P466, "ResizablePMCArray"
-    push $P466, $P463
-    push $P466, $P464
-    push $P466, $P465
-    .return ($P466)
+    $P466 = self."!PREFIX__!subrule"("circumfix", ":")
+    $P467 = self."!PREFIX__!subrule"("identifier", ":")
+    $P468 = self."!PREFIX__!subrule"("identifier", ":!")
+    new $P469, "ResizablePMCArray"
+    push $P469, $P466
+    push $P469, $P467
+    push $P469, $P468
+    .return ($P469)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable"  :subid("117_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "variable"  :subid("117_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx473_tgt
-    .local int rx473_pos
-    .local int rx473_off
-    .local int rx473_eos
-    .local int rx473_rep
-    .local pmc rx473_cur
-    (rx473_cur, rx473_pos, rx473_tgt) = self."!cursor_start"()
-    rx473_cur."!cursor_debug"("START ", "variable")
-    rx473_cur."!cursor_caparray"("twigil")
-    .lex unicode:"$\x{a2}", rx473_cur
+    .local string rx476_tgt
+    .local int rx476_pos
+    .local int rx476_off
+    .local int rx476_eos
+    .local int rx476_rep
+    .local pmc rx476_cur
+    (rx476_cur, rx476_pos, rx476_tgt) = self."!cursor_start"()
+    rx476_cur."!cursor_debug"("START ", "variable")
+    rx476_cur."!cursor_caparray"("twigil")
+    .lex unicode:"$\x{a2}", rx476_cur
     .local pmc match
     .lex "$/", match
-    length rx473_eos, rx473_tgt
-    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:
+    length rx476_eos, rx476_tgt
+    set rx476_off, 0
+    lt rx476_pos, 2, rx476_start
+    sub rx476_off, rx476_pos, 1
+    substr rx476_tgt, rx476_tgt, rx476_off
+  rx476_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan478_done
-    goto rxscan478_scan
-  rxscan478_loop:
-    ($P10) = rx473_cur."from"()
+    ne $I10, -1, rxscan481_done
+    goto rxscan481_scan
+  rxscan481_loop:
+    ($P10) = rx476_cur."from"()
     inc $P10
-    set rx473_pos, $P10
-    ge rx473_pos, rx473_eos, rxscan478_done
-  rxscan478_scan:
-    set_addr $I10, rxscan478_loop
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-  rxscan478_done:
-  alt479_0:
-.annotate "line", 239
-    set_addr $I10, alt479_1
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-.annotate "line", 240
+    set rx476_pos, $P10
+    ge rx476_pos, rx476_eos, rxscan481_done
+  rxscan481_scan:
+    set_addr $I10, rxscan481_loop
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+  rxscan481_done:
+  alt482_0:
+.annotate "line", 243
+    set_addr $I10, alt482_1
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+.annotate "line", 244
   # rx subrule "sigil" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."sigil"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."sigil"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx473_pos = $P10."pos"()
-  # rx rxquantr480 ** 0..1
-    set_addr $I481, rxquantr480_done
-    rx473_cur."!mark_push"(0, rx473_pos, $I481)
-  rxquantr480_loop:
+    rx476_pos = $P10."pos"()
+  # rx rxquantr483 ** 0..1
+    set_addr $I484, rxquantr483_done
+    rx476_cur."!mark_push"(0, rx476_pos, $I484)
+  rxquantr483_loop:
   # rx subrule "twigil" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."twigil"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."twigil"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("twigil")
-    rx473_pos = $P10."pos"()
-    (rx473_rep) = rx473_cur."!mark_commit"($I481)
-  rxquantr480_done:
+    rx476_pos = $P10."pos"()
+    (rx476_rep) = rx476_cur."!mark_commit"($I484)
+  rxquantr483_done:
   # rx subrule "name" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."name"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."name"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("desigilname")
-    rx473_pos = $P10."pos"()
-    goto alt479_end
-  alt479_1:
-    set_addr $I10, alt479_2
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-.annotate "line", 241
+    rx476_pos = $P10."pos"()
+    goto alt482_end
+  alt482_1:
+    set_addr $I10, alt482_2
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+.annotate "line", 245
   # rx subrule "sigil" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."sigil"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."sigil"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx473_pos = $P10."pos"()
+    rx476_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx473_pos, rx473_eos, rx473_fail
-    sub $I10, rx473_pos, rx473_off
-    substr $S10, rx473_tgt, $I10, 1
+    ge rx476_pos, rx476_eos, rx476_fail
+    sub $I10, rx476_pos, rx476_off
+    substr $S10, rx476_tgt, $I10, 1
     index $I11, "<[", $S10
-    lt $I11, 0, rx473_fail
+    lt $I11, 0, rx476_fail
   # rx subrule "postcircumfix" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."postcircumfix"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."postcircumfix"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("postcircumfix")
-    rx473_pos = $P10."pos"()
-    goto alt479_end
-  alt479_2:
-.annotate "line", 242
+    rx476_pos = $P10."pos"()
+    goto alt482_end
+  alt482_2:
+.annotate "line", 246
   # rx subcapture "sigil"
-    set_addr $I10, rxcap_482_fail
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
+    set_addr $I10, rxcap_485_fail
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
   # rx literal  "$"
-    add $I11, rx473_pos, 1
-    gt $I11, rx473_eos, rx473_fail
-    sub $I11, rx473_pos, rx473_off
-    substr $S10, rx473_tgt, $I11, 1
-    ne $S10, "$", rx473_fail
-    add rx473_pos, 1
-    set_addr $I10, rxcap_482_fail
-    ($I12, $I11) = rx473_cur."!mark_peek"($I10)
-    rx473_cur."!cursor_pos"($I11)
-    ($P10) = rx473_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx473_pos, "")
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx476_pos, 1
+    gt $I11, rx476_eos, rx476_fail
+    sub $I11, rx476_pos, rx476_off
+    substr $S10, rx476_tgt, $I11, 1
+    ne $S10, "$", rx476_fail
+    add rx476_pos, 1
+    set_addr $I10, rxcap_485_fail
+    ($I12, $I11) = rx476_cur."!mark_peek"($I10)
+    rx476_cur."!cursor_pos"($I11)
+    ($P10) = rx476_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx476_pos, "")
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    goto rxcap_482_done
-  rxcap_482_fail:
-    goto rx473_fail
-  rxcap_482_done:
+    goto rxcap_485_done
+  rxcap_485_fail:
+    goto rx476_fail
+  rxcap_485_done:
   # rx subcapture "desigilname"
-    set_addr $I10, rxcap_483_fail
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
+    set_addr $I10, rxcap_486_fail
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx473_pos, rx473_eos, rx473_fail
-    sub $I10, rx473_pos, rx473_off
-    substr $S10, rx473_tgt, $I10, 1
+    ge rx476_pos, rx476_eos, rx476_fail
+    sub $I10, rx476_pos, rx476_off
+    substr $S10, rx476_tgt, $I10, 1
     index $I11, "/_!", $S10
-    lt $I11, 0, rx473_fail
-    inc rx473_pos
-    set_addr $I10, rxcap_483_fail
-    ($I12, $I11) = rx473_cur."!mark_peek"($I10)
-    rx473_cur."!cursor_pos"($I11)
-    ($P10) = rx473_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx473_pos, "")
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx476_fail
+    inc rx476_pos
+    set_addr $I10, rxcap_486_fail
+    ($I12, $I11) = rx476_cur."!mark_peek"($I10)
+    rx476_cur."!cursor_pos"($I11)
+    ($P10) = rx476_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx476_pos, "")
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("desigilname")
-    goto rxcap_483_done
-  rxcap_483_fail:
-    goto rx473_fail
-  rxcap_483_done:
-  alt479_end:
-.annotate "line", 239
+    goto rxcap_486_done
+  rxcap_486_fail:
+    goto rx476_fail
+  rxcap_486_done:
+  alt482_end:
+.annotate "line", 243
   # rx pass
-    rx473_cur."!cursor_pass"(rx473_pos, "variable")
-    rx473_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx473_pos)
-    .return (rx473_cur)
-  rx473_fail:
+    rx476_cur."!cursor_pass"(rx476_pos, "variable")
+    rx476_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx476_pos)
+    .return (rx476_cur)
+  rx476_fail:
 .annotate "line", 4
-    (rx473_rep, rx473_pos, $I10, $P10) = rx473_cur."!mark_fail"(0)
-    lt rx473_pos, -1, rx473_done
-    eq rx473_pos, -1, rx473_fail
+    (rx476_rep, rx476_pos, $I10, $P10) = rx476_cur."!mark_fail"(0)
+    lt rx476_pos, -1, rx476_done
+    eq rx476_pos, -1, rx476_fail
     jump $I10
-  rx473_done:
-    rx473_cur."!cursor_fail"()
-    rx473_cur."!cursor_debug"("FAIL  ", "variable")
-    .return (rx473_cur)
+  rx476_done:
+    rx476_cur."!cursor_fail"()
+    rx476_cur."!cursor_debug"("FAIL  ", "variable")
+    .return (rx476_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable"  :subid("118_1267204702.05125") :method
+.sub "!PREFIX__variable"  :subid("118_1271336396.90314") :method
 .annotate "line", 4
-    $P475 = self."!PREFIX__!subrule"("sigil", "")
-    $P476 = self."!PREFIX__!subrule"("sigil", "")
-    new $P477, "ResizablePMCArray"
-    push $P477, "$!"
-    push $P477, "$_"
-    push $P477, "$/"
-    push $P477, $P475
-    push $P477, $P476
-    .return ($P477)
+    $P478 = self."!PREFIX__!subrule"("sigil", "")
+    $P479 = self."!PREFIX__!subrule"("sigil", "")
+    new $P480, "ResizablePMCArray"
+    push $P480, "$!"
+    push $P480, "$_"
+    push $P480, "$/"
+    push $P480, $P478
+    push $P480, $P479
+    .return ($P480)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "sigil"  :subid("119_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "sigil"  :subid("119_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx485_tgt
-    .local int rx485_pos
-    .local int rx485_off
-    .local int rx485_eos
-    .local int rx485_rep
-    .local pmc rx485_cur
-    (rx485_cur, rx485_pos, rx485_tgt) = self."!cursor_start"()
-    rx485_cur."!cursor_debug"("START ", "sigil")
-    .lex unicode:"$\x{a2}", rx485_cur
+    .local string rx488_tgt
+    .local int rx488_pos
+    .local int rx488_off
+    .local int rx488_eos
+    .local int rx488_rep
+    .local pmc rx488_cur
+    (rx488_cur, rx488_pos, rx488_tgt) = self."!cursor_start"()
+    rx488_cur."!cursor_debug"("START ", "sigil")
+    .lex unicode:"$\x{a2}", rx488_cur
     .local pmc match
     .lex "$/", match
-    length rx485_eos, rx485_tgt
-    set rx485_off, 0
-    lt rx485_pos, 2, rx485_start
-    sub rx485_off, rx485_pos, 1
-    substr rx485_tgt, rx485_tgt, rx485_off
-  rx485_start:
+    length rx488_eos, rx488_tgt
+    set rx488_off, 0
+    lt rx488_pos, 2, rx488_start
+    sub rx488_off, rx488_pos, 1
+    substr rx488_tgt, rx488_tgt, rx488_off
+  rx488_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan488_done
-    goto rxscan488_scan
-  rxscan488_loop:
-    ($P10) = rx485_cur."from"()
+    ne $I10, -1, rxscan491_done
+    goto rxscan491_scan
+  rxscan491_loop:
+    ($P10) = rx488_cur."from"()
     inc $P10
-    set rx485_pos, $P10
-    ge rx485_pos, rx485_eos, rxscan488_done
-  rxscan488_scan:
-    set_addr $I10, rxscan488_loop
-    rx485_cur."!mark_push"(0, rx485_pos, $I10)
-  rxscan488_done:
-.annotate "line", 245
+    set rx488_pos, $P10
+    ge rx488_pos, rx488_eos, rxscan491_done
+  rxscan491_scan:
+    set_addr $I10, rxscan491_loop
+    rx488_cur."!mark_push"(0, rx488_pos, $I10)
+  rxscan491_done:
+.annotate "line", 249
   # rx enumcharlist negate=0 
-    ge rx485_pos, rx485_eos, rx485_fail
-    sub $I10, rx485_pos, rx485_off
-    substr $S10, rx485_tgt, $I10, 1
+    ge rx488_pos, rx488_eos, rx488_fail
+    sub $I10, rx488_pos, rx488_off
+    substr $S10, rx488_tgt, $I10, 1
     index $I11, "$@%&", $S10
-    lt $I11, 0, rx485_fail
-    inc rx485_pos
+    lt $I11, 0, rx488_fail
+    inc rx488_pos
   # rx pass
-    rx485_cur."!cursor_pass"(rx485_pos, "sigil")
-    rx485_cur."!cursor_debug"("PASS  ", "sigil", " at pos=", rx485_pos)
-    .return (rx485_cur)
-  rx485_fail:
+    rx488_cur."!cursor_pass"(rx488_pos, "sigil")
+    rx488_cur."!cursor_debug"("PASS  ", "sigil", " at pos=", rx488_pos)
+    .return (rx488_cur)
+  rx488_fail:
 .annotate "line", 4
-    (rx485_rep, rx485_pos, $I10, $P10) = rx485_cur."!mark_fail"(0)
-    lt rx485_pos, -1, rx485_done
-    eq rx485_pos, -1, rx485_fail
+    (rx488_rep, rx488_pos, $I10, $P10) = rx488_cur."!mark_fail"(0)
+    lt rx488_pos, -1, rx488_done
+    eq rx488_pos, -1, rx488_fail
     jump $I10
-  rx485_done:
-    rx485_cur."!cursor_fail"()
-    rx485_cur."!cursor_debug"("FAIL  ", "sigil")
-    .return (rx485_cur)
+  rx488_done:
+    rx488_cur."!cursor_fail"()
+    rx488_cur."!cursor_debug"("FAIL  ", "sigil")
+    .return (rx488_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__sigil"  :subid("120_1267204702.05125") :method
+.sub "!PREFIX__sigil"  :subid("120_1271336396.90314") :method
 .annotate "line", 4
-    new $P487, "ResizablePMCArray"
-    push $P487, "&"
-    push $P487, "%"
-    push $P487, "@"
-    push $P487, "$"
-    .return ($P487)
+    new $P490, "ResizablePMCArray"
+    push $P490, "&"
+    push $P490, "%"
+    push $P490, "@"
+    push $P490, "$"
+    .return ($P490)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "twigil"  :subid("121_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "twigil"  :subid("121_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx490_tgt
-    .local int rx490_pos
-    .local int rx490_off
-    .local int rx490_eos
-    .local int rx490_rep
-    .local pmc rx490_cur
-    (rx490_cur, rx490_pos, rx490_tgt) = self."!cursor_start"()
-    rx490_cur."!cursor_debug"("START ", "twigil")
-    .lex unicode:"$\x{a2}", rx490_cur
+    .local string rx493_tgt
+    .local int rx493_pos
+    .local int rx493_off
+    .local int rx493_eos
+    .local int rx493_rep
+    .local pmc rx493_cur
+    (rx493_cur, rx493_pos, rx493_tgt) = self."!cursor_start"()
+    rx493_cur."!cursor_debug"("START ", "twigil")
+    .lex unicode:"$\x{a2}", rx493_cur
     .local pmc match
     .lex "$/", match
-    length rx490_eos, rx490_tgt
-    set rx490_off, 0
-    lt rx490_pos, 2, rx490_start
-    sub rx490_off, rx490_pos, 1
-    substr rx490_tgt, rx490_tgt, rx490_off
-  rx490_start:
+    length rx493_eos, rx493_tgt
+    set rx493_off, 0
+    lt rx493_pos, 2, rx493_start
+    sub rx493_off, rx493_pos, 1
+    substr rx493_tgt, rx493_tgt, rx493_off
+  rx493_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan493_done
-    goto rxscan493_scan
-  rxscan493_loop:
-    ($P10) = rx490_cur."from"()
+    ne $I10, -1, rxscan496_done
+    goto rxscan496_scan
+  rxscan496_loop:
+    ($P10) = rx493_cur."from"()
     inc $P10
-    set rx490_pos, $P10
-    ge rx490_pos, rx490_eos, rxscan493_done
-  rxscan493_scan:
-    set_addr $I10, rxscan493_loop
-    rx490_cur."!mark_push"(0, rx490_pos, $I10)
-  rxscan493_done:
-.annotate "line", 247
+    set rx493_pos, $P10
+    ge rx493_pos, rx493_eos, rxscan496_done
+  rxscan496_scan:
+    set_addr $I10, rxscan496_loop
+    rx493_cur."!mark_push"(0, rx493_pos, $I10)
+  rxscan496_done:
+.annotate "line", 251
   # rx enumcharlist negate=0 
-    ge rx490_pos, rx490_eos, rx490_fail
-    sub $I10, rx490_pos, rx490_off
-    substr $S10, rx490_tgt, $I10, 1
+    ge rx493_pos, rx493_eos, rx493_fail
+    sub $I10, rx493_pos, rx493_off
+    substr $S10, rx493_tgt, $I10, 1
     index $I11, "*!?", $S10
-    lt $I11, 0, rx490_fail
-    inc rx490_pos
+    lt $I11, 0, rx493_fail
+    inc rx493_pos
   # rx pass
-    rx490_cur."!cursor_pass"(rx490_pos, "twigil")
-    rx490_cur."!cursor_debug"("PASS  ", "twigil", " at pos=", rx490_pos)
-    .return (rx490_cur)
-  rx490_fail:
+    rx493_cur."!cursor_pass"(rx493_pos, "twigil")
+    rx493_cur."!cursor_debug"("PASS  ", "twigil", " at pos=", rx493_pos)
+    .return (rx493_cur)
+  rx493_fail:
 .annotate "line", 4
-    (rx490_rep, rx490_pos, $I10, $P10) = rx490_cur."!mark_fail"(0)
-    lt rx490_pos, -1, rx490_done
-    eq rx490_pos, -1, rx490_fail
+    (rx493_rep, rx493_pos, $I10, $P10) = rx493_cur."!mark_fail"(0)
+    lt rx493_pos, -1, rx493_done
+    eq rx493_pos, -1, rx493_fail
     jump $I10
-  rx490_done:
-    rx490_cur."!cursor_fail"()
-    rx490_cur."!cursor_debug"("FAIL  ", "twigil")
-    .return (rx490_cur)
+  rx493_done:
+    rx493_cur."!cursor_fail"()
+    rx493_cur."!cursor_debug"("FAIL  ", "twigil")
+    .return (rx493_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__twigil"  :subid("122_1267204702.05125") :method
+.sub "!PREFIX__twigil"  :subid("122_1271336396.90314") :method
 .annotate "line", 4
-    new $P492, "ResizablePMCArray"
-    push $P492, "?"
-    push $P492, "!"
-    push $P492, "*"
-    .return ($P492)
+    new $P495, "ResizablePMCArray"
+    push $P495, "?"
+    push $P495, "!"
+    push $P495, "*"
+    .return ($P495)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator"  :subid("123_1267204702.05125") :method
-.annotate "line", 249
-    $P495 = self."!protoregex"("package_declarator")
-    .return ($P495)
+.sub "package_declarator"  :subid("123_1271336396.90314") :method
+.annotate "line", 253
+    $P498 = self."!protoregex"("package_declarator")
+    .return ($P498)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator"  :subid("124_1267204702.05125") :method
-.annotate "line", 249
-    $P497 = self."!PREFIX__!protoregex"("package_declarator")
-    .return ($P497)
+.sub "!PREFIX__package_declarator"  :subid("124_1271336396.90314") :method
+.annotate "line", 253
+    $P500 = self."!PREFIX__!protoregex"("package_declarator")
+    .return ($P500)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<module>"  :subid("125_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "package_declarator:sym<module>"  :subid("125_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx499_tgt
-    .local int rx499_pos
-    .local int rx499_off
-    .local int rx499_eos
-    .local int rx499_rep
-    .local pmc rx499_cur
-    (rx499_cur, rx499_pos, rx499_tgt) = self."!cursor_start"()
-    rx499_cur."!cursor_debug"("START ", "package_declarator:sym<module>")
-    .lex unicode:"$\x{a2}", rx499_cur
-    .local pmc match
-    .lex "$/", match
-    length rx499_eos, rx499_tgt
-    set rx499_off, 0
-    lt rx499_pos, 2, rx499_start
-    sub rx499_off, rx499_pos, 1
-    substr rx499_tgt, rx499_tgt, rx499_off
-  rx499_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan503_done
-    goto rxscan503_scan
-  rxscan503_loop:
-    ($P10) = rx499_cur."from"()
-    inc $P10
-    set rx499_pos, $P10
-    ge rx499_pos, rx499_eos, rxscan503_done
-  rxscan503_scan:
-    set_addr $I10, rxscan503_loop
-    rx499_cur."!mark_push"(0, rx499_pos, $I10)
-  rxscan503_done:
-.annotate "line", 250
+    .local string rx502_tgt
+    .local int rx502_pos
+    .local int rx502_off
+    .local int rx502_eos
+    .local int rx502_rep
+    .local pmc rx502_cur
+    (rx502_cur, rx502_pos, rx502_tgt) = self."!cursor_start"()
+    rx502_cur."!cursor_debug"("START ", "package_declarator:sym<module>")
+    .lex unicode:"$\x{a2}", rx502_cur
+    .local pmc match
+    .lex "$/", match
+    length rx502_eos, rx502_tgt
+    set rx502_off, 0
+    lt rx502_pos, 2, rx502_start
+    sub rx502_off, rx502_pos, 1
+    substr rx502_tgt, rx502_tgt, rx502_off
+  rx502_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan506_done
+    goto rxscan506_scan
+  rxscan506_loop:
+    ($P10) = rx502_cur."from"()
+    inc $P10
+    set rx502_pos, $P10
+    ge rx502_pos, rx502_eos, rxscan506_done
+  rxscan506_scan:
+    set_addr $I10, rxscan506_loop
+    rx502_cur."!mark_push"(0, rx502_pos, $I10)
+  rxscan506_done:
+.annotate "line", 254
   # rx subcapture "sym"
-    set_addr $I10, rxcap_504_fail
-    rx499_cur."!mark_push"(0, rx499_pos, $I10)
+    set_addr $I10, rxcap_507_fail
+    rx502_cur."!mark_push"(0, rx502_pos, $I10)
   # rx literal  "module"
-    add $I11, rx499_pos, 6
-    gt $I11, rx499_eos, rx499_fail
-    sub $I11, rx499_pos, rx499_off
-    substr $S10, rx499_tgt, $I11, 6
-    ne $S10, "module", rx499_fail
-    add rx499_pos, 6
-    set_addr $I10, rxcap_504_fail
-    ($I12, $I11) = rx499_cur."!mark_peek"($I10)
-    rx499_cur."!cursor_pos"($I11)
-    ($P10) = rx499_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx499_pos, "")
-    rx499_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx502_pos, 6
+    gt $I11, rx502_eos, rx502_fail
+    sub $I11, rx502_pos, rx502_off
+    substr $S10, rx502_tgt, $I11, 6
+    ne $S10, "module", rx502_fail
+    add rx502_pos, 6
+    set_addr $I10, rxcap_507_fail
+    ($I12, $I11) = rx502_cur."!mark_peek"($I10)
+    rx502_cur."!cursor_pos"($I11)
+    ($P10) = rx502_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx502_pos, "")
+    rx502_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_504_done
-  rxcap_504_fail:
-    goto rx499_fail
-  rxcap_504_done:
+    goto rxcap_507_done
+  rxcap_507_fail:
+    goto rx502_fail
+  rxcap_507_done:
   # rx subrule "package_def" subtype=capture negate=
-    rx499_cur."!cursor_pos"(rx499_pos)
-    $P10 = rx499_cur."package_def"()
-    unless $P10, rx499_fail
-    rx499_cur."!mark_push"(0, -1, 0, $P10)
+    rx502_cur."!cursor_pos"(rx502_pos)
+    $P10 = rx502_cur."package_def"()
+    unless $P10, rx502_fail
+    rx502_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_def")
-    rx499_pos = $P10."pos"()
+    rx502_pos = $P10."pos"()
   # rx pass
-    rx499_cur."!cursor_pass"(rx499_pos, "package_declarator:sym<module>")
-    rx499_cur."!cursor_debug"("PASS  ", "package_declarator:sym<module>", " at pos=", rx499_pos)
-    .return (rx499_cur)
-  rx499_fail:
+    rx502_cur."!cursor_pass"(rx502_pos, "package_declarator:sym<module>")
+    rx502_cur."!cursor_debug"("PASS  ", "package_declarator:sym<module>", " at pos=", rx502_pos)
+    .return (rx502_cur)
+  rx502_fail:
 .annotate "line", 4
-    (rx499_rep, rx499_pos, $I10, $P10) = rx499_cur."!mark_fail"(0)
-    lt rx499_pos, -1, rx499_done
-    eq rx499_pos, -1, rx499_fail
+    (rx502_rep, rx502_pos, $I10, $P10) = rx502_cur."!mark_fail"(0)
+    lt rx502_pos, -1, rx502_done
+    eq rx502_pos, -1, rx502_fail
     jump $I10
-  rx499_done:
-    rx499_cur."!cursor_fail"()
-    rx499_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<module>")
-    .return (rx499_cur)
+  rx502_done:
+    rx502_cur."!cursor_fail"()
+    rx502_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<module>")
+    .return (rx502_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<module>"  :subid("126_1267204702.05125") :method
+.sub "!PREFIX__package_declarator:sym<module>"  :subid("126_1271336396.90314") :method
 .annotate "line", 4
-    $P501 = self."!PREFIX__!subrule"("package_def", "module")
-    new $P502, "ResizablePMCArray"
-    push $P502, $P501
-    .return ($P502)
+    $P504 = self."!PREFIX__!subrule"("package_def", "module")
+    new $P505, "ResizablePMCArray"
+    push $P505, $P504
+    .return ($P505)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<class>"  :subid("127_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "package_declarator:sym<class>"  :subid("127_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .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) = self."!cursor_start"()
-    rx506_cur."!cursor_debug"("START ", "package_declarator:sym<class>")
-    .lex unicode:"$\x{a2}", rx506_cur
+    .local string rx509_tgt
+    .local int rx509_pos
+    .local int rx509_off
+    .local int rx509_eos
+    .local int rx509_rep
+    .local pmc rx509_cur
+    (rx509_cur, rx509_pos, rx509_tgt) = self."!cursor_start"()
+    rx509_cur."!cursor_debug"("START ", "package_declarator:sym<class>")
+    .lex unicode:"$\x{a2}", rx509_cur
     .local pmc match
     .lex "$/", match
-    length rx506_eos, rx506_tgt
-    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:
+    length rx509_eos, rx509_tgt
+    set rx509_off, 0
+    lt rx509_pos, 2, rx509_start
+    sub rx509_off, rx509_pos, 1
+    substr rx509_tgt, rx509_tgt, rx509_off
+  rx509_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan511_done
-    goto rxscan511_scan
-  rxscan511_loop:
-    ($P10) = rx506_cur."from"()
+    ne $I10, -1, rxscan514_done
+    goto rxscan514_scan
+  rxscan514_loop:
+    ($P10) = rx509_cur."from"()
     inc $P10
-    set rx506_pos, $P10
-    ge rx506_pos, rx506_eos, rxscan511_done
-  rxscan511_scan:
-    set_addr $I10, rxscan511_loop
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
-  rxscan511_done:
-.annotate "line", 251
+    set rx509_pos, $P10
+    ge rx509_pos, rx509_eos, rxscan514_done
+  rxscan514_scan:
+    set_addr $I10, rxscan514_loop
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
+  rxscan514_done:
+.annotate "line", 255
   # rx subcapture "sym"
-    set_addr $I10, rxcap_513_fail
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
-  alt512_0:
-    set_addr $I10, alt512_1
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
+    set_addr $I10, rxcap_516_fail
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
+  alt515_0:
+    set_addr $I10, alt515_1
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
   # rx literal  "class"
-    add $I11, rx506_pos, 5
-    gt $I11, rx506_eos, rx506_fail
-    sub $I11, rx506_pos, rx506_off
-    substr $S10, rx506_tgt, $I11, 5
-    ne $S10, "class", rx506_fail
-    add rx506_pos, 5
-    goto alt512_end
-  alt512_1:
+    add $I11, rx509_pos, 5
+    gt $I11, rx509_eos, rx509_fail
+    sub $I11, rx509_pos, rx509_off
+    substr $S10, rx509_tgt, $I11, 5
+    ne $S10, "class", rx509_fail
+    add rx509_pos, 5
+    goto alt515_end
+  alt515_1:
   # rx literal  "grammar"
-    add $I11, rx506_pos, 7
-    gt $I11, rx506_eos, rx506_fail
-    sub $I11, rx506_pos, rx506_off
-    substr $S10, rx506_tgt, $I11, 7
-    ne $S10, "grammar", rx506_fail
-    add rx506_pos, 7
-  alt512_end:
-    set_addr $I10, rxcap_513_fail
-    ($I12, $I11) = rx506_cur."!mark_peek"($I10)
-    rx506_cur."!cursor_pos"($I11)
-    ($P10) = rx506_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx506_pos, "")
-    rx506_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx509_pos, 7
+    gt $I11, rx509_eos, rx509_fail
+    sub $I11, rx509_pos, rx509_off
+    substr $S10, rx509_tgt, $I11, 7
+    ne $S10, "grammar", rx509_fail
+    add rx509_pos, 7
+  alt515_end:
+    set_addr $I10, rxcap_516_fail
+    ($I12, $I11) = rx509_cur."!mark_peek"($I10)
+    rx509_cur."!cursor_pos"($I11)
+    ($P10) = rx509_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx509_pos, "")
+    rx509_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_513_done
-  rxcap_513_fail:
-    goto rx506_fail
-  rxcap_513_done:
+    goto rxcap_516_done
+  rxcap_516_fail:
+    goto rx509_fail
+  rxcap_516_done:
   # rx subrule "package_def" subtype=capture negate=
-    rx506_cur."!cursor_pos"(rx506_pos)
-    $P10 = rx506_cur."package_def"()
-    unless $P10, rx506_fail
-    rx506_cur."!mark_push"(0, -1, 0, $P10)
+    rx509_cur."!cursor_pos"(rx509_pos)
+    $P10 = rx509_cur."package_def"()
+    unless $P10, rx509_fail
+    rx509_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_def")
-    rx506_pos = $P10."pos"()
+    rx509_pos = $P10."pos"()
   # rx pass
-    rx506_cur."!cursor_pass"(rx506_pos, "package_declarator:sym<class>")
-    rx506_cur."!cursor_debug"("PASS  ", "package_declarator:sym<class>", " at pos=", rx506_pos)
-    .return (rx506_cur)
-  rx506_fail:
+    rx509_cur."!cursor_pass"(rx509_pos, "package_declarator:sym<class>")
+    rx509_cur."!cursor_debug"("PASS  ", "package_declarator:sym<class>", " at pos=", rx509_pos)
+    .return (rx509_cur)
+  rx509_fail:
 .annotate "line", 4
-    (rx506_rep, rx506_pos, $I10, $P10) = rx506_cur."!mark_fail"(0)
-    lt rx506_pos, -1, rx506_done
-    eq rx506_pos, -1, rx506_fail
+    (rx509_rep, rx509_pos, $I10, $P10) = rx509_cur."!mark_fail"(0)
+    lt rx509_pos, -1, rx509_done
+    eq rx509_pos, -1, rx509_fail
     jump $I10
-  rx506_done:
-    rx506_cur."!cursor_fail"()
-    rx506_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<class>")
-    .return (rx506_cur)
+  rx509_done:
+    rx509_cur."!cursor_fail"()
+    rx509_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<class>")
+    .return (rx509_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<class>"  :subid("128_1267204702.05125") :method
+.sub "!PREFIX__package_declarator:sym<class>"  :subid("128_1271336396.90314") :method
 .annotate "line", 4
-    $P508 = self."!PREFIX__!subrule"("package_def", "grammar")
-    $P509 = self."!PREFIX__!subrule"("package_def", "class")
-    new $P510, "ResizablePMCArray"
-    push $P510, $P508
-    push $P510, $P509
-    .return ($P510)
+    $P511 = self."!PREFIX__!subrule"("package_def", "grammar")
+    $P512 = self."!PREFIX__!subrule"("package_def", "class")
+    new $P513, "ResizablePMCArray"
+    push $P513, $P511
+    push $P513, $P512
+    .return ($P513)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_def"  :subid("129_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "package_def"  :subid("129_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx515_tgt
-    .local int rx515_pos
-    .local int rx515_off
-    .local int rx515_eos
-    .local int rx515_rep
-    .local pmc rx515_cur
-    (rx515_cur, rx515_pos, rx515_tgt) = self."!cursor_start"()
-    rx515_cur."!cursor_debug"("START ", "package_def")
-    rx515_cur."!cursor_caparray"("parent")
-    .lex unicode:"$\x{a2}", rx515_cur
+    .local string rx518_tgt
+    .local int rx518_pos
+    .local int rx518_off
+    .local int rx518_eos
+    .local int rx518_rep
+    .local pmc rx518_cur
+    (rx518_cur, rx518_pos, rx518_tgt) = self."!cursor_start"()
+    rx518_cur."!cursor_debug"("START ", "package_def")
+    rx518_cur."!cursor_caparray"("parent")
+    .lex unicode:"$\x{a2}", rx518_cur
     .local pmc match
     .lex "$/", match
-    length rx515_eos, rx515_tgt
-    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:
+    length rx518_eos, rx518_tgt
+    set rx518_off, 0
+    lt rx518_pos, 2, rx518_start
+    sub rx518_off, rx518_pos, 1
+    substr rx518_tgt, rx518_tgt, rx518_off
+  rx518_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan518_done
-    goto rxscan518_scan
-  rxscan518_loop:
-    ($P10) = rx515_cur."from"()
+    ne $I10, -1, rxscan521_done
+    goto rxscan521_scan
+  rxscan521_loop:
+    ($P10) = rx518_cur."from"()
     inc $P10
-    set rx515_pos, $P10
-    ge rx515_pos, rx515_eos, rxscan518_done
-  rxscan518_scan:
-    set_addr $I10, rxscan518_loop
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-  rxscan518_done:
-.annotate "line", 253
+    set rx518_pos, $P10
+    ge rx518_pos, rx518_eos, rxscan521_done
+  rxscan521_scan:
+    set_addr $I10, rxscan521_loop
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+  rxscan521_done:
+.annotate "line", 257
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-.annotate "line", 254
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+.annotate "line", 258
   # rx subrule "name" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."name"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."name"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx515_pos = $P10."pos"()
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-.annotate "line", 255
-  # rx rxquantr521 ** 0..1
-    set_addr $I525, rxquantr521_done
-    rx515_cur."!mark_push"(0, rx515_pos, $I525)
-  rxquantr521_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+.annotate "line", 259
+  # rx rxquantr524 ** 0..1
+    set_addr $I528, rxquantr524_done
+    rx518_cur."!mark_push"(0, rx518_pos, $I528)
+  rxquantr524_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx literal  "is"
-    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, "is", rx515_fail
-    add rx515_pos, 2
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    add $I11, rx518_pos, 2
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    substr $S10, rx518_tgt, $I11, 2
+    ne $S10, "is", rx518_fail
+    add rx518_pos, 2
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "name" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."name"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."name"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("parent")
-    rx515_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    (rx515_rep) = rx515_cur."!mark_commit"($I525)
-  rxquantr521_done:
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-  alt527_0:
-.annotate "line", 256
-    set_addr $I10, alt527_1
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-.annotate "line", 257
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+    (rx518_rep) = rx518_cur."!mark_commit"($I528)
+  rxquantr524_done:
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  alt530_0:
+.annotate "line", 260
+    set_addr $I10, alt530_1
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate "line", 261
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx literal  ";"
-    add $I11, rx515_pos, 1
-    gt $I11, rx515_eos, rx515_fail
-    sub $I11, rx515_pos, rx515_off
-    substr $S10, rx515_tgt, $I11, 1
-    ne $S10, ";", rx515_fail
-    add rx515_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    add $I11, rx518_pos, 1
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    substr $S10, rx518_tgt, $I11, 1
+    ne $S10, ";", rx518_fail
+    add rx518_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "comp_unit" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."comp_unit"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."comp_unit"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("comp_unit")
-    rx515_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    goto alt527_end
-  alt527_1:
-    set_addr $I10, alt527_2
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-.annotate "line", 258
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+    goto alt530_end
+  alt530_1:
+    set_addr $I10, alt530_2
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate "line", 262
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx515_pos, rx515_eos, rx515_fail
-    sub $I10, rx515_pos, rx515_off
-    substr $S10, rx515_tgt, $I10, 1
+    ge rx518_pos, rx518_eos, rx518_fail
+    sub $I10, rx518_pos, rx518_off
+    substr $S10, rx518_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx515_fail
+    lt $I11, 0, rx518_fail
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "block" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."block"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."block"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx515_pos = $P10."pos"()
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    goto alt527_end
-  alt527_2:
-.annotate "line", 259
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+    goto alt530_end
+  alt530_2:
+.annotate "line", 263
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."panic"("Malformed package declaration")
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-  alt527_end:
-.annotate "line", 260
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."panic"("Malformed package declaration")
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  alt530_end:
+.annotate "line", 264
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-.annotate "line", 253
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+.annotate "line", 257
   # rx pass
-    rx515_cur."!cursor_pass"(rx515_pos, "package_def")
-    rx515_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx515_pos)
-    .return (rx515_cur)
-  rx515_fail:
+    rx518_cur."!cursor_pass"(rx518_pos, "package_def")
+    rx518_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx518_pos)
+    .return (rx518_cur)
+  rx518_fail:
 .annotate "line", 4
-    (rx515_rep, rx515_pos, $I10, $P10) = rx515_cur."!mark_fail"(0)
-    lt rx515_pos, -1, rx515_done
-    eq rx515_pos, -1, rx515_fail
+    (rx518_rep, rx518_pos, $I10, $P10) = rx518_cur."!mark_fail"(0)
+    lt rx518_pos, -1, rx518_done
+    eq rx518_pos, -1, rx518_fail
     jump $I10
-  rx515_done:
-    rx515_cur."!cursor_fail"()
-    rx515_cur."!cursor_debug"("FAIL  ", "package_def")
-    .return (rx515_cur)
+  rx518_done:
+    rx518_cur."!cursor_fail"()
+    rx518_cur."!cursor_debug"("FAIL  ", "package_def")
+    .return (rx518_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_def"  :subid("130_1267204702.05125") :method
+.sub "!PREFIX__package_def"  :subid("130_1271336396.90314") :method
 .annotate "line", 4
-    new $P517, "ResizablePMCArray"
-    push $P517, ""
-    .return ($P517)
+    new $P520, "ResizablePMCArray"
+    push $P520, ""
+    .return ($P520)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator"  :subid("131_1267204702.05125") :method
-.annotate "line", 263
-    $P538 = self."!protoregex"("scope_declarator")
-    .return ($P538)
+.sub "scope_declarator"  :subid("131_1271336396.90314") :method
+.annotate "line", 267
+    $P541 = self."!protoregex"("scope_declarator")
+    .return ($P541)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator"  :subid("132_1267204702.05125") :method
-.annotate "line", 263
-    $P540 = self."!PREFIX__!protoregex"("scope_declarator")
-    .return ($P540)
+.sub "!PREFIX__scope_declarator"  :subid("132_1271336396.90314") :method
+.annotate "line", 267
+    $P543 = self."!PREFIX__!protoregex"("scope_declarator")
+    .return ($P543)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<my>"  :subid("133_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "scope_declarator:sym<my>"  :subid("133_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx542_tgt
-    .local int rx542_pos
-    .local int rx542_off
-    .local int rx542_eos
-    .local int rx542_rep
-    .local pmc rx542_cur
-    (rx542_cur, rx542_pos, rx542_tgt) = self."!cursor_start"()
-    rx542_cur."!cursor_debug"("START ", "scope_declarator:sym<my>")
-    .lex unicode:"$\x{a2}", rx542_cur
-    .local pmc match
-    .lex "$/", match
-    length rx542_eos, rx542_tgt
-    set rx542_off, 0
-    lt rx542_pos, 2, rx542_start
-    sub rx542_off, rx542_pos, 1
-    substr rx542_tgt, rx542_tgt, rx542_off
-  rx542_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan546_done
-    goto rxscan546_scan
-  rxscan546_loop:
-    ($P10) = rx542_cur."from"()
-    inc $P10
-    set rx542_pos, $P10
-    ge rx542_pos, rx542_eos, rxscan546_done
-  rxscan546_scan:
-    set_addr $I10, rxscan546_loop
-    rx542_cur."!mark_push"(0, rx542_pos, $I10)
-  rxscan546_done:
-.annotate "line", 264
+    .local string rx545_tgt
+    .local int rx545_pos
+    .local int rx545_off
+    .local int rx545_eos
+    .local int rx545_rep
+    .local pmc rx545_cur
+    (rx545_cur, rx545_pos, rx545_tgt) = self."!cursor_start"()
+    rx545_cur."!cursor_debug"("START ", "scope_declarator:sym<my>")
+    .lex unicode:"$\x{a2}", rx545_cur
+    .local pmc match
+    .lex "$/", match
+    length rx545_eos, rx545_tgt
+    set rx545_off, 0
+    lt rx545_pos, 2, rx545_start
+    sub rx545_off, rx545_pos, 1
+    substr rx545_tgt, rx545_tgt, rx545_off
+  rx545_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan549_done
+    goto rxscan549_scan
+  rxscan549_loop:
+    ($P10) = rx545_cur."from"()
+    inc $P10
+    set rx545_pos, $P10
+    ge rx545_pos, rx545_eos, rxscan549_done
+  rxscan549_scan:
+    set_addr $I10, rxscan549_loop
+    rx545_cur."!mark_push"(0, rx545_pos, $I10)
+  rxscan549_done:
+.annotate "line", 268
   # rx subcapture "sym"
-    set_addr $I10, rxcap_547_fail
-    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+    set_addr $I10, rxcap_550_fail
+    rx545_cur."!mark_push"(0, rx545_pos, $I10)
   # rx literal  "my"
-    add $I11, rx542_pos, 2
-    gt $I11, rx542_eos, rx542_fail
-    sub $I11, rx542_pos, rx542_off
-    substr $S10, rx542_tgt, $I11, 2
-    ne $S10, "my", rx542_fail
-    add rx542_pos, 2
-    set_addr $I10, rxcap_547_fail
-    ($I12, $I11) = rx542_cur."!mark_peek"($I10)
-    rx542_cur."!cursor_pos"($I11)
-    ($P10) = rx542_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx542_pos, "")
-    rx542_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx545_pos, 2
+    gt $I11, rx545_eos, rx545_fail
+    sub $I11, rx545_pos, rx545_off
+    substr $S10, rx545_tgt, $I11, 2
+    ne $S10, "my", rx545_fail
+    add rx545_pos, 2
+    set_addr $I10, rxcap_550_fail
+    ($I12, $I11) = rx545_cur."!mark_peek"($I10)
+    rx545_cur."!cursor_pos"($I11)
+    ($P10) = rx545_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx545_pos, "")
+    rx545_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_547_done
-  rxcap_547_fail:
-    goto rx542_fail
-  rxcap_547_done:
+    goto rxcap_550_done
+  rxcap_550_fail:
+    goto rx545_fail
+  rxcap_550_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx542_cur."!cursor_pos"(rx542_pos)
-    $P10 = rx542_cur."scoped"("my")
-    unless $P10, rx542_fail
-    rx542_cur."!mark_push"(0, -1, 0, $P10)
+    rx545_cur."!cursor_pos"(rx545_pos)
+    $P10 = rx545_cur."scoped"("my")
+    unless $P10, rx545_fail
+    rx545_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx542_pos = $P10."pos"()
+    rx545_pos = $P10."pos"()
   # rx pass
-    rx542_cur."!cursor_pass"(rx542_pos, "scope_declarator:sym<my>")
-    rx542_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<my>", " at pos=", rx542_pos)
-    .return (rx542_cur)
-  rx542_fail:
+    rx545_cur."!cursor_pass"(rx545_pos, "scope_declarator:sym<my>")
+    rx545_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<my>", " at pos=", rx545_pos)
+    .return (rx545_cur)
+  rx545_fail:
 .annotate "line", 4
-    (rx542_rep, rx542_pos, $I10, $P10) = rx542_cur."!mark_fail"(0)
-    lt rx542_pos, -1, rx542_done
-    eq rx542_pos, -1, rx542_fail
+    (rx545_rep, rx545_pos, $I10, $P10) = rx545_cur."!mark_fail"(0)
+    lt rx545_pos, -1, rx545_done
+    eq rx545_pos, -1, rx545_fail
     jump $I10
-  rx542_done:
-    rx542_cur."!cursor_fail"()
-    rx542_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<my>")
-    .return (rx542_cur)
+  rx545_done:
+    rx545_cur."!cursor_fail"()
+    rx545_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<my>")
+    .return (rx545_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<my>"  :subid("134_1267204702.05125") :method
+.sub "!PREFIX__scope_declarator:sym<my>"  :subid("134_1271336396.90314") :method
 .annotate "line", 4
-    $P544 = self."!PREFIX__!subrule"("scoped", "my")
-    new $P545, "ResizablePMCArray"
-    push $P545, $P544
-    .return ($P545)
+    $P547 = self."!PREFIX__!subrule"("scoped", "my")
+    new $P548, "ResizablePMCArray"
+    push $P548, $P547
+    .return ($P548)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<our>"  :subid("135_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "scope_declarator:sym<our>"  :subid("135_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx549_tgt
-    .local int rx549_pos
-    .local int rx549_off
-    .local int rx549_eos
-    .local int rx549_rep
-    .local pmc rx549_cur
-    (rx549_cur, rx549_pos, rx549_tgt) = self."!cursor_start"()
-    rx549_cur."!cursor_debug"("START ", "scope_declarator:sym<our>")
-    .lex unicode:"$\x{a2}", rx549_cur
+    .local string rx552_tgt
+    .local int rx552_pos
+    .local int rx552_off
+    .local int rx552_eos
+    .local int rx552_rep
+    .local pmc rx552_cur
+    (rx552_cur, rx552_pos, rx552_tgt) = self."!cursor_start"()
+    rx552_cur."!cursor_debug"("START ", "scope_declarator:sym<our>")
+    .lex unicode:"$\x{a2}", rx552_cur
     .local pmc match
     .lex "$/", match
-    length rx549_eos, rx549_tgt
-    set rx549_off, 0
-    lt rx549_pos, 2, rx549_start
-    sub rx549_off, rx549_pos, 1
-    substr rx549_tgt, rx549_tgt, rx549_off
-  rx549_start:
+    length rx552_eos, rx552_tgt
+    set rx552_off, 0
+    lt rx552_pos, 2, rx552_start
+    sub rx552_off, rx552_pos, 1
+    substr rx552_tgt, rx552_tgt, rx552_off
+  rx552_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan553_done
-    goto rxscan553_scan
-  rxscan553_loop:
-    ($P10) = rx549_cur."from"()
+    ne $I10, -1, rxscan556_done
+    goto rxscan556_scan
+  rxscan556_loop:
+    ($P10) = rx552_cur."from"()
     inc $P10
-    set rx549_pos, $P10
-    ge rx549_pos, rx549_eos, rxscan553_done
-  rxscan553_scan:
-    set_addr $I10, rxscan553_loop
-    rx549_cur."!mark_push"(0, rx549_pos, $I10)
-  rxscan553_done:
-.annotate "line", 265
+    set rx552_pos, $P10
+    ge rx552_pos, rx552_eos, rxscan556_done
+  rxscan556_scan:
+    set_addr $I10, rxscan556_loop
+    rx552_cur."!mark_push"(0, rx552_pos, $I10)
+  rxscan556_done:
+.annotate "line", 269
   # rx subcapture "sym"
-    set_addr $I10, rxcap_554_fail
-    rx549_cur."!mark_push"(0, rx549_pos, $I10)
+    set_addr $I10, rxcap_557_fail
+    rx552_cur."!mark_push"(0, rx552_pos, $I10)
   # rx literal  "our"
-    add $I11, rx549_pos, 3
-    gt $I11, rx549_eos, rx549_fail
-    sub $I11, rx549_pos, rx549_off
-    substr $S10, rx549_tgt, $I11, 3
-    ne $S10, "our", rx549_fail
-    add rx549_pos, 3
-    set_addr $I10, rxcap_554_fail
-    ($I12, $I11) = rx549_cur."!mark_peek"($I10)
-    rx549_cur."!cursor_pos"($I11)
-    ($P10) = rx549_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx549_pos, "")
-    rx549_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx552_pos, 3
+    gt $I11, rx552_eos, rx552_fail
+    sub $I11, rx552_pos, rx552_off
+    substr $S10, rx552_tgt, $I11, 3
+    ne $S10, "our", rx552_fail
+    add rx552_pos, 3
+    set_addr $I10, rxcap_557_fail
+    ($I12, $I11) = rx552_cur."!mark_peek"($I10)
+    rx552_cur."!cursor_pos"($I11)
+    ($P10) = rx552_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx552_pos, "")
+    rx552_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_554_done
-  rxcap_554_fail:
-    goto rx549_fail
-  rxcap_554_done:
+    goto rxcap_557_done
+  rxcap_557_fail:
+    goto rx552_fail
+  rxcap_557_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx549_cur."!cursor_pos"(rx549_pos)
-    $P10 = rx549_cur."scoped"("our")
-    unless $P10, rx549_fail
-    rx549_cur."!mark_push"(0, -1, 0, $P10)
+    rx552_cur."!cursor_pos"(rx552_pos)
+    $P10 = rx552_cur."scoped"("our")
+    unless $P10, rx552_fail
+    rx552_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx549_pos = $P10."pos"()
+    rx552_pos = $P10."pos"()
   # rx pass
-    rx549_cur."!cursor_pass"(rx549_pos, "scope_declarator:sym<our>")
-    rx549_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<our>", " at pos=", rx549_pos)
-    .return (rx549_cur)
-  rx549_fail:
+    rx552_cur."!cursor_pass"(rx552_pos, "scope_declarator:sym<our>")
+    rx552_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<our>", " at pos=", rx552_pos)
+    .return (rx552_cur)
+  rx552_fail:
 .annotate "line", 4
-    (rx549_rep, rx549_pos, $I10, $P10) = rx549_cur."!mark_fail"(0)
-    lt rx549_pos, -1, rx549_done
-    eq rx549_pos, -1, rx549_fail
+    (rx552_rep, rx552_pos, $I10, $P10) = rx552_cur."!mark_fail"(0)
+    lt rx552_pos, -1, rx552_done
+    eq rx552_pos, -1, rx552_fail
     jump $I10
-  rx549_done:
-    rx549_cur."!cursor_fail"()
-    rx549_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<our>")
-    .return (rx549_cur)
+  rx552_done:
+    rx552_cur."!cursor_fail"()
+    rx552_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<our>")
+    .return (rx552_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<our>"  :subid("136_1267204702.05125") :method
+.sub "!PREFIX__scope_declarator:sym<our>"  :subid("136_1271336396.90314") :method
 .annotate "line", 4
-    $P551 = self."!PREFIX__!subrule"("scoped", "our")
-    new $P552, "ResizablePMCArray"
-    push $P552, $P551
-    .return ($P552)
+    $P554 = self."!PREFIX__!subrule"("scoped", "our")
+    new $P555, "ResizablePMCArray"
+    push $P555, $P554
+    .return ($P555)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<has>"  :subid("137_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "scope_declarator:sym<has>"  :subid("137_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx556_tgt
-    .local int rx556_pos
-    .local int rx556_off
-    .local int rx556_eos
-    .local int rx556_rep
-    .local pmc rx556_cur
-    (rx556_cur, rx556_pos, rx556_tgt) = self."!cursor_start"()
-    rx556_cur."!cursor_debug"("START ", "scope_declarator:sym<has>")
-    .lex unicode:"$\x{a2}", rx556_cur
+    .local string rx559_tgt
+    .local int rx559_pos
+    .local int rx559_off
+    .local int rx559_eos
+    .local int rx559_rep
+    .local pmc rx559_cur
+    (rx559_cur, rx559_pos, rx559_tgt) = self."!cursor_start"()
+    rx559_cur."!cursor_debug"("START ", "scope_declarator:sym<has>")
+    .lex unicode:"$\x{a2}", rx559_cur
     .local pmc match
     .lex "$/", match
-    length rx556_eos, rx556_tgt
-    set rx556_off, 0
-    lt rx556_pos, 2, rx556_start
-    sub rx556_off, rx556_pos, 1
-    substr rx556_tgt, rx556_tgt, rx556_off
-  rx556_start:
+    length rx559_eos, rx559_tgt
+    set rx559_off, 0
+    lt rx559_pos, 2, rx559_start
+    sub rx559_off, rx559_pos, 1
+    substr rx559_tgt, rx559_tgt, rx559_off
+  rx559_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan560_done
-    goto rxscan560_scan
-  rxscan560_loop:
-    ($P10) = rx556_cur."from"()
+    ne $I10, -1, rxscan563_done
+    goto rxscan563_scan
+  rxscan563_loop:
+    ($P10) = rx559_cur."from"()
     inc $P10
-    set rx556_pos, $P10
-    ge rx556_pos, rx556_eos, rxscan560_done
-  rxscan560_scan:
-    set_addr $I10, rxscan560_loop
-    rx556_cur."!mark_push"(0, rx556_pos, $I10)
-  rxscan560_done:
-.annotate "line", 266
+    set rx559_pos, $P10
+    ge rx559_pos, rx559_eos, rxscan563_done
+  rxscan563_scan:
+    set_addr $I10, rxscan563_loop
+    rx559_cur."!mark_push"(0, rx559_pos, $I10)
+  rxscan563_done:
+.annotate "line", 270
   # rx subcapture "sym"
-    set_addr $I10, rxcap_561_fail
-    rx556_cur."!mark_push"(0, rx556_pos, $I10)
+    set_addr $I10, rxcap_564_fail
+    rx559_cur."!mark_push"(0, rx559_pos, $I10)
   # rx literal  "has"
-    add $I11, rx556_pos, 3
-    gt $I11, rx556_eos, rx556_fail
-    sub $I11, rx556_pos, rx556_off
-    substr $S10, rx556_tgt, $I11, 3
-    ne $S10, "has", rx556_fail
-    add rx556_pos, 3
-    set_addr $I10, rxcap_561_fail
-    ($I12, $I11) = rx556_cur."!mark_peek"($I10)
-    rx556_cur."!cursor_pos"($I11)
-    ($P10) = rx556_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx556_pos, "")
-    rx556_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx559_pos, 3
+    gt $I11, rx559_eos, rx559_fail
+    sub $I11, rx559_pos, rx559_off
+    substr $S10, rx559_tgt, $I11, 3
+    ne $S10, "has", rx559_fail
+    add rx559_pos, 3
+    set_addr $I10, rxcap_564_fail
+    ($I12, $I11) = rx559_cur."!mark_peek"($I10)
+    rx559_cur."!cursor_pos"($I11)
+    ($P10) = rx559_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx559_pos, "")
+    rx559_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_561_done
-  rxcap_561_fail:
-    goto rx556_fail
-  rxcap_561_done:
+    goto rxcap_564_done
+  rxcap_564_fail:
+    goto rx559_fail
+  rxcap_564_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx556_cur."!cursor_pos"(rx556_pos)
-    $P10 = rx556_cur."scoped"("has")
-    unless $P10, rx556_fail
-    rx556_cur."!mark_push"(0, -1, 0, $P10)
+    rx559_cur."!cursor_pos"(rx559_pos)
+    $P10 = rx559_cur."scoped"("has")
+    unless $P10, rx559_fail
+    rx559_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx556_pos = $P10."pos"()
+    rx559_pos = $P10."pos"()
   # rx pass
-    rx556_cur."!cursor_pass"(rx556_pos, "scope_declarator:sym<has>")
-    rx556_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<has>", " at pos=", rx556_pos)
-    .return (rx556_cur)
-  rx556_fail:
+    rx559_cur."!cursor_pass"(rx559_pos, "scope_declarator:sym<has>")
+    rx559_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<has>", " at pos=", rx559_pos)
+    .return (rx559_cur)
+  rx559_fail:
 .annotate "line", 4
-    (rx556_rep, rx556_pos, $I10, $P10) = rx556_cur."!mark_fail"(0)
-    lt rx556_pos, -1, rx556_done
-    eq rx556_pos, -1, rx556_fail
+    (rx559_rep, rx559_pos, $I10, $P10) = rx559_cur."!mark_fail"(0)
+    lt rx559_pos, -1, rx559_done
+    eq rx559_pos, -1, rx559_fail
     jump $I10
-  rx556_done:
-    rx556_cur."!cursor_fail"()
-    rx556_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<has>")
-    .return (rx556_cur)
+  rx559_done:
+    rx559_cur."!cursor_fail"()
+    rx559_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<has>")
+    .return (rx559_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<has>"  :subid("138_1267204702.05125") :method
+.sub "!PREFIX__scope_declarator:sym<has>"  :subid("138_1271336396.90314") :method
 .annotate "line", 4
-    $P558 = self."!PREFIX__!subrule"("scoped", "has")
-    new $P559, "ResizablePMCArray"
-    push $P559, $P558
-    .return ($P559)
+    $P561 = self."!PREFIX__!subrule"("scoped", "has")
+    new $P562, "ResizablePMCArray"
+    push $P562, $P561
+    .return ($P562)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scoped"  :subid("139_1267204702.05125") :method :outer("11_1267204702.05125")
-    .param pmc param_563
-.annotate "line", 268
-    .lex "$*SCOPE", param_563
+.sub "scoped"  :subid("139_1271336396.90314") :method :outer("11_1271336396.90314")
+    .param pmc param_566
+.annotate "line", 272
+    .lex "$*SCOPE", param_566
 .annotate "line", 4
-    .local string rx564_tgt
-    .local int rx564_pos
-    .local int rx564_off
-    .local int rx564_eos
-    .local int rx564_rep
-    .local pmc rx564_cur
-    (rx564_cur, rx564_pos, rx564_tgt) = self."!cursor_start"()
-    rx564_cur."!cursor_debug"("START ", "scoped")
-    .lex unicode:"$\x{a2}", rx564_cur
-    .local pmc match
-    .lex "$/", match
-    length rx564_eos, rx564_tgt
-    set rx564_off, 0
-    lt rx564_pos, 2, rx564_start
-    sub rx564_off, rx564_pos, 1
-    substr rx564_tgt, rx564_tgt, rx564_off
-  rx564_start:
-    $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:
-  alt568_0:
-.annotate "line", 268
-    set_addr $I10, alt568_1
-    rx564_cur."!mark_push"(0, rx564_pos, $I10)
-.annotate "line", 269
+    .local string rx567_tgt
+    .local int rx567_pos
+    .local int rx567_off
+    .local int rx567_eos
+    .local int rx567_rep
+    .local pmc rx567_cur
+    (rx567_cur, rx567_pos, rx567_tgt) = self."!cursor_start"()
+    rx567_cur."!cursor_debug"("START ", "scoped")
+    .lex unicode:"$\x{a2}", rx567_cur
+    .local pmc match
+    .lex "$/", match
+    length rx567_eos, rx567_tgt
+    set rx567_off, 0
+    lt rx567_pos, 2, rx567_start
+    sub rx567_off, rx567_pos, 1
+    substr rx567_tgt, rx567_tgt, rx567_off
+  rx567_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan570_done
+    goto rxscan570_scan
+  rxscan570_loop:
+    ($P10) = rx567_cur."from"()
+    inc $P10
+    set rx567_pos, $P10
+    ge rx567_pos, rx567_eos, rxscan570_done
+  rxscan570_scan:
+    set_addr $I10, rxscan570_loop
+    rx567_cur."!mark_push"(0, rx567_pos, $I10)
+  rxscan570_done:
+  alt571_0:
+.annotate "line", 272
+    set_addr $I10, alt571_1
+    rx567_cur."!mark_push"(0, rx567_pos, $I10)
+.annotate "line", 273
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
   # rx subrule "variable_declarator" subtype=capture negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."variable_declarator"()
-    unless $P10, rx564_fail
-    rx564_cur."!mark_push"(0, -1, 0, $P10)
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."variable_declarator"()
+    unless $P10, rx567_fail
+    rx567_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable_declarator")
-    rx564_pos = $P10."pos"()
+    rx567_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
-    goto alt568_end
-  alt568_1:
-.annotate "line", 270
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
+    goto alt571_end
+  alt571_1:
+.annotate "line", 274
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
   # rx subrule "routine_declarator" subtype=capture negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."routine_declarator"()
-    unless $P10, rx564_fail
-    rx564_cur."!mark_push"(0, -1, 0, $P10)
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."routine_declarator"()
+    unless $P10, rx567_fail
+    rx567_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_declarator")
-    rx564_pos = $P10."pos"()
+    rx567_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
-  alt568_end:
-.annotate "line", 268
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
+  alt571_end:
+.annotate "line", 272
   # rx pass
-    rx564_cur."!cursor_pass"(rx564_pos, "scoped")
-    rx564_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx564_pos)
-    .return (rx564_cur)
-  rx564_fail:
+    rx567_cur."!cursor_pass"(rx567_pos, "scoped")
+    rx567_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx567_pos)
+    .return (rx567_cur)
+  rx567_fail:
 .annotate "line", 4
-    (rx564_rep, rx564_pos, $I10, $P10) = rx564_cur."!mark_fail"(0)
-    lt rx564_pos, -1, rx564_done
-    eq rx564_pos, -1, rx564_fail
+    (rx567_rep, rx567_pos, $I10, $P10) = rx567_cur."!mark_fail"(0)
+    lt rx567_pos, -1, rx567_done
+    eq rx567_pos, -1, rx567_fail
     jump $I10
-  rx564_done:
-    rx564_cur."!cursor_fail"()
-    rx564_cur."!cursor_debug"("FAIL  ", "scoped")
-    .return (rx564_cur)
+  rx567_done:
+    rx567_cur."!cursor_fail"()
+    rx567_cur."!cursor_debug"("FAIL  ", "scoped")
+    .return (rx567_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scoped"  :subid("140_1267204702.05125") :method
+.sub "!PREFIX__scoped"  :subid("140_1271336396.90314") :method
 .annotate "line", 4
-    new $P566, "ResizablePMCArray"
-    push $P566, ""
-    push $P566, ""
-    .return ($P566)
+    new $P569, "ResizablePMCArray"
+    push $P569, ""
+    push $P569, ""
+    .return ($P569)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable_declarator"  :subid("141_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "variable_declarator"  :subid("141_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx574_tgt
-    .local int rx574_pos
-    .local int rx574_off
-    .local int rx574_eos
-    .local int rx574_rep
-    .local pmc rx574_cur
-    (rx574_cur, rx574_pos, rx574_tgt) = self."!cursor_start"()
-    rx574_cur."!cursor_debug"("START ", "variable_declarator")
-    .lex unicode:"$\x{a2}", rx574_cur
-    .local pmc match
-    .lex "$/", match
-    length rx574_eos, rx574_tgt
-    set rx574_off, 0
-    lt rx574_pos, 2, rx574_start
-    sub rx574_off, rx574_pos, 1
-    substr rx574_tgt, rx574_tgt, rx574_off
-  rx574_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan578_done
-    goto rxscan578_scan
-  rxscan578_loop:
-    ($P10) = rx574_cur."from"()
-    inc $P10
-    set rx574_pos, $P10
-    ge rx574_pos, rx574_eos, rxscan578_done
-  rxscan578_scan:
-    set_addr $I10, rxscan578_loop
-    rx574_cur."!mark_push"(0, rx574_pos, $I10)
-  rxscan578_done:
-.annotate "line", 273
+    .local string rx577_tgt
+    .local int rx577_pos
+    .local int rx577_off
+    .local int rx577_eos
+    .local int rx577_rep
+    .local pmc rx577_cur
+    (rx577_cur, rx577_pos, rx577_tgt) = self."!cursor_start"()
+    rx577_cur."!cursor_debug"("START ", "variable_declarator")
+    .lex unicode:"$\x{a2}", rx577_cur
+    .local pmc match
+    .lex "$/", match
+    length rx577_eos, rx577_tgt
+    set rx577_off, 0
+    lt rx577_pos, 2, rx577_start
+    sub rx577_off, rx577_pos, 1
+    substr rx577_tgt, rx577_tgt, rx577_off
+  rx577_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan581_done
+    goto rxscan581_scan
+  rxscan581_loop:
+    ($P10) = rx577_cur."from"()
+    inc $P10
+    set rx577_pos, $P10
+    ge rx577_pos, rx577_eos, rxscan581_done
+  rxscan581_scan:
+    set_addr $I10, rxscan581_loop
+    rx577_cur."!mark_push"(0, rx577_pos, $I10)
+  rxscan581_done:
+.annotate "line", 277
   # rx subrule "variable" subtype=capture negate=
-    rx574_cur."!cursor_pos"(rx574_pos)
-    $P10 = rx574_cur."variable"()
-    unless $P10, rx574_fail
-    rx574_cur."!mark_push"(0, -1, 0, $P10)
+    rx577_cur."!cursor_pos"(rx577_pos)
+    $P10 = rx577_cur."variable"()
+    unless $P10, rx577_fail
+    rx577_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx574_pos = $P10."pos"()
+    rx577_pos = $P10."pos"()
   # rx pass
-    rx574_cur."!cursor_pass"(rx574_pos, "variable_declarator")
-    rx574_cur."!cursor_debug"("PASS  ", "variable_declarator", " at pos=", rx574_pos)
-    .return (rx574_cur)
-  rx574_fail:
+    rx577_cur."!cursor_pass"(rx577_pos, "variable_declarator")
+    rx577_cur."!cursor_debug"("PASS  ", "variable_declarator", " at pos=", rx577_pos)
+    .return (rx577_cur)
+  rx577_fail:
 .annotate "line", 4
-    (rx574_rep, rx574_pos, $I10, $P10) = rx574_cur."!mark_fail"(0)
-    lt rx574_pos, -1, rx574_done
-    eq rx574_pos, -1, rx574_fail
+    (rx577_rep, rx577_pos, $I10, $P10) = rx577_cur."!mark_fail"(0)
+    lt rx577_pos, -1, rx577_done
+    eq rx577_pos, -1, rx577_fail
     jump $I10
-  rx574_done:
-    rx574_cur."!cursor_fail"()
-    rx574_cur."!cursor_debug"("FAIL  ", "variable_declarator")
-    .return (rx574_cur)
+  rx577_done:
+    rx577_cur."!cursor_fail"()
+    rx577_cur."!cursor_debug"("FAIL  ", "variable_declarator")
+    .return (rx577_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable_declarator"  :subid("142_1267204702.05125") :method
+.sub "!PREFIX__variable_declarator"  :subid("142_1271336396.90314") :method
 .annotate "line", 4
-    $P576 = self."!PREFIX__!subrule"("variable", "")
-    new $P577, "ResizablePMCArray"
-    push $P577, $P576
-    .return ($P577)
+    $P579 = self."!PREFIX__!subrule"("variable", "")
+    new $P580, "ResizablePMCArray"
+    push $P580, $P579
+    .return ($P580)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator"  :subid("143_1267204702.05125") :method
-.annotate "line", 275
-    $P580 = self."!protoregex"("routine_declarator")
-    .return ($P580)
+.sub "routine_declarator"  :subid("143_1271336396.90314") :method
+.annotate "line", 279
+    $P583 = self."!protoregex"("routine_declarator")
+    .return ($P583)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator"  :subid("144_1267204702.05125") :method
-.annotate "line", 275
-    $P582 = self."!PREFIX__!protoregex"("routine_declarator")
-    .return ($P582)
+.sub "!PREFIX__routine_declarator"  :subid("144_1271336396.90314") :method
+.annotate "line", 279
+    $P585 = self."!PREFIX__!protoregex"("routine_declarator")
+    .return ($P585)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<sub>"  :subid("145_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "routine_declarator:sym<sub>"  :subid("145_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx584_tgt
-    .local int rx584_pos
-    .local int rx584_off
-    .local int rx584_eos
-    .local int rx584_rep
-    .local pmc rx584_cur
-    (rx584_cur, rx584_pos, rx584_tgt) = self."!cursor_start"()
-    rx584_cur."!cursor_debug"("START ", "routine_declarator:sym<sub>")
-    .lex unicode:"$\x{a2}", rx584_cur
-    .local pmc match
-    .lex "$/", match
-    length rx584_eos, rx584_tgt
-    set rx584_off, 0
-    lt rx584_pos, 2, rx584_start
-    sub rx584_off, rx584_pos, 1
-    substr rx584_tgt, rx584_tgt, rx584_off
-  rx584_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan588_done
-    goto rxscan588_scan
-  rxscan588_loop:
-    ($P10) = rx584_cur."from"()
-    inc $P10
-    set rx584_pos, $P10
-    ge rx584_pos, rx584_eos, rxscan588_done
-  rxscan588_scan:
-    set_addr $I10, rxscan588_loop
-    rx584_cur."!mark_push"(0, rx584_pos, $I10)
-  rxscan588_done:
-.annotate "line", 276
+    .local string rx587_tgt
+    .local int rx587_pos
+    .local int rx587_off
+    .local int rx587_eos
+    .local int rx587_rep
+    .local pmc rx587_cur
+    (rx587_cur, rx587_pos, rx587_tgt) = self."!cursor_start"()
+    rx587_cur."!cursor_debug"("START ", "routine_declarator:sym<sub>")
+    .lex unicode:"$\x{a2}", rx587_cur
+    .local pmc match
+    .lex "$/", match
+    length rx587_eos, rx587_tgt
+    set rx587_off, 0
+    lt rx587_pos, 2, rx587_start
+    sub rx587_off, rx587_pos, 1
+    substr rx587_tgt, rx587_tgt, rx587_off
+  rx587_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan591_done
+    goto rxscan591_scan
+  rxscan591_loop:
+    ($P10) = rx587_cur."from"()
+    inc $P10
+    set rx587_pos, $P10
+    ge rx587_pos, rx587_eos, rxscan591_done
+  rxscan591_scan:
+    set_addr $I10, rxscan591_loop
+    rx587_cur."!mark_push"(0, rx587_pos, $I10)
+  rxscan591_done:
+.annotate "line", 280
   # rx subcapture "sym"
-    set_addr $I10, rxcap_589_fail
-    rx584_cur."!mark_push"(0, rx584_pos, $I10)
+    set_addr $I10, rxcap_592_fail
+    rx587_cur."!mark_push"(0, rx587_pos, $I10)
   # rx literal  "sub"
-    add $I11, rx584_pos, 3
-    gt $I11, rx584_eos, rx584_fail
-    sub $I11, rx584_pos, rx584_off
-    substr $S10, rx584_tgt, $I11, 3
-    ne $S10, "sub", rx584_fail
-    add rx584_pos, 3
-    set_addr $I10, rxcap_589_fail
-    ($I12, $I11) = rx584_cur."!mark_peek"($I10)
-    rx584_cur."!cursor_pos"($I11)
-    ($P10) = rx584_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx584_pos, "")
-    rx584_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx587_pos, 3
+    gt $I11, rx587_eos, rx587_fail
+    sub $I11, rx587_pos, rx587_off
+    substr $S10, rx587_tgt, $I11, 3
+    ne $S10, "sub", rx587_fail
+    add rx587_pos, 3
+    set_addr $I10, rxcap_592_fail
+    ($I12, $I11) = rx587_cur."!mark_peek"($I10)
+    rx587_cur."!cursor_pos"($I11)
+    ($P10) = rx587_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx587_pos, "")
+    rx587_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_589_done
-  rxcap_589_fail:
-    goto rx584_fail
-  rxcap_589_done:
+    goto rxcap_592_done
+  rxcap_592_fail:
+    goto rx587_fail
+  rxcap_592_done:
   # rx subrule "routine_def" subtype=capture negate=
-    rx584_cur."!cursor_pos"(rx584_pos)
-    $P10 = rx584_cur."routine_def"()
-    unless $P10, rx584_fail
-    rx584_cur."!mark_push"(0, -1, 0, $P10)
+    rx587_cur."!cursor_pos"(rx587_pos)
+    $P10 = rx587_cur."routine_def"()
+    unless $P10, rx587_fail
+    rx587_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_def")
-    rx584_pos = $P10."pos"()
+    rx587_pos = $P10."pos"()
   # rx pass
-    rx584_cur."!cursor_pass"(rx584_pos, "routine_declarator:sym<sub>")
-    rx584_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<sub>", " at pos=", rx584_pos)
-    .return (rx584_cur)
-  rx584_fail:
+    rx587_cur."!cursor_pass"(rx587_pos, "routine_declarator:sym<sub>")
+    rx587_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<sub>", " at pos=", rx587_pos)
+    .return (rx587_cur)
+  rx587_fail:
 .annotate "line", 4
-    (rx584_rep, rx584_pos, $I10, $P10) = rx584_cur."!mark_fail"(0)
-    lt rx584_pos, -1, rx584_done
-    eq rx584_pos, -1, rx584_fail
+    (rx587_rep, rx587_pos, $I10, $P10) = rx587_cur."!mark_fail"(0)
+    lt rx587_pos, -1, rx587_done
+    eq rx587_pos, -1, rx587_fail
     jump $I10
-  rx584_done:
-    rx584_cur."!cursor_fail"()
-    rx584_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<sub>")
-    .return (rx584_cur)
+  rx587_done:
+    rx587_cur."!cursor_fail"()
+    rx587_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<sub>")
+    .return (rx587_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("146_1267204702.05125") :method
+.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("146_1271336396.90314") :method
 .annotate "line", 4
-    $P586 = self."!PREFIX__!subrule"("routine_def", "sub")
-    new $P587, "ResizablePMCArray"
-    push $P587, $P586
-    .return ($P587)
+    $P589 = self."!PREFIX__!subrule"("routine_def", "sub")
+    new $P590, "ResizablePMCArray"
+    push $P590, $P589
+    .return ($P590)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<method>"  :subid("147_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "routine_declarator:sym<method>"  :subid("147_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx591_tgt
-    .local int rx591_pos
-    .local int rx591_off
-    .local int rx591_eos
-    .local int rx591_rep
-    .local pmc rx591_cur
-    (rx591_cur, rx591_pos, rx591_tgt) = self."!cursor_start"()
-    rx591_cur."!cursor_debug"("START ", "routine_declarator:sym<method>")
-    .lex unicode:"$\x{a2}", rx591_cur
-    .local pmc match
-    .lex "$/", match
-    length rx591_eos, rx591_tgt
-    set rx591_off, 0
-    lt rx591_pos, 2, rx591_start
-    sub rx591_off, rx591_pos, 1
-    substr rx591_tgt, rx591_tgt, rx591_off
-  rx591_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan595_done
-    goto rxscan595_scan
-  rxscan595_loop:
-    ($P10) = rx591_cur."from"()
-    inc $P10
-    set rx591_pos, $P10
-    ge rx591_pos, rx591_eos, rxscan595_done
-  rxscan595_scan:
-    set_addr $I10, rxscan595_loop
-    rx591_cur."!mark_push"(0, rx591_pos, $I10)
-  rxscan595_done:
-.annotate "line", 277
+    .local string rx594_tgt
+    .local int rx594_pos
+    .local int rx594_off
+    .local int rx594_eos
+    .local int rx594_rep
+    .local pmc rx594_cur
+    (rx594_cur, rx594_pos, rx594_tgt) = self."!cursor_start"()
+    rx594_cur."!cursor_debug"("START ", "routine_declarator:sym<method>")
+    .lex unicode:"$\x{a2}", rx594_cur
+    .local pmc match
+    .lex "$/", match
+    length rx594_eos, rx594_tgt
+    set rx594_off, 0
+    lt rx594_pos, 2, rx594_start
+    sub rx594_off, rx594_pos, 1
+    substr rx594_tgt, rx594_tgt, rx594_off
+  rx594_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan598_done
+    goto rxscan598_scan
+  rxscan598_loop:
+    ($P10) = rx594_cur."from"()
+    inc $P10
+    set rx594_pos, $P10
+    ge rx594_pos, rx594_eos, rxscan598_done
+  rxscan598_scan:
+    set_addr $I10, rxscan598_loop
+    rx594_cur."!mark_push"(0, rx594_pos, $I10)
+  rxscan598_done:
+.annotate "line", 281
   # rx subcapture "sym"
-    set_addr $I10, rxcap_596_fail
-    rx591_cur."!mark_push"(0, rx591_pos, $I10)
+    set_addr $I10, rxcap_599_fail
+    rx594_cur."!mark_push"(0, rx594_pos, $I10)
   # rx literal  "method"
-    add $I11, rx591_pos, 6
-    gt $I11, rx591_eos, rx591_fail
-    sub $I11, rx591_pos, rx591_off
-    substr $S10, rx591_tgt, $I11, 6
-    ne $S10, "method", rx591_fail
-    add rx591_pos, 6
-    set_addr $I10, rxcap_596_fail
-    ($I12, $I11) = rx591_cur."!mark_peek"($I10)
-    rx591_cur."!cursor_pos"($I11)
-    ($P10) = rx591_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx591_pos, "")
-    rx591_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx594_pos, 6
+    gt $I11, rx594_eos, rx594_fail
+    sub $I11, rx594_pos, rx594_off
+    substr $S10, rx594_tgt, $I11, 6
+    ne $S10, "method", rx594_fail
+    add rx594_pos, 6
+    set_addr $I10, rxcap_599_fail
+    ($I12, $I11) = rx594_cur."!mark_peek"($I10)
+    rx594_cur."!cursor_pos"($I11)
+    ($P10) = rx594_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx594_pos, "")
+    rx594_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_596_done
-  rxcap_596_fail:
-    goto rx591_fail
-  rxcap_596_done:
+    goto rxcap_599_done
+  rxcap_599_fail:
+    goto rx594_fail
+  rxcap_599_done:
   # rx subrule "method_def" subtype=capture negate=
-    rx591_cur."!cursor_pos"(rx591_pos)
-    $P10 = rx591_cur."method_def"()
-    unless $P10, rx591_fail
-    rx591_cur."!mark_push"(0, -1, 0, $P10)
+    rx594_cur."!cursor_pos"(rx594_pos)
+    $P10 = rx594_cur."method_def"()
+    unless $P10, rx594_fail
+    rx594_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("method_def")
-    rx591_pos = $P10."pos"()
+    rx594_pos = $P10."pos"()
   # rx pass
-    rx591_cur."!cursor_pass"(rx591_pos, "routine_declarator:sym<method>")
-    rx591_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<method>", " at pos=", rx591_pos)
-    .return (rx591_cur)
-  rx591_fail:
+    rx594_cur."!cursor_pass"(rx594_pos, "routine_declarator:sym<method>")
+    rx594_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<method>", " at pos=", rx594_pos)
+    .return (rx594_cur)
+  rx594_fail:
 .annotate "line", 4
-    (rx591_rep, rx591_pos, $I10, $P10) = rx591_cur."!mark_fail"(0)
-    lt rx591_pos, -1, rx591_done
-    eq rx591_pos, -1, rx591_fail
+    (rx594_rep, rx594_pos, $I10, $P10) = rx594_cur."!mark_fail"(0)
+    lt rx594_pos, -1, rx594_done
+    eq rx594_pos, -1, rx594_fail
     jump $I10
-  rx591_done:
-    rx591_cur."!cursor_fail"()
-    rx591_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<method>")
-    .return (rx591_cur)
+  rx594_done:
+    rx594_cur."!cursor_fail"()
+    rx594_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<method>")
+    .return (rx594_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<method>"  :subid("148_1267204702.05125") :method
+.sub "!PREFIX__routine_declarator:sym<method>"  :subid("148_1271336396.90314") :method
 .annotate "line", 4
-    $P593 = self."!PREFIX__!subrule"("method_def", "method")
-    new $P594, "ResizablePMCArray"
-    push $P594, $P593
-    .return ($P594)
+    $P596 = self."!PREFIX__!subrule"("method_def", "method")
+    new $P597, "ResizablePMCArray"
+    push $P597, $P596
+    .return ($P597)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_def"  :subid("149_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "routine_def"  :subid("149_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx598_tgt
-    .local int rx598_pos
-    .local int rx598_off
-    .local int rx598_eos
-    .local int rx598_rep
-    .local pmc rx598_cur
-    (rx598_cur, rx598_pos, rx598_tgt) = self."!cursor_start"()
-    rx598_cur."!cursor_debug"("START ", "routine_def")
-    rx598_cur."!cursor_caparray"("deflongname", "sigil")
-    .lex unicode:"$\x{a2}", rx598_cur
+    .local string rx601_tgt
+    .local int rx601_pos
+    .local int rx601_off
+    .local int rx601_eos
+    .local int rx601_rep
+    .local pmc rx601_cur
+    (rx601_cur, rx601_pos, rx601_tgt) = self."!cursor_start"()
+    rx601_cur."!cursor_debug"("START ", "routine_def")
+    rx601_cur."!cursor_caparray"("sigil", "deflongname")
+    .lex unicode:"$\x{a2}", rx601_cur
     .local pmc match
     .lex "$/", match
-    length rx598_eos, rx598_tgt
-    set rx598_off, 0
-    lt rx598_pos, 2, rx598_start
-    sub rx598_off, rx598_pos, 1
-    substr rx598_tgt, rx598_tgt, rx598_off
-  rx598_start:
+    length rx601_eos, rx601_tgt
+    set rx601_off, 0
+    lt rx601_pos, 2, rx601_start
+    sub rx601_off, rx601_pos, 1
+    substr rx601_tgt, rx601_tgt, rx601_off
+  rx601_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan601_done
-    goto rxscan601_scan
-  rxscan601_loop:
-    ($P10) = rx598_cur."from"()
+    ne $I10, -1, rxscan604_done
+    goto rxscan604_scan
+  rxscan604_loop:
+    ($P10) = rx601_cur."from"()
     inc $P10
-    set rx598_pos, $P10
-    ge rx598_pos, rx598_eos, rxscan601_done
-  rxscan601_scan:
-    set_addr $I10, rxscan601_loop
-    rx598_cur."!mark_push"(0, rx598_pos, $I10)
-  rxscan601_done:
-.annotate "line", 279
+    set rx601_pos, $P10
+    ge rx601_pos, rx601_eos, rxscan604_done
+  rxscan604_scan:
+    set_addr $I10, rxscan604_loop
+    rx601_cur."!mark_push"(0, rx601_pos, $I10)
+  rxscan604_done:
+.annotate "line", 283
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 280
-  # rx rxquantr603 ** 0..1
-    set_addr $I609, rxquantr603_done
-    rx598_cur."!mark_push"(0, rx598_pos, $I609)
-  rxquantr603_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 284
+  # rx rxquantr606 ** 0..1
+    set_addr $I612, rxquantr606_done
+    rx601_cur."!mark_push"(0, rx601_pos, $I612)
+  rxquantr606_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx subcapture "sigil"
-    set_addr $I10, rxcap_607_fail
-    rx598_cur."!mark_push"(0, rx598_pos, $I10)
-  # rx rxquantr605 ** 0..1
-    set_addr $I606, rxquantr605_done
-    rx598_cur."!mark_push"(0, rx598_pos, $I606)
-  rxquantr605_loop:
+    set_addr $I10, rxcap_610_fail
+    rx601_cur."!mark_push"(0, rx601_pos, $I10)
+  # rx rxquantr608 ** 0..1
+    set_addr $I609, rxquantr608_done
+    rx601_cur."!mark_push"(0, rx601_pos, $I609)
+  rxquantr608_loop:
   # rx literal  "&"
-    add $I11, rx598_pos, 1
-    gt $I11, rx598_eos, rx598_fail
-    sub $I11, rx598_pos, rx598_off
-    substr $S10, rx598_tgt, $I11, 1
-    ne $S10, "&", rx598_fail
-    add rx598_pos, 1
-    (rx598_rep) = rx598_cur."!mark_commit"($I606)
-  rxquantr605_done:
-    set_addr $I10, rxcap_607_fail
-    ($I12, $I11) = rx598_cur."!mark_peek"($I10)
-    rx598_cur."!cursor_pos"($I11)
-    ($P10) = rx598_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx598_pos, "")
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx601_pos, 1
+    gt $I11, rx601_eos, rx601_fail
+    sub $I11, rx601_pos, rx601_off
+    substr $S10, rx601_tgt, $I11, 1
+    ne $S10, "&", rx601_fail
+    add rx601_pos, 1
+    (rx601_rep) = rx601_cur."!mark_commit"($I609)
+  rxquantr608_done:
+    set_addr $I10, rxcap_610_fail
+    ($I12, $I11) = rx601_cur."!mark_peek"($I10)
+    rx601_cur."!cursor_pos"($I11)
+    ($P10) = rx601_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx601_pos, "")
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    goto rxcap_607_done
-  rxcap_607_fail:
-    goto rx598_fail
-  rxcap_607_done:
+    goto rxcap_610_done
+  rxcap_610_fail:
+    goto rx601_fail
+  rxcap_610_done:
   # rx subrule "deflongname" subtype=capture negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."deflongname"()
-    unless $P10, rx598_fail
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."deflongname"()
+    unless $P10, rx601_fail
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx598_pos = $P10."pos"()
+    rx601_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-    (rx598_rep) = rx598_cur."!mark_commit"($I609)
-  rxquantr603_done:
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 281
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+    (rx601_rep) = rx601_cur."!mark_commit"($I612)
+  rxquantr606_done:
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 285
   # rx subrule "newpad" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."newpad"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  alt612_0:
-.annotate "line", 282
-    set_addr $I10, alt612_1
-    rx598_cur."!mark_push"(0, rx598_pos, $I10)
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."newpad"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  alt615_0:
+.annotate "line", 286
+    set_addr $I10, alt615_1
+    rx601_cur."!mark_push"(0, rx601_pos, $I10)
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx598_pos, 1
-    gt $I11, rx598_eos, rx598_fail
-    sub $I11, rx598_pos, rx598_off
-    substr $S10, rx598_tgt, $I11, 1
-    ne $S10, "(", rx598_fail
-    add rx598_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    add $I11, rx601_pos, 1
+    gt $I11, rx601_eos, rx601_fail
+    sub $I11, rx601_pos, rx601_off
+    substr $S10, rx601_tgt, $I11, 1
+    ne $S10, "(", rx601_fail
+    add rx601_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."signature"()
-    unless $P10, rx598_fail
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."signature"()
+    unless $P10, rx601_fail
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx598_pos = $P10."pos"()
+    rx601_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx598_pos, 1
-    gt $I11, rx598_eos, rx598_fail
-    sub $I11, rx598_pos, rx598_off
-    substr $S10, rx598_tgt, $I11, 1
-    ne $S10, ")", rx598_fail
-    add rx598_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-    goto alt612_end
-  alt612_1:
-.annotate "line", 283
+    add $I11, rx601_pos, 1
+    gt $I11, rx601_eos, rx601_fail
+    sub $I11, rx601_pos, rx601_off
+    substr $S10, rx601_tgt, $I11, 1
+    ne $S10, ")", rx601_fail
+    add rx601_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+    goto alt615_end
+  alt615_1:
+.annotate "line", 287
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."panic"("Routine declaration requires a signature")
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  alt612_end:
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 284
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."panic"("Routine declaration requires a signature")
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  alt615_end:
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 288
   # rx subrule "blockoid" subtype=capture negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."blockoid"()
-    unless $P10, rx598_fail
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."blockoid"()
+    unless $P10, rx601_fail
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx598_pos = $P10."pos"()
+    rx601_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 279
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 283
   # rx pass
-    rx598_cur."!cursor_pass"(rx598_pos, "routine_def")
-    rx598_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx598_pos)
-    .return (rx598_cur)
-  rx598_fail:
+    rx601_cur."!cursor_pass"(rx601_pos, "routine_def")
+    rx601_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx601_pos)
+    .return (rx601_cur)
+  rx601_fail:
 .annotate "line", 4
-    (rx598_rep, rx598_pos, $I10, $P10) = rx598_cur."!mark_fail"(0)
-    lt rx598_pos, -1, rx598_done
-    eq rx598_pos, -1, rx598_fail
+    (rx601_rep, rx601_pos, $I10, $P10) = rx601_cur."!mark_fail"(0)
+    lt rx601_pos, -1, rx601_done
+    eq rx601_pos, -1, rx601_fail
     jump $I10
-  rx598_done:
-    rx598_cur."!cursor_fail"()
-    rx598_cur."!cursor_debug"("FAIL  ", "routine_def")
-    .return (rx598_cur)
+  rx601_done:
+    rx601_cur."!cursor_fail"()
+    rx601_cur."!cursor_debug"("FAIL  ", "routine_def")
+    .return (rx601_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_def"  :subid("150_1267204702.05125") :method
+.sub "!PREFIX__routine_def"  :subid("150_1271336396.90314") :method
 .annotate "line", 4
-    new $P600, "ResizablePMCArray"
-    push $P600, ""
-    .return ($P600)
+    new $P603, "ResizablePMCArray"
+    push $P603, ""
+    .return ($P603)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "method_def"  :subid("151_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "method_def"  :subid("151_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx622_tgt
-    .local int rx622_pos
-    .local int rx622_off
-    .local int rx622_eos
-    .local int rx622_rep
-    .local pmc rx622_cur
-    (rx622_cur, rx622_pos, rx622_tgt) = self."!cursor_start"()
-    rx622_cur."!cursor_debug"("START ", "method_def")
-    rx622_cur."!cursor_caparray"("deflongname")
-    .lex unicode:"$\x{a2}", rx622_cur
-    .local pmc match
-    .lex "$/", match
-    length rx622_eos, rx622_tgt
-    set rx622_off, 0
-    lt rx622_pos, 2, rx622_start
-    sub rx622_off, rx622_pos, 1
-    substr rx622_tgt, rx622_tgt, rx622_off
-  rx622_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan625_done
-    goto rxscan625_scan
-  rxscan625_loop:
-    ($P10) = rx622_cur."from"()
-    inc $P10
-    set rx622_pos, $P10
-    ge rx622_pos, rx622_eos, rxscan625_done
-  rxscan625_scan:
-    set_addr $I10, rxscan625_loop
-    rx622_cur."!mark_push"(0, rx622_pos, $I10)
-  rxscan625_done:
-.annotate "line", 287
+    .local string rx625_tgt
+    .local int rx625_pos
+    .local int rx625_off
+    .local int rx625_eos
+    .local int rx625_rep
+    .local pmc rx625_cur
+    (rx625_cur, rx625_pos, rx625_tgt) = self."!cursor_start"()
+    rx625_cur."!cursor_debug"("START ", "method_def")
+    rx625_cur."!cursor_caparray"("deflongname")
+    .lex unicode:"$\x{a2}", rx625_cur
+    .local pmc match
+    .lex "$/", match
+    length rx625_eos, rx625_tgt
+    set rx625_off, 0
+    lt rx625_pos, 2, rx625_start
+    sub rx625_off, rx625_pos, 1
+    substr rx625_tgt, rx625_tgt, rx625_off
+  rx625_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan628_done
+    goto rxscan628_scan
+  rxscan628_loop:
+    ($P10) = rx625_cur."from"()
+    inc $P10
+    set rx625_pos, $P10
+    ge rx625_pos, rx625_eos, rxscan628_done
+  rxscan628_scan:
+    set_addr $I10, rxscan628_loop
+    rx625_cur."!mark_push"(0, rx625_pos, $I10)
+  rxscan628_done:
+.annotate "line", 291
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 288
-  # rx rxquantr627 ** 0..1
-    set_addr $I628, rxquantr627_done
-    rx622_cur."!mark_push"(0, rx622_pos, $I628)
-  rxquantr627_loop:
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 292
+  # rx rxquantr630 ** 0..1
+    set_addr $I631, rxquantr630_done
+    rx625_cur."!mark_push"(0, rx625_pos, $I631)
+  rxquantr630_loop:
   # rx subrule "deflongname" subtype=capture negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."deflongname"()
-    unless $P10, rx622_fail
-    rx622_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."deflongname"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx622_pos = $P10."pos"()
-    (rx622_rep) = rx622_cur."!mark_commit"($I628)
-  rxquantr627_done:
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 289
+    rx625_pos = $P10."pos"()
+    (rx625_rep) = rx625_cur."!mark_commit"($I631)
+  rxquantr630_done:
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 293
   # rx subrule "newpad" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."newpad"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  alt631_0:
-.annotate "line", 290
-    set_addr $I10, alt631_1
-    rx622_cur."!mark_push"(0, rx622_pos, $I10)
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."newpad"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  alt634_0:
+.annotate "line", 294
+    set_addr $I10, alt634_1
+    rx625_cur."!mark_push"(0, rx625_pos, $I10)
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx622_pos, 1
-    gt $I11, rx622_eos, rx622_fail
-    sub $I11, rx622_pos, rx622_off
-    substr $S10, rx622_tgt, $I11, 1
-    ne $S10, "(", rx622_fail
-    add rx622_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    add $I11, rx625_pos, 1
+    gt $I11, rx625_eos, rx625_fail
+    sub $I11, rx625_pos, rx625_off
+    substr $S10, rx625_tgt, $I11, 1
+    ne $S10, "(", rx625_fail
+    add rx625_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."signature"()
-    unless $P10, rx622_fail
-    rx622_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."signature"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx622_pos = $P10."pos"()
+    rx625_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx622_pos, 1
-    gt $I11, rx622_eos, rx622_fail
-    sub $I11, rx622_pos, rx622_off
-    substr $S10, rx622_tgt, $I11, 1
-    ne $S10, ")", rx622_fail
-    add rx622_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-    goto alt631_end
-  alt631_1:
-.annotate "line", 291
+    add $I11, rx625_pos, 1
+    gt $I11, rx625_eos, rx625_fail
+    sub $I11, rx625_pos, rx625_off
+    substr $S10, rx625_tgt, $I11, 1
+    ne $S10, ")", rx625_fail
+    add rx625_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+    goto alt634_end
+  alt634_1:
+.annotate "line", 295
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."panic"("Routine declaration requires a signature")
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  alt631_end:
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 292
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."panic"("Routine declaration requires a signature")
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  alt634_end:
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 296
   # rx subrule "blockoid" subtype=capture negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."blockoid"()
-    unless $P10, rx622_fail
-    rx622_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."blockoid"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx622_pos = $P10."pos"()
+    rx625_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 287
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 291
   # rx pass
-    rx622_cur."!cursor_pass"(rx622_pos, "method_def")
-    rx622_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx622_pos)
-    .return (rx622_cur)
-  rx622_fail:
+    rx625_cur."!cursor_pass"(rx625_pos, "method_def")
+    rx625_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx625_pos)
+    .return (rx625_cur)
+  rx625_fail:
 .annotate "line", 4
-    (rx622_rep, rx622_pos, $I10, $P10) = rx622_cur."!mark_fail"(0)
-    lt rx622_pos, -1, rx622_done
-    eq rx622_pos, -1, rx622_fail
+    (rx625_rep, rx625_pos, $I10, $P10) = rx625_cur."!mark_fail"(0)
+    lt rx625_pos, -1, rx625_done
+    eq rx625_pos, -1, rx625_fail
     jump $I10
-  rx622_done:
-    rx622_cur."!cursor_fail"()
-    rx622_cur."!cursor_debug"("FAIL  ", "method_def")
-    .return (rx622_cur)
+  rx625_done:
+    rx625_cur."!cursor_fail"()
+    rx625_cur."!cursor_debug"("FAIL  ", "method_def")
+    .return (rx625_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__method_def"  :subid("152_1267204702.05125") :method
+.sub "!PREFIX__method_def"  :subid("152_1271336396.90314") :method
 .annotate "line", 4
-    new $P624, "ResizablePMCArray"
-    push $P624, ""
-    .return ($P624)
+    new $P627, "ResizablePMCArray"
+    push $P627, ""
+    .return ($P627)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "signature"  :subid("153_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "signature"  :subid("153_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx641_tgt
-    .local int rx641_pos
-    .local int rx641_off
-    .local int rx641_eos
-    .local int rx641_rep
-    .local pmc rx641_cur
-    (rx641_cur, rx641_pos, rx641_tgt) = self."!cursor_start"()
-    rx641_cur."!cursor_debug"("START ", "signature")
-    rx641_cur."!cursor_caparray"("parameter")
-    .lex unicode:"$\x{a2}", rx641_cur
+    .local string rx644_tgt
+    .local int rx644_pos
+    .local int rx644_off
+    .local int rx644_eos
+    .local int rx644_rep
+    .local pmc rx644_cur
+    (rx644_cur, rx644_pos, rx644_tgt) = self."!cursor_start"()
+    rx644_cur."!cursor_debug"("START ", "signature")
+    rx644_cur."!cursor_caparray"("parameter")
+    .lex unicode:"$\x{a2}", rx644_cur
     .local pmc match
     .lex "$/", match
-    length rx641_eos, rx641_tgt
-    set rx641_off, 0
-    lt rx641_pos, 2, rx641_start
-    sub rx641_off, rx641_pos, 1
-    substr rx641_tgt, rx641_tgt, rx641_off
-  rx641_start:
+    length rx644_eos, rx644_tgt
+    set rx644_off, 0
+    lt rx644_pos, 2, rx644_start
+    sub rx644_off, rx644_pos, 1
+    substr rx644_tgt, rx644_tgt, rx644_off
+  rx644_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan644_done
-    goto rxscan644_scan
-  rxscan644_loop:
-    ($P10) = rx641_cur."from"()
+    ne $I10, -1, rxscan647_done
+    goto rxscan647_scan
+  rxscan647_loop:
+    ($P10) = rx644_cur."from"()
     inc $P10
-    set rx641_pos, $P10
-    ge rx641_pos, rx641_eos, rxscan644_done
-  rxscan644_scan:
-    set_addr $I10, rxscan644_loop
-    rx641_cur."!mark_push"(0, rx641_pos, $I10)
-  rxscan644_done:
-.annotate "line", 295
-  # rx rxquantr645 ** 0..1
-    set_addr $I648, rxquantr645_done
-    rx641_cur."!mark_push"(0, rx641_pos, $I648)
-  rxquantr645_loop:
-  # rx rxquantr646 ** 1..*
-    set_addr $I647, rxquantr646_done
-    rx641_cur."!mark_push"(0, -1, $I647)
-  rxquantr646_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx641_cur."!cursor_pos"(rx641_pos)
-    $P10 = rx641_cur."ws"()
-    unless $P10, rx641_fail
-    rx641_pos = $P10."pos"()
+    set rx644_pos, $P10
+    ge rx644_pos, rx644_eos, rxscan647_done
+  rxscan647_scan:
+    set_addr $I10, rxscan647_loop
+    rx644_cur."!mark_push"(0, rx644_pos, $I10)
+  rxscan647_done:
+.annotate "line", 299
+  # rx rxquantr648 ** 0..1
+    set_addr $I651, rxquantr648_done
+    rx644_cur."!mark_push"(0, rx644_pos, $I651)
+  rxquantr648_loop:
+  # rx rxquantr649 ** 1..*
+    set_addr $I650, rxquantr649_done
+    rx644_cur."!mark_push"(0, -1, $I650)
+  rxquantr649_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx644_cur."!cursor_pos"(rx644_pos)
+    $P10 = rx644_cur."ws"()
+    unless $P10, rx644_fail
+    rx644_pos = $P10."pos"()
   # rx subrule "parameter" subtype=capture negate=
-    rx641_cur."!cursor_pos"(rx641_pos)
-    $P10 = rx641_cur."parameter"()
-    unless $P10, rx641_fail
-    rx641_cur."!mark_push"(0, -1, 0, $P10)
+    rx644_cur."!cursor_pos"(rx644_pos)
+    $P10 = rx644_cur."parameter"()
+    unless $P10, rx644_fail
+    rx644_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("parameter")
-    rx641_pos = $P10."pos"()
+    rx644_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx641_cur."!cursor_pos"(rx641_pos)
-    $P10 = rx641_cur."ws"()
-    unless $P10, rx641_fail
-    rx641_pos = $P10."pos"()
-    (rx641_rep) = rx641_cur."!mark_commit"($I647)
-    rx641_cur."!mark_push"(rx641_rep, rx641_pos, $I647)
+    rx644_cur."!cursor_pos"(rx644_pos)
+    $P10 = rx644_cur."ws"()
+    unless $P10, rx644_fail
+    rx644_pos = $P10."pos"()
+    (rx644_rep) = rx644_cur."!mark_commit"($I650)
+    rx644_cur."!mark_push"(rx644_rep, rx644_pos, $I650)
   # rx literal  ","
-    add $I11, rx641_pos, 1
-    gt $I11, rx641_eos, rx641_fail
-    sub $I11, rx641_pos, rx641_off
-    substr $S10, rx641_tgt, $I11, 1
-    ne $S10, ",", rx641_fail
-    add rx641_pos, 1
-    goto rxquantr646_loop
-  rxquantr646_done:
-    (rx641_rep) = rx641_cur."!mark_commit"($I648)
-  rxquantr645_done:
+    add $I11, rx644_pos, 1
+    gt $I11, rx644_eos, rx644_fail
+    sub $I11, rx644_pos, rx644_off
+    substr $S10, rx644_tgt, $I11, 1
+    ne $S10, ",", rx644_fail
+    add rx644_pos, 1
+    goto rxquantr649_loop
+  rxquantr649_done:
+    (rx644_rep) = rx644_cur."!mark_commit"($I651)
+  rxquantr648_done:
   # rx pass
-    rx641_cur."!cursor_pass"(rx641_pos, "signature")
-    rx641_cur."!cursor_debug"("PASS  ", "signature", " at pos=", rx641_pos)
-    .return (rx641_cur)
-  rx641_fail:
+    rx644_cur."!cursor_pass"(rx644_pos, "signature")
+    rx644_cur."!cursor_debug"("PASS  ", "signature", " at pos=", rx644_pos)
+    .return (rx644_cur)
+  rx644_fail:
 .annotate "line", 4
-    (rx641_rep, rx641_pos, $I10, $P10) = rx641_cur."!mark_fail"(0)
-    lt rx641_pos, -1, rx641_done
-    eq rx641_pos, -1, rx641_fail
+    (rx644_rep, rx644_pos, $I10, $P10) = rx644_cur."!mark_fail"(0)
+    lt rx644_pos, -1, rx644_done
+    eq rx644_pos, -1, rx644_fail
     jump $I10
-  rx641_done:
-    rx641_cur."!cursor_fail"()
-    rx641_cur."!cursor_debug"("FAIL  ", "signature")
-    .return (rx641_cur)
+  rx644_done:
+    rx644_cur."!cursor_fail"()
+    rx644_cur."!cursor_debug"("FAIL  ", "signature")
+    .return (rx644_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__signature"  :subid("154_1267204702.05125") :method
+.sub "!PREFIX__signature"  :subid("154_1271336396.90314") :method
 .annotate "line", 4
-    new $P643, "ResizablePMCArray"
-    push $P643, ""
-    .return ($P643)
+    new $P646, "ResizablePMCArray"
+    push $P646, ""
+    .return ($P646)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "parameter"  :subid("155_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "parameter"  :subid("155_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx650_tgt
-    .local int rx650_pos
-    .local int rx650_off
-    .local int rx650_eos
-    .local int rx650_rep
-    .local pmc rx650_cur
-    (rx650_cur, rx650_pos, rx650_tgt) = self."!cursor_start"()
-    rx650_cur."!cursor_debug"("START ", "parameter")
-    rx650_cur."!cursor_caparray"("default_value")
-    .lex unicode:"$\x{a2}", rx650_cur
+    .local string rx653_tgt
+    .local int rx653_pos
+    .local int rx653_off
+    .local int rx653_eos
+    .local int rx653_rep
+    .local pmc rx653_cur
+    (rx653_cur, rx653_pos, rx653_tgt) = self."!cursor_start"()
+    rx653_cur."!cursor_debug"("START ", "parameter")
+    rx653_cur."!cursor_caparray"("default_value")
+    .lex unicode:"$\x{a2}", rx653_cur
     .local pmc match
     .lex "$/", match
-    length rx650_eos, rx650_tgt
-    set rx650_off, 0
-    lt rx650_pos, 2, rx650_start
-    sub rx650_off, rx650_pos, 1
-    substr rx650_tgt, rx650_tgt, rx650_off
-  rx650_start:
+    length rx653_eos, rx653_tgt
+    set rx653_off, 0
+    lt rx653_pos, 2, rx653_start
+    sub rx653_off, rx653_pos, 1
+    substr rx653_tgt, rx653_tgt, rx653_off
+  rx653_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan656_done
-    goto rxscan656_scan
-  rxscan656_loop:
-    ($P10) = rx650_cur."from"()
+    ne $I10, -1, rxscan659_done
+    goto rxscan659_scan
+  rxscan659_loop:
+    ($P10) = rx653_cur."from"()
     inc $P10
-    set rx650_pos, $P10
-    ge rx650_pos, rx650_eos, rxscan656_done
-  rxscan656_scan:
-    set_addr $I10, rxscan656_loop
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-  rxscan656_done:
-  alt657_0:
-.annotate "line", 298
-    set_addr $I10, alt657_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-.annotate "line", 299
+    set rx653_pos, $P10
+    ge rx653_pos, rx653_eos, rxscan659_done
+  rxscan659_scan:
+    set_addr $I10, rxscan659_loop
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
+  rxscan659_done:
+  alt660_0:
+.annotate "line", 302
+    set_addr $I10, alt660_1
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
+.annotate "line", 303
   # rx subcapture "quant"
-    set_addr $I10, rxcap_658_fail
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    set_addr $I10, rxcap_661_fail
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx literal  "*"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "*", rx650_fail
-    add rx650_pos, 1
-    set_addr $I10, rxcap_658_fail
-    ($I12, $I11) = rx650_cur."!mark_peek"($I10)
-    rx650_cur."!cursor_pos"($I11)
-    ($P10) = rx650_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx650_pos, "")
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx653_pos, 1
+    gt $I11, rx653_eos, rx653_fail
+    sub $I11, rx653_pos, rx653_off
+    substr $S10, rx653_tgt, $I11, 1
+    ne $S10, "*", rx653_fail
+    add rx653_pos, 1
+    set_addr $I10, rxcap_661_fail
+    ($I12, $I11) = rx653_cur."!mark_peek"($I10)
+    rx653_cur."!cursor_pos"($I11)
+    ($P10) = rx653_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx653_pos, "")
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quant")
-    goto rxcap_658_done
-  rxcap_658_fail:
-    goto rx650_fail
-  rxcap_658_done:
+    goto rxcap_661_done
+  rxcap_661_fail:
+    goto rx653_fail
+  rxcap_661_done:
   # rx subrule "param_var" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."param_var"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."param_var"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx650_pos = $P10."pos"()
-    goto alt657_end
-  alt657_1:
-  alt659_0:
-.annotate "line", 300
-    set_addr $I10, alt659_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    rx653_pos = $P10."pos"()
+    goto alt660_end
+  alt660_1:
+  alt662_0:
+.annotate "line", 304
+    set_addr $I10, alt662_1
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx subrule "param_var" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."param_var"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."param_var"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx650_pos = $P10."pos"()
-    goto alt659_end
-  alt659_1:
+    rx653_pos = $P10."pos"()
+    goto alt662_end
+  alt662_1:
   # rx subrule "named_param" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."named_param"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."named_param"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("named_param")
-    rx650_pos = $P10."pos"()
-  alt659_end:
+    rx653_pos = $P10."pos"()
+  alt662_end:
   # rx subcapture "quant"
-    set_addr $I10, rxcap_661_fail
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-  alt660_0:
-    set_addr $I10, alt660_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    set_addr $I10, rxcap_664_fail
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
+  alt663_0:
+    set_addr $I10, alt663_1
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx literal  "?"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "?", rx650_fail
-    add rx650_pos, 1
-    goto alt660_end
-  alt660_1:
-    set_addr $I10, alt660_2
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    add $I11, rx653_pos, 1
+    gt $I11, rx653_eos, rx653_fail
+    sub $I11, rx653_pos, rx653_off
+    substr $S10, rx653_tgt, $I11, 1
+    ne $S10, "?", rx653_fail
+    add rx653_pos, 1
+    goto alt663_end
+  alt663_1:
+    set_addr $I10, alt663_2
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx literal  "!"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "!", rx650_fail
-    add rx650_pos, 1
-    goto alt660_end
-  alt660_2:
-  alt660_end:
-    set_addr $I10, rxcap_661_fail
-    ($I12, $I11) = rx650_cur."!mark_peek"($I10)
-    rx650_cur."!cursor_pos"($I11)
-    ($P10) = rx650_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx650_pos, "")
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx653_pos, 1
+    gt $I11, rx653_eos, rx653_fail
+    sub $I11, rx653_pos, rx653_off
+    substr $S10, rx653_tgt, $I11, 1
+    ne $S10, "!", rx653_fail
+    add rx653_pos, 1
+    goto alt663_end
+  alt663_2:
+  alt663_end:
+    set_addr $I10, rxcap_664_fail
+    ($I12, $I11) = rx653_cur."!mark_peek"($I10)
+    rx653_cur."!cursor_pos"($I11)
+    ($P10) = rx653_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx653_pos, "")
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quant")
-    goto rxcap_661_done
-  rxcap_661_fail:
-    goto rx650_fail
-  rxcap_661_done:
-  alt657_end:
-.annotate "line", 302
-  # rx rxquantr662 ** 0..1
-    set_addr $I663, rxquantr662_done
-    rx650_cur."!mark_push"(0, rx650_pos, $I663)
-  rxquantr662_loop:
+    goto rxcap_664_done
+  rxcap_664_fail:
+    goto rx653_fail
+  rxcap_664_done:
+  alt660_end:
+.annotate "line", 306
+  # rx rxquantr665 ** 0..1
+    set_addr $I666, rxquantr665_done
+    rx653_cur."!mark_push"(0, rx653_pos, $I666)
+  rxquantr665_loop:
   # rx subrule "default_value" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."default_value"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."default_value"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("default_value")
-    rx650_pos = $P10."pos"()
-    (rx650_rep) = rx650_cur."!mark_commit"($I663)
-  rxquantr662_done:
-.annotate "line", 297
+    rx653_pos = $P10."pos"()
+    (rx653_rep) = rx653_cur."!mark_commit"($I666)
+  rxquantr665_done:
+.annotate "line", 301
   # rx pass
-    rx650_cur."!cursor_pass"(rx650_pos, "parameter")
-    rx650_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx650_pos)
-    .return (rx650_cur)
-  rx650_fail:
+    rx653_cur."!cursor_pass"(rx653_pos, "parameter")
+    rx653_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx653_pos)
+    .return (rx653_cur)
+  rx653_fail:
 .annotate "line", 4
-    (rx650_rep, rx650_pos, $I10, $P10) = rx650_cur."!mark_fail"(0)
-    lt rx650_pos, -1, rx650_done
-    eq rx650_pos, -1, rx650_fail
+    (rx653_rep, rx653_pos, $I10, $P10) = rx653_cur."!mark_fail"(0)
+    lt rx653_pos, -1, rx653_done
+    eq rx653_pos, -1, rx653_fail
     jump $I10
-  rx650_done:
-    rx650_cur."!cursor_fail"()
-    rx650_cur."!cursor_debug"("FAIL  ", "parameter")
-    .return (rx650_cur)
+  rx653_done:
+    rx653_cur."!cursor_fail"()
+    rx653_cur."!cursor_debug"("FAIL  ", "parameter")
+    .return (rx653_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__parameter"  :subid("156_1267204702.05125") :method
+.sub "!PREFIX__parameter"  :subid("156_1271336396.90314") :method
 .annotate "line", 4
-    $P652 = self."!PREFIX__!subrule"("named_param", "")
-    $P653 = self."!PREFIX__!subrule"("param_var", "")
-    $P654 = self."!PREFIX__!subrule"("param_var", "*")
-    new $P655, "ResizablePMCArray"
-    push $P655, $P652
-    push $P655, $P653
-    push $P655, $P654
-    .return ($P655)
+    $P655 = self."!PREFIX__!subrule"("named_param", "")
+    $P656 = self."!PREFIX__!subrule"("param_var", "")
+    $P657 = self."!PREFIX__!subrule"("param_var", "*")
+    new $P658, "ResizablePMCArray"
+    push $P658, $P655
+    push $P658, $P656
+    push $P658, $P657
+    .return ($P658)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "param_var"  :subid("157_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "param_var"  :subid("157_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx665_tgt
-    .local int rx665_pos
-    .local int rx665_off
-    .local int rx665_eos
-    .local int rx665_rep
-    .local pmc rx665_cur
-    (rx665_cur, rx665_pos, rx665_tgt) = self."!cursor_start"()
-    rx665_cur."!cursor_debug"("START ", "param_var")
-    rx665_cur."!cursor_caparray"("twigil")
-    .lex unicode:"$\x{a2}", rx665_cur
+    .local string rx668_tgt
+    .local int rx668_pos
+    .local int rx668_off
+    .local int rx668_eos
+    .local int rx668_rep
+    .local pmc rx668_cur
+    (rx668_cur, rx668_pos, rx668_tgt) = self."!cursor_start"()
+    rx668_cur."!cursor_debug"("START ", "param_var")
+    rx668_cur."!cursor_caparray"("twigil")
+    .lex unicode:"$\x{a2}", rx668_cur
     .local pmc match
     .lex "$/", match
-    length rx665_eos, rx665_tgt
-    set rx665_off, 0
-    lt rx665_pos, 2, rx665_start
-    sub rx665_off, rx665_pos, 1
-    substr rx665_tgt, rx665_tgt, rx665_off
-  rx665_start:
+    length rx668_eos, rx668_tgt
+    set rx668_off, 0
+    lt rx668_pos, 2, rx668_start
+    sub rx668_off, rx668_pos, 1
+    substr rx668_tgt, rx668_tgt, rx668_off
+  rx668_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan669_done
-    goto rxscan669_scan
-  rxscan669_loop:
-    ($P10) = rx665_cur."from"()
+    ne $I10, -1, rxscan672_done
+    goto rxscan672_scan
+  rxscan672_loop:
+    ($P10) = rx668_cur."from"()
     inc $P10
-    set rx665_pos, $P10
-    ge rx665_pos, rx665_eos, rxscan669_done
-  rxscan669_scan:
-    set_addr $I10, rxscan669_loop
-    rx665_cur."!mark_push"(0, rx665_pos, $I10)
-  rxscan669_done:
-.annotate "line", 306
+    set rx668_pos, $P10
+    ge rx668_pos, rx668_eos, rxscan672_done
+  rxscan672_scan:
+    set_addr $I10, rxscan672_loop
+    rx668_cur."!mark_push"(0, rx668_pos, $I10)
+  rxscan672_done:
+.annotate "line", 310
   # rx subrule "sigil" subtype=capture negate=
-    rx665_cur."!cursor_pos"(rx665_pos)
-    $P10 = rx665_cur."sigil"()
-    unless $P10, rx665_fail
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    rx668_cur."!cursor_pos"(rx668_pos)
+    $P10 = rx668_cur."sigil"()
+    unless $P10, rx668_fail
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx665_pos = $P10."pos"()
-  # rx rxquantr670 ** 0..1
-    set_addr $I671, rxquantr670_done
-    rx665_cur."!mark_push"(0, rx665_pos, $I671)
-  rxquantr670_loop:
+    rx668_pos = $P10."pos"()
+  # rx rxquantr673 ** 0..1
+    set_addr $I674, rxquantr673_done
+    rx668_cur."!mark_push"(0, rx668_pos, $I674)
+  rxquantr673_loop:
   # rx subrule "twigil" subtype=capture negate=
-    rx665_cur."!cursor_pos"(rx665_pos)
-    $P10 = rx665_cur."twigil"()
-    unless $P10, rx665_fail
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    rx668_cur."!cursor_pos"(rx668_pos)
+    $P10 = rx668_cur."twigil"()
+    unless $P10, rx668_fail
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("twigil")
-    rx665_pos = $P10."pos"()
-    (rx665_rep) = rx665_cur."!mark_commit"($I671)
-  rxquantr670_done:
-  alt672_0:
-.annotate "line", 307
-    set_addr $I10, alt672_1
-    rx665_cur."!mark_push"(0, rx665_pos, $I10)
+    rx668_pos = $P10."pos"()
+    (rx668_rep) = rx668_cur."!mark_commit"($I674)
+  rxquantr673_done:
+  alt675_0:
+.annotate "line", 311
+    set_addr $I10, alt675_1
+    rx668_cur."!mark_push"(0, rx668_pos, $I10)
   # rx subrule "ident" subtype=capture negate=
-    rx665_cur."!cursor_pos"(rx665_pos)
-    $P10 = rx665_cur."ident"()
-    unless $P10, rx665_fail
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    rx668_cur."!cursor_pos"(rx668_pos)
+    $P10 = rx668_cur."ident"()
+    unless $P10, rx668_fail
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx665_pos = $P10."pos"()
-    goto alt672_end
-  alt672_1:
+    rx668_pos = $P10."pos"()
+    goto alt675_end
+  alt675_1:
   # rx subcapture "name"
-    set_addr $I10, rxcap_673_fail
-    rx665_cur."!mark_push"(0, rx665_pos, $I10)
+    set_addr $I10, rxcap_676_fail
+    rx668_cur."!mark_push"(0, rx668_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx665_pos, rx665_eos, rx665_fail
-    sub $I10, rx665_pos, rx665_off
-    substr $S10, rx665_tgt, $I10, 1
+    ge rx668_pos, rx668_eos, rx668_fail
+    sub $I10, rx668_pos, rx668_off
+    substr $S10, rx668_tgt, $I10, 1
     index $I11, "/!", $S10
-    lt $I11, 0, rx665_fail
-    inc rx665_pos
-    set_addr $I10, rxcap_673_fail
-    ($I12, $I11) = rx665_cur."!mark_peek"($I10)
-    rx665_cur."!cursor_pos"($I11)
-    ($P10) = rx665_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx665_pos, "")
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx668_fail
+    inc rx668_pos
+    set_addr $I10, rxcap_676_fail
+    ($I12, $I11) = rx668_cur."!mark_peek"($I10)
+    rx668_cur."!cursor_pos"($I11)
+    ($P10) = rx668_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx668_pos, "")
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    goto rxcap_673_done
-  rxcap_673_fail:
-    goto rx665_fail
-  rxcap_673_done:
-  alt672_end:
-.annotate "line", 305
+    goto rxcap_676_done
+  rxcap_676_fail:
+    goto rx668_fail
+  rxcap_676_done:
+  alt675_end:
+.annotate "line", 309
   # rx pass
-    rx665_cur."!cursor_pass"(rx665_pos, "param_var")
-    rx665_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx665_pos)
-    .return (rx665_cur)
-  rx665_fail:
+    rx668_cur."!cursor_pass"(rx668_pos, "param_var")
+    rx668_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx668_pos)
+    .return (rx668_cur)
+  rx668_fail:
 .annotate "line", 4
-    (rx665_rep, rx665_pos, $I10, $P10) = rx665_cur."!mark_fail"(0)
-    lt rx665_pos, -1, rx665_done
-    eq rx665_pos, -1, rx665_fail
+    (rx668_rep, rx668_pos, $I10, $P10) = rx668_cur."!mark_fail"(0)
+    lt rx668_pos, -1, rx668_done
+    eq rx668_pos, -1, rx668_fail
     jump $I10
-  rx665_done:
-    rx665_cur."!cursor_fail"()
-    rx665_cur."!cursor_debug"("FAIL  ", "param_var")
-    .return (rx665_cur)
+  rx668_done:
+    rx668_cur."!cursor_fail"()
+    rx668_cur."!cursor_debug"("FAIL  ", "param_var")
+    .return (rx668_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__param_var"  :subid("158_1267204702.05125") :method
+.sub "!PREFIX__param_var"  :subid("158_1271336396.90314") :method
 .annotate "line", 4
-    $P667 = self."!PREFIX__!subrule"("sigil", "")
-    new $P668, "ResizablePMCArray"
-    push $P668, $P667
-    .return ($P668)
+    $P670 = self."!PREFIX__!subrule"("sigil", "")
+    new $P671, "ResizablePMCArray"
+    push $P671, $P670
+    .return ($P671)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "named_param"  :subid("159_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "named_param"  :subid("159_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx675_tgt
-    .local int rx675_pos
-    .local int rx675_off
-    .local int rx675_eos
-    .local int rx675_rep
-    .local pmc rx675_cur
-    (rx675_cur, rx675_pos, rx675_tgt) = self."!cursor_start"()
-    rx675_cur."!cursor_debug"("START ", "named_param")
-    .lex unicode:"$\x{a2}", rx675_cur
+    .local string rx678_tgt
+    .local int rx678_pos
+    .local int rx678_off
+    .local int rx678_eos
+    .local int rx678_rep
+    .local pmc rx678_cur
+    (rx678_cur, rx678_pos, rx678_tgt) = self."!cursor_start"()
+    rx678_cur."!cursor_debug"("START ", "named_param")
+    .lex unicode:"$\x{a2}", rx678_cur
     .local pmc match
     .lex "$/", match
-    length rx675_eos, rx675_tgt
-    set rx675_off, 0
-    lt rx675_pos, 2, rx675_start
-    sub rx675_off, rx675_pos, 1
-    substr rx675_tgt, rx675_tgt, rx675_off
-  rx675_start:
+    length rx678_eos, rx678_tgt
+    set rx678_off, 0
+    lt rx678_pos, 2, rx678_start
+    sub rx678_off, rx678_pos, 1
+    substr rx678_tgt, rx678_tgt, rx678_off
+  rx678_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan679_done
-    goto rxscan679_scan
-  rxscan679_loop:
-    ($P10) = rx675_cur."from"()
+    ne $I10, -1, rxscan682_done
+    goto rxscan682_scan
+  rxscan682_loop:
+    ($P10) = rx678_cur."from"()
     inc $P10
-    set rx675_pos, $P10
-    ge rx675_pos, rx675_eos, rxscan679_done
-  rxscan679_scan:
-    set_addr $I10, rxscan679_loop
-    rx675_cur."!mark_push"(0, rx675_pos, $I10)
-  rxscan679_done:
-.annotate "line", 311
+    set rx678_pos, $P10
+    ge rx678_pos, rx678_eos, rxscan682_done
+  rxscan682_scan:
+    set_addr $I10, rxscan682_loop
+    rx678_cur."!mark_push"(0, rx678_pos, $I10)
+  rxscan682_done:
+.annotate "line", 315
   # rx literal  ":"
-    add $I11, rx675_pos, 1
-    gt $I11, rx675_eos, rx675_fail
-    sub $I11, rx675_pos, rx675_off
-    substr $S10, rx675_tgt, $I11, 1
-    ne $S10, ":", rx675_fail
-    add rx675_pos, 1
+    add $I11, rx678_pos, 1
+    gt $I11, rx678_eos, rx678_fail
+    sub $I11, rx678_pos, rx678_off
+    substr $S10, rx678_tgt, $I11, 1
+    ne $S10, ":", rx678_fail
+    add rx678_pos, 1
   # rx subrule "param_var" subtype=capture negate=
-    rx675_cur."!cursor_pos"(rx675_pos)
-    $P10 = rx675_cur."param_var"()
-    unless $P10, rx675_fail
-    rx675_cur."!mark_push"(0, -1, 0, $P10)
+    rx678_cur."!cursor_pos"(rx678_pos)
+    $P10 = rx678_cur."param_var"()
+    unless $P10, rx678_fail
+    rx678_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx675_pos = $P10."pos"()
-.annotate "line", 310
+    rx678_pos = $P10."pos"()
+.annotate "line", 314
   # rx pass
-    rx675_cur."!cursor_pass"(rx675_pos, "named_param")
-    rx675_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx675_pos)
-    .return (rx675_cur)
-  rx675_fail:
+    rx678_cur."!cursor_pass"(rx678_pos, "named_param")
+    rx678_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx678_pos)
+    .return (rx678_cur)
+  rx678_fail:
 .annotate "line", 4
-    (rx675_rep, rx675_pos, $I10, $P10) = rx675_cur."!mark_fail"(0)
-    lt rx675_pos, -1, rx675_done
-    eq rx675_pos, -1, rx675_fail
+    (rx678_rep, rx678_pos, $I10, $P10) = rx678_cur."!mark_fail"(0)
+    lt rx678_pos, -1, rx678_done
+    eq rx678_pos, -1, rx678_fail
     jump $I10
-  rx675_done:
-    rx675_cur."!cursor_fail"()
-    rx675_cur."!cursor_debug"("FAIL  ", "named_param")
-    .return (rx675_cur)
+  rx678_done:
+    rx678_cur."!cursor_fail"()
+    rx678_cur."!cursor_debug"("FAIL  ", "named_param")
+    .return (rx678_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__named_param"  :subid("160_1267204702.05125") :method
+.sub "!PREFIX__named_param"  :subid("160_1271336396.90314") :method
 .annotate "line", 4
-    $P677 = self."!PREFIX__!subrule"("param_var", ":")
-    new $P678, "ResizablePMCArray"
-    push $P678, $P677
-    .return ($P678)
+    $P680 = self."!PREFIX__!subrule"("param_var", ":")
+    new $P681, "ResizablePMCArray"
+    push $P681, $P680
+    .return ($P681)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "default_value"  :subid("161_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "default_value"  :subid("161_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx681_tgt
-    .local int rx681_pos
-    .local int rx681_off
-    .local int rx681_eos
-    .local int rx681_rep
-    .local pmc rx681_cur
-    (rx681_cur, rx681_pos, rx681_tgt) = self."!cursor_start"()
-    rx681_cur."!cursor_debug"("START ", "default_value")
-    .lex unicode:"$\x{a2}", rx681_cur
+    .local string rx684_tgt
+    .local int rx684_pos
+    .local int rx684_off
+    .local int rx684_eos
+    .local int rx684_rep
+    .local pmc rx684_cur
+    (rx684_cur, rx684_pos, rx684_tgt) = self."!cursor_start"()
+    rx684_cur."!cursor_debug"("START ", "default_value")
+    .lex unicode:"$\x{a2}", rx684_cur
     .local pmc match
     .lex "$/", match
-    length rx681_eos, rx681_tgt
-    set rx681_off, 0
-    lt rx681_pos, 2, rx681_start
-    sub rx681_off, rx681_pos, 1
-    substr rx681_tgt, rx681_tgt, rx681_off
-  rx681_start:
+    length rx684_eos, rx684_tgt
+    set rx684_off, 0
+    lt rx684_pos, 2, rx684_start
+    sub rx684_off, rx684_pos, 1
+    substr rx684_tgt, rx684_tgt, rx684_off
+  rx684_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan684_done
-    goto rxscan684_scan
-  rxscan684_loop:
-    ($P10) = rx681_cur."from"()
+    ne $I10, -1, rxscan687_done
+    goto rxscan687_scan
+  rxscan687_loop:
+    ($P10) = rx684_cur."from"()
     inc $P10
-    set rx681_pos, $P10
-    ge rx681_pos, rx681_eos, rxscan684_done
-  rxscan684_scan:
-    set_addr $I10, rxscan684_loop
-    rx681_cur."!mark_push"(0, rx681_pos, $I10)
-  rxscan684_done:
-.annotate "line", 314
+    set rx684_pos, $P10
+    ge rx684_pos, rx684_eos, rxscan687_done
+  rxscan687_scan:
+    set_addr $I10, rxscan687_loop
+    rx684_cur."!mark_push"(0, rx684_pos, $I10)
+  rxscan687_done:
+.annotate "line", 318
   # rx subrule "ws" subtype=method negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."ws"()
-    unless $P10, rx681_fail
-    rx681_pos = $P10."pos"()
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."ws"()
+    unless $P10, rx684_fail
+    rx684_pos = $P10."pos"()
   # rx literal  "="
-    add $I11, rx681_pos, 1
-    gt $I11, rx681_eos, rx681_fail
-    sub $I11, rx681_pos, rx681_off
-    substr $S10, rx681_tgt, $I11, 1
-    ne $S10, "=", rx681_fail
-    add rx681_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."ws"()
-    unless $P10, rx681_fail
-    rx681_pos = $P10."pos"()
+    add $I11, rx684_pos, 1
+    gt $I11, rx684_eos, rx684_fail
+    sub $I11, rx684_pos, rx684_off
+    substr $S10, rx684_tgt, $I11, 1
+    ne $S10, "=", rx684_fail
+    add rx684_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."ws"()
+    unless $P10, rx684_fail
+    rx684_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."EXPR"("i=")
-    unless $P10, rx681_fail
-    rx681_cur."!mark_push"(0, -1, 0, $P10)
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."EXPR"("i=")
+    unless $P10, rx684_fail
+    rx684_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx681_pos = $P10."pos"()
+    rx684_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."ws"()
-    unless $P10, rx681_fail
-    rx681_pos = $P10."pos"()
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."ws"()
+    unless $P10, rx684_fail
+    rx684_pos = $P10."pos"()
   # rx pass
-    rx681_cur."!cursor_pass"(rx681_pos, "default_value")
-    rx681_cur."!cursor_debug"("PASS  ", "default_value", " at pos=", rx681_pos)
-    .return (rx681_cur)
-  rx681_fail:
+    rx684_cur."!cursor_pass"(rx684_pos, "default_value")
+    rx684_cur."!cursor_debug"("PASS  ", "default_value", " at pos=", rx684_pos)
+    .return (rx684_cur)
+  rx684_fail:
 .annotate "line", 4
-    (rx681_rep, rx681_pos, $I10, $P10) = rx681_cur."!mark_fail"(0)
-    lt rx681_pos, -1, rx681_done
-    eq rx681_pos, -1, rx681_fail
+    (rx684_rep, rx684_pos, $I10, $P10) = rx684_cur."!mark_fail"(0)
+    lt rx684_pos, -1, rx684_done
+    eq rx684_pos, -1, rx684_fail
     jump $I10
-  rx681_done:
-    rx681_cur."!cursor_fail"()
-    rx681_cur."!cursor_debug"("FAIL  ", "default_value")
-    .return (rx681_cur)
+  rx684_done:
+    rx684_cur."!cursor_fail"()
+    rx684_cur."!cursor_debug"("FAIL  ", "default_value")
+    .return (rx684_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__default_value"  :subid("162_1267204702.05125") :method
+.sub "!PREFIX__default_value"  :subid("162_1271336396.90314") :method
 .annotate "line", 4
-    new $P683, "ResizablePMCArray"
-    push $P683, ""
-    .return ($P683)
+    new $P686, "ResizablePMCArray"
+    push $P686, ""
+    .return ($P686)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "regex_declarator"  :subid("163_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "regex_declarator"  :subid("163_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx689_tgt
-    .local int rx689_pos
-    .local int rx689_off
-    .local int rx689_eos
-    .local int rx689_rep
-    .local pmc rx689_cur
-    (rx689_cur, rx689_pos, rx689_tgt) = self."!cursor_start"()
-    rx689_cur."!cursor_debug"("START ", "regex_declarator")
-    rx689_cur."!cursor_caparray"("signature")
-    .lex unicode:"$\x{a2}", rx689_cur
-    .local pmc match
-    .lex "$/", match
-    length rx689_eos, rx689_tgt
-    set rx689_off, 0
-    lt rx689_pos, 2, rx689_start
-    sub rx689_off, rx689_pos, 1
-    substr rx689_tgt, rx689_tgt, rx689_off
-  rx689_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan692_done
-    goto rxscan692_scan
-  rxscan692_loop:
-    ($P10) = rx689_cur."from"()
-    inc $P10
-    set rx689_pos, $P10
-    ge rx689_pos, rx689_eos, rxscan692_done
-  rxscan692_scan:
-    set_addr $I10, rxscan692_loop
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-  rxscan692_done:
-.annotate "line", 316
+    .local string rx692_tgt
+    .local int rx692_pos
+    .local int rx692_off
+    .local int rx692_eos
+    .local int rx692_rep
+    .local pmc rx692_cur
+    (rx692_cur, rx692_pos, rx692_tgt) = self."!cursor_start"()
+    rx692_cur."!cursor_debug"("START ", "regex_declarator")
+    rx692_cur."!cursor_caparray"("signature")
+    .lex unicode:"$\x{a2}", rx692_cur
+    .local pmc match
+    .lex "$/", match
+    length rx692_eos, rx692_tgt
+    set rx692_off, 0
+    lt rx692_pos, 2, rx692_start
+    sub rx692_off, rx692_pos, 1
+    substr rx692_tgt, rx692_tgt, rx692_off
+  rx692_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan695_done
+    goto rxscan695_scan
+  rxscan695_loop:
+    ($P10) = rx692_cur."from"()
+    inc $P10
+    set rx692_pos, $P10
+    ge rx692_pos, rx692_eos, rxscan695_done
+  rxscan695_scan:
+    set_addr $I10, rxscan695_loop
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+  rxscan695_done:
+.annotate "line", 320
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt694_0:
-.annotate "line", 317
-    set_addr $I10, alt694_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-.annotate "line", 318
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt697_0:
+.annotate "line", 321
+    set_addr $I10, alt697_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+.annotate "line", 322
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subcapture "proto"
-    set_addr $I10, rxcap_696_fail
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    set_addr $I10, rxcap_699_fail
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "proto"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "proto", rx689_fail
-    add rx689_pos, 5
-    set_addr $I10, rxcap_696_fail
-    ($I12, $I11) = rx689_cur."!mark_peek"($I10)
-    rx689_cur."!cursor_pos"($I11)
-    ($P10) = rx689_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx689_pos, "")
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "proto", rx692_fail
+    add rx692_pos, 5
+    set_addr $I10, rxcap_699_fail
+    ($I12, $I11) = rx692_cur."!mark_peek"($I10)
+    rx692_cur."!cursor_pos"($I11)
+    ($P10) = rx692_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx692_pos, "")
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("proto")
-    goto rxcap_696_done
-  rxcap_696_fail:
-    goto rx689_fail
-  rxcap_696_done:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt698_0:
-    set_addr $I10, alt698_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    goto rxcap_699_done
+  rxcap_699_fail:
+    goto rx692_fail
+  rxcap_699_done:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt701_0:
+    set_addr $I10, alt701_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "regex"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "regex", rx689_fail
-    add rx689_pos, 5
-    goto alt698_end
-  alt698_1:
-    set_addr $I10, alt698_2
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "regex", rx692_fail
+    add rx692_pos, 5
+    goto alt701_end
+  alt701_1:
+    set_addr $I10, alt701_2
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "token"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "token", rx689_fail
-    add rx689_pos, 5
-    goto alt698_end
-  alt698_2:
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "token", rx692_fail
+    add rx692_pos, 5
+    goto alt701_end
+  alt701_2:
   # rx literal  "rule"
-    add $I11, rx689_pos, 4
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 4
-    ne $S10, "rule", rx689_fail
-    add rx689_pos, 4
-  alt698_end:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 319
+    add $I11, rx692_pos, 4
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 4
+    ne $S10, "rule", rx692_fail
+    add rx692_pos, 4
+  alt701_end:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 323
   # rx subrule "deflongname" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."deflongname"()
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."deflongname"()
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt701_0:
-.annotate "line", 320
-    set_addr $I10, alt701_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-.annotate "line", 321
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt704_0:
+.annotate "line", 324
+    set_addr $I10, alt704_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+.annotate "line", 325
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "{"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "{", rx689_fail
-    add rx689_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "{", rx692_fail
+    add rx692_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "<...>"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "<...>", rx689_fail
-    add rx689_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "<...>", rx692_fail
+    add rx692_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "}", rx689_fail
-    add rx689_pos, 1
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "}", rx692_fail
+    add rx692_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ENDSTMT"()
-    unless $P10, rx689_fail
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-    goto alt701_end
-  alt701_1:
-.annotate "line", 322
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ENDSTMT"()
+    unless $P10, rx692_fail
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+    goto alt704_end
+  alt704_1:
+.annotate "line", 326
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."panic"("Proto regex body must be <...>")
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt701_end:
-.annotate "line", 323
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."panic"("Proto regex body must be <...>")
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt704_end:
+.annotate "line", 327
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 318
-    goto alt694_end
-  alt694_1:
-.annotate "line", 324
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 322
+    goto alt697_end
+  alt697_1:
+.annotate "line", 328
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subcapture "sym"
-    set_addr $I10, rxcap_711_fail
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-  alt710_0:
-    set_addr $I10, alt710_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    set_addr $I10, rxcap_714_fail
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+  alt713_0:
+    set_addr $I10, alt713_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "regex"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "regex", rx689_fail
-    add rx689_pos, 5
-    goto alt710_end
-  alt710_1:
-    set_addr $I10, alt710_2
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "regex", rx692_fail
+    add rx692_pos, 5
+    goto alt713_end
+  alt713_1:
+    set_addr $I10, alt713_2
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "token"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "token", rx689_fail
-    add rx689_pos, 5
-    goto alt710_end
-  alt710_2:
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "token", rx692_fail
+    add rx692_pos, 5
+    goto alt713_end
+  alt713_2:
   # rx literal  "rule"
-    add $I11, rx689_pos, 4
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 4
-    ne $S10, "rule", rx689_fail
-    add rx689_pos, 4
-  alt710_end:
-    set_addr $I10, rxcap_711_fail
-    ($I12, $I11) = rx689_cur."!mark_peek"($I10)
-    rx689_cur."!cursor_pos"($I11)
-    ($P10) = rx689_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx689_pos, "")
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx692_pos, 4
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 4
+    ne $S10, "rule", rx692_fail
+    add rx692_pos, 4
+  alt713_end:
+    set_addr $I10, rxcap_714_fail
+    ($I12, $I11) = rx692_cur."!mark_peek"($I10)
+    rx692_cur."!cursor_pos"($I11)
+    ($P10) = rx692_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx692_pos, "")
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_711_done
-  rxcap_711_fail:
-    goto rx689_fail
-  rxcap_711_done:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 325
+    goto rxcap_714_done
+  rxcap_714_fail:
+    goto rx692_fail
+  rxcap_714_done:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 329
   # rx subrule "deflongname" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."deflongname"()
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."deflongname"()
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 326
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 330
   # rx subrule "newpad" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."newpad"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 327
-  # rx rxquantr715 ** 0..1
-    set_addr $I720, rxquantr715_done
-    rx689_cur."!mark_push"(0, rx689_pos, $I720)
-  rxquantr715_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."newpad"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 331
+  # rx rxquantr718 ** 0..1
+    set_addr $I723, rxquantr718_done
+    rx692_cur."!mark_push"(0, rx692_pos, $I723)
+  rxquantr718_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "(", rx689_fail
-    add rx689_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "(", rx692_fail
+    add rx692_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."signature"()
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."signature"()
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, ")", rx689_fail
-    add rx689_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-    (rx689_rep) = rx689_cur."!mark_commit"($I720)
-  rxquantr715_done:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 328
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, ")", rx692_fail
+    add rx692_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+    (rx692_rep) = rx692_cur."!mark_commit"($I723)
+  rxquantr718_done:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 332
   # rx reduce name="regex_declarator" key="open"
-    rx689_cur."!cursor_pos"(rx689_pos)
-    rx689_cur."!reduce"("regex_declarator", "open")
+    rx692_cur."!cursor_pos"(rx692_pos)
+    rx692_cur."!reduce"("regex_declarator", "open")
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 329
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 333
   # rx literal  "{"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "{", rx689_fail
-    add rx689_pos, 1
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "{", rx692_fail
+    add rx692_pos, 1
   # rx subrule "LANG" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."LANG"("Regex", "nibbler")
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("p6regex")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "}", rx689_fail
-    add rx689_pos, 1
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "}", rx692_fail
+    add rx692_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ENDSTMT"()
-    unless $P10, rx689_fail
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt694_end:
-.annotate "line", 330
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ENDSTMT"()
+    unless $P10, rx692_fail
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt697_end:
+.annotate "line", 334
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 316
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 320
   # rx pass
-    rx689_cur."!cursor_pass"(rx689_pos, "regex_declarator")
-    rx689_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx689_pos)
-    .return (rx689_cur)
-  rx689_fail:
+    rx692_cur."!cursor_pass"(rx692_pos, "regex_declarator")
+    rx692_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx692_pos)
+    .return (rx692_cur)
+  rx692_fail:
 .annotate "line", 4
-    (rx689_rep, rx689_pos, $I10, $P10) = rx689_cur."!mark_fail"(0)
-    lt rx689_pos, -1, rx689_done
-    eq rx689_pos, -1, rx689_fail
+    (rx692_rep, rx692_pos, $I10, $P10) = rx692_cur."!mark_fail"(0)
+    lt rx692_pos, -1, rx692_done
+    eq rx692_pos, -1, rx692_fail
     jump $I10
-  rx689_done:
-    rx689_cur."!cursor_fail"()
-    rx689_cur."!cursor_debug"("FAIL  ", "regex_declarator")
-    .return (rx689_cur)
+  rx692_done:
+    rx692_cur."!cursor_fail"()
+    rx692_cur."!cursor_debug"("FAIL  ", "regex_declarator")
+    .return (rx692_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__regex_declarator"  :subid("164_1267204702.05125") :method
+.sub "!PREFIX__regex_declarator"  :subid("164_1271336396.90314") :method
 .annotate "line", 4
-    new $P691, "ResizablePMCArray"
-    push $P691, ""
-    .return ($P691)
+    new $P694, "ResizablePMCArray"
+    push $P694, ""
+    .return ($P694)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "dotty"  :subid("165_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "dotty"  :subid("165_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx726_tgt
-    .local int rx726_pos
-    .local int rx726_off
-    .local int rx726_eos
-    .local int rx726_rep
-    .local pmc rx726_cur
-    (rx726_cur, rx726_pos, rx726_tgt) = self."!cursor_start"()
-    rx726_cur."!cursor_debug"("START ", "dotty")
-    rx726_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx726_cur
+    .local string rx729_tgt
+    .local int rx729_pos
+    .local int rx729_off
+    .local int rx729_eos
+    .local int rx729_rep
+    .local pmc rx729_cur
+    (rx729_cur, rx729_pos, rx729_tgt) = self."!cursor_start"()
+    rx729_cur."!cursor_debug"("START ", "dotty")
+    rx729_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx729_cur
     .local pmc match
     .lex "$/", match
-    length rx726_eos, rx726_tgt
-    set rx726_off, 0
-    lt rx726_pos, 2, rx726_start
-    sub rx726_off, rx726_pos, 1
-    substr rx726_tgt, rx726_tgt, rx726_off
-  rx726_start:
+    length rx729_eos, rx729_tgt
+    set rx729_off, 0
+    lt rx729_pos, 2, rx729_start
+    sub rx729_off, rx729_pos, 1
+    substr rx729_tgt, rx729_tgt, rx729_off
+  rx729_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan730_done
-    goto rxscan730_scan
-  rxscan730_loop:
-    ($P10) = rx726_cur."from"()
+    ne $I10, -1, rxscan733_done
+    goto rxscan733_scan
+  rxscan733_loop:
+    ($P10) = rx729_cur."from"()
     inc $P10
-    set rx726_pos, $P10
-    ge rx726_pos, rx726_eos, rxscan730_done
-  rxscan730_scan:
-    set_addr $I10, rxscan730_loop
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
-  rxscan730_done:
-.annotate "line", 334
+    set rx729_pos, $P10
+    ge rx729_pos, rx729_eos, rxscan733_done
+  rxscan733_scan:
+    set_addr $I10, rxscan733_loop
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
+  rxscan733_done:
+.annotate "line", 338
   # rx literal  "."
-    add $I11, rx726_pos, 1
-    gt $I11, rx726_eos, rx726_fail
-    sub $I11, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I11, 1
-    ne $S10, ".", rx726_fail
-    add rx726_pos, 1
-  alt731_0:
-.annotate "line", 335
-    set_addr $I10, alt731_1
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
+    add $I11, rx729_pos, 1
+    gt $I11, rx729_eos, rx729_fail
+    sub $I11, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I11, 1
+    ne $S10, ".", rx729_fail
+    add rx729_pos, 1
+  alt734_0:
+.annotate "line", 339
+    set_addr $I10, alt734_1
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
   # rx subrule "identifier" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."identifier"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."identifier"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname=identifier")
-    rx726_pos = $P10."pos"()
-    goto alt731_end
-  alt731_1:
-.annotate "line", 336
+    rx729_pos = $P10."pos"()
+    goto alt734_end
+  alt734_1:
+.annotate "line", 340
   # rx enumcharlist negate=0 zerowidth
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I10, 1
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I10, 1
     index $I11, "'\"", $S10
-    lt $I11, 0, rx726_fail
+    lt $I11, 0, rx729_fail
   # rx subrule "quote" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."quote"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."quote"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx726_pos = $P10."pos"()
-  alt732_0:
-.annotate "line", 337
-    set_addr $I10, alt732_1
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
+    rx729_pos = $P10."pos"()
+  alt735_0:
+.annotate "line", 341
+    set_addr $I10, alt735_1
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I10, 1
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx726_fail
-    goto alt732_end
-  alt732_1:
+    lt $I11, 0, rx729_fail
+    goto alt735_end
+  alt735_1:
   # rx subrule "panic" subtype=method negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."panic"("Quoted method name requires parenthesized arguments")
-    unless $P10, rx726_fail
-    rx726_pos = $P10."pos"()
-  alt732_end:
-  alt731_end:
-.annotate "line", 343
-  # rx rxquantr733 ** 0..1
-    set_addr $I735, rxquantr733_done
-    rx726_cur."!mark_push"(0, rx726_pos, $I735)
-  rxquantr733_loop:
-  alt734_0:
-.annotate "line", 340
-    set_addr $I10, alt734_1
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
-.annotate "line", 341
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."panic"("Quoted method name requires parenthesized arguments")
+    unless $P10, rx729_fail
+    rx729_pos = $P10."pos"()
+  alt735_end:
+  alt734_end:
+.annotate "line", 347
+  # rx rxquantr736 ** 0..1
+    set_addr $I738, rxquantr736_done
+    rx729_cur."!mark_push"(0, rx729_pos, $I738)
+  rxquantr736_loop:
+  alt737_0:
+.annotate "line", 344
+    set_addr $I10, alt737_1
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
+.annotate "line", 345
   # rx enumcharlist negate=0 zerowidth
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I10, 1
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx726_fail
+    lt $I11, 0, rx729_fail
   # rx subrule "args" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."args"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."args"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx726_pos = $P10."pos"()
-    goto alt734_end
-  alt734_1:
-.annotate "line", 342
+    rx729_pos = $P10."pos"()
+    goto alt737_end
+  alt737_1:
+.annotate "line", 346
   # rx literal  ":"
-    add $I11, rx726_pos, 1
-    gt $I11, rx726_eos, rx726_fail
-    sub $I11, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I11, 1
-    ne $S10, ":", rx726_fail
-    add rx726_pos, 1
+    add $I11, rx729_pos, 1
+    gt $I11, rx729_eos, rx729_fail
+    sub $I11, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I11, 1
+    ne $S10, ":", rx729_fail
+    add rx729_pos, 1
   # rx charclass s
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    is_cclass $I11, 32, rx726_tgt, $I10
-    unless $I11, rx726_fail
-    inc rx726_pos
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    is_cclass $I11, 32, rx729_tgt, $I10
+    unless $I11, rx729_fail
+    inc rx729_pos
   # rx subrule "arglist" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."arglist"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."arglist"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx726_pos = $P10."pos"()
-  alt734_end:
-.annotate "line", 343
-    (rx726_rep) = rx726_cur."!mark_commit"($I735)
-  rxquantr733_done:
-.annotate "line", 333
+    rx729_pos = $P10."pos"()
+  alt737_end:
+.annotate "line", 347
+    (rx729_rep) = rx729_cur."!mark_commit"($I738)
+  rxquantr736_done:
+.annotate "line", 337
   # rx pass
-    rx726_cur."!cursor_pass"(rx726_pos, "dotty")
-    rx726_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx726_pos)
-    .return (rx726_cur)
-  rx726_fail:
+    rx729_cur."!cursor_pass"(rx729_pos, "dotty")
+    rx729_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx729_pos)
+    .return (rx729_cur)
+  rx729_fail:
 .annotate "line", 4
-    (rx726_rep, rx726_pos, $I10, $P10) = rx726_cur."!mark_fail"(0)
-    lt rx726_pos, -1, rx726_done
-    eq rx726_pos, -1, rx726_fail
+    (rx729_rep, rx729_pos, $I10, $P10) = rx729_cur."!mark_fail"(0)
+    lt rx729_pos, -1, rx729_done
+    eq rx729_pos, -1, rx729_fail
     jump $I10
-  rx726_done:
-    rx726_cur."!cursor_fail"()
-    rx726_cur."!cursor_debug"("FAIL  ", "dotty")
-    .return (rx726_cur)
+  rx729_done:
+    rx729_cur."!cursor_fail"()
+    rx729_cur."!cursor_debug"("FAIL  ", "dotty")
+    .return (rx729_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__dotty"  :subid("166_1267204702.05125") :method
+.sub "!PREFIX__dotty"  :subid("166_1271336396.90314") :method
 .annotate "line", 4
-    $P728 = self."!PREFIX__!subrule"("longname=identifier", ".")
-    new $P729, "ResizablePMCArray"
-    push $P729, "'"
-    push $P729, "\""
-    push $P729, $P728
-    .return ($P729)
+    $P731 = self."!PREFIX__!subrule"("longname=identifier", ".")
+    new $P732, "ResizablePMCArray"
+    push $P732, "'"
+    push $P732, "\""
+    push $P732, $P731
+    .return ($P732)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term"  :subid("167_1267204702.05125") :method
-.annotate "line", 347
-    $P737 = self."!protoregex"("term")
-    .return ($P737)
+.sub "term"  :subid("167_1271336396.90314") :method
+.annotate "line", 351
+    $P740 = self."!protoregex"("term")
+    .return ($P740)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term"  :subid("168_1267204702.05125") :method
-.annotate "line", 347
-    $P739 = self."!PREFIX__!protoregex"("term")
-    .return ($P739)
+.sub "!PREFIX__term"  :subid("168_1271336396.90314") :method
+.annotate "line", 351
+    $P742 = self."!PREFIX__!protoregex"("term")
+    .return ($P742)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<self>"  :subid("169_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<self>"  :subid("169_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx741_tgt
-    .local int rx741_pos
-    .local int rx741_off
-    .local int rx741_eos
-    .local int rx741_rep
-    .local pmc rx741_cur
-    (rx741_cur, rx741_pos, rx741_tgt) = self."!cursor_start"()
-    rx741_cur."!cursor_debug"("START ", "term:sym<self>")
-    .lex unicode:"$\x{a2}", rx741_cur
-    .local pmc match
-    .lex "$/", match
-    length rx741_eos, rx741_tgt
-    set rx741_off, 0
-    lt rx741_pos, 2, rx741_start
-    sub rx741_off, rx741_pos, 1
-    substr rx741_tgt, rx741_tgt, rx741_off
-  rx741_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan744_done
-    goto rxscan744_scan
-  rxscan744_loop:
-    ($P10) = rx741_cur."from"()
-    inc $P10
-    set rx741_pos, $P10
-    ge rx741_pos, rx741_eos, rxscan744_done
-  rxscan744_scan:
-    set_addr $I10, rxscan744_loop
-    rx741_cur."!mark_push"(0, rx741_pos, $I10)
-  rxscan744_done:
-.annotate "line", 349
+    .local string rx744_tgt
+    .local int rx744_pos
+    .local int rx744_off
+    .local int rx744_eos
+    .local int rx744_rep
+    .local pmc rx744_cur
+    (rx744_cur, rx744_pos, rx744_tgt) = self."!cursor_start"()
+    rx744_cur."!cursor_debug"("START ", "term:sym<self>")
+    .lex unicode:"$\x{a2}", rx744_cur
+    .local pmc match
+    .lex "$/", match
+    length rx744_eos, rx744_tgt
+    set rx744_off, 0
+    lt rx744_pos, 2, rx744_start
+    sub rx744_off, rx744_pos, 1
+    substr rx744_tgt, rx744_tgt, rx744_off
+  rx744_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan747_done
+    goto rxscan747_scan
+  rxscan747_loop:
+    ($P10) = rx744_cur."from"()
+    inc $P10
+    set rx744_pos, $P10
+    ge rx744_pos, rx744_eos, rxscan747_done
+  rxscan747_scan:
+    set_addr $I10, rxscan747_loop
+    rx744_cur."!mark_push"(0, rx744_pos, $I10)
+  rxscan747_done:
+.annotate "line", 353
   # rx subcapture "sym"
-    set_addr $I10, rxcap_745_fail
-    rx741_cur."!mark_push"(0, rx741_pos, $I10)
+    set_addr $I10, rxcap_748_fail
+    rx744_cur."!mark_push"(0, rx744_pos, $I10)
   # rx literal  "self"
-    add $I11, rx741_pos, 4
-    gt $I11, rx741_eos, rx741_fail
-    sub $I11, rx741_pos, rx741_off
-    substr $S10, rx741_tgt, $I11, 4
-    ne $S10, "self", rx741_fail
-    add rx741_pos, 4
-    set_addr $I10, rxcap_745_fail
-    ($I12, $I11) = rx741_cur."!mark_peek"($I10)
-    rx741_cur."!cursor_pos"($I11)
-    ($P10) = rx741_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx741_pos, "")
-    rx741_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx744_pos, 4
+    gt $I11, rx744_eos, rx744_fail
+    sub $I11, rx744_pos, rx744_off
+    substr $S10, rx744_tgt, $I11, 4
+    ne $S10, "self", rx744_fail
+    add rx744_pos, 4
+    set_addr $I10, rxcap_748_fail
+    ($I12, $I11) = rx744_cur."!mark_peek"($I10)
+    rx744_cur."!cursor_pos"($I11)
+    ($P10) = rx744_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx744_pos, "")
+    rx744_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_745_done
-  rxcap_745_fail:
-    goto rx741_fail
-  rxcap_745_done:
+    goto rxcap_748_done
+  rxcap_748_fail:
+    goto rx744_fail
+  rxcap_748_done:
   # rxanchor rwb
-    le rx741_pos, 0, rx741_fail
-    sub $I10, rx741_pos, rx741_off
-    is_cclass $I11, 8192, rx741_tgt, $I10
-    if $I11, rx741_fail
+    le rx744_pos, 0, rx744_fail
+    sub $I10, rx744_pos, rx744_off
+    is_cclass $I11, 8192, rx744_tgt, $I10
+    if $I11, rx744_fail
     dec $I10
-    is_cclass $I11, 8192, rx741_tgt, $I10
-    unless $I11, rx741_fail
+    is_cclass $I11, 8192, rx744_tgt, $I10
+    unless $I11, rx744_fail
   # rx pass
-    rx741_cur."!cursor_pass"(rx741_pos, "term:sym<self>")
-    rx741_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx741_pos)
-    .return (rx741_cur)
-  rx741_fail:
+    rx744_cur."!cursor_pass"(rx744_pos, "term:sym<self>")
+    rx744_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx744_pos)
+    .return (rx744_cur)
+  rx744_fail:
 .annotate "line", 4
-    (rx741_rep, rx741_pos, $I10, $P10) = rx741_cur."!mark_fail"(0)
-    lt rx741_pos, -1, rx741_done
-    eq rx741_pos, -1, rx741_fail
+    (rx744_rep, rx744_pos, $I10, $P10) = rx744_cur."!mark_fail"(0)
+    lt rx744_pos, -1, rx744_done
+    eq rx744_pos, -1, rx744_fail
     jump $I10
-  rx741_done:
-    rx741_cur."!cursor_fail"()
-    rx741_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
-    .return (rx741_cur)
+  rx744_done:
+    rx744_cur."!cursor_fail"()
+    rx744_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
+    .return (rx744_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<self>"  :subid("170_1267204702.05125") :method
+.sub "!PREFIX__term:sym<self>"  :subid("170_1271336396.90314") :method
 .annotate "line", 4
-    new $P743, "ResizablePMCArray"
-    push $P743, "self"
-    .return ($P743)
+    new $P746, "ResizablePMCArray"
+    push $P746, "self"
+    .return ($P746)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<identifier>"  :subid("171_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<identifier>"  :subid("171_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx747_tgt
-    .local int rx747_pos
-    .local int rx747_off
-    .local int rx747_eos
-    .local int rx747_rep
-    .local pmc rx747_cur
-    (rx747_cur, rx747_pos, rx747_tgt) = self."!cursor_start"()
-    rx747_cur."!cursor_debug"("START ", "term:sym<identifier>")
-    .lex unicode:"$\x{a2}", rx747_cur
-    .local pmc match
-    .lex "$/", match
-    length rx747_eos, rx747_tgt
-    set rx747_off, 0
-    lt rx747_pos, 2, rx747_start
-    sub rx747_off, rx747_pos, 1
-    substr rx747_tgt, rx747_tgt, rx747_off
-  rx747_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan751_done
-    goto rxscan751_scan
-  rxscan751_loop:
-    ($P10) = rx747_cur."from"()
-    inc $P10
-    set rx747_pos, $P10
-    ge rx747_pos, rx747_eos, rxscan751_done
-  rxscan751_scan:
-    set_addr $I10, rxscan751_loop
-    rx747_cur."!mark_push"(0, rx747_pos, $I10)
-  rxscan751_done:
-.annotate "line", 352
+    .local string rx750_tgt
+    .local int rx750_pos
+    .local int rx750_off
+    .local int rx750_eos
+    .local int rx750_rep
+    .local pmc rx750_cur
+    (rx750_cur, rx750_pos, rx750_tgt) = self."!cursor_start"()
+    rx750_cur."!cursor_debug"("START ", "term:sym<identifier>")
+    .lex unicode:"$\x{a2}", rx750_cur
+    .local pmc match
+    .lex "$/", match
+    length rx750_eos, rx750_tgt
+    set rx750_off, 0
+    lt rx750_pos, 2, rx750_start
+    sub rx750_off, rx750_pos, 1
+    substr rx750_tgt, rx750_tgt, rx750_off
+  rx750_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan754_done
+    goto rxscan754_scan
+  rxscan754_loop:
+    ($P10) = rx750_cur."from"()
+    inc $P10
+    set rx750_pos, $P10
+    ge rx750_pos, rx750_eos, rxscan754_done
+  rxscan754_scan:
+    set_addr $I10, rxscan754_loop
+    rx750_cur."!mark_push"(0, rx750_pos, $I10)
+  rxscan754_done:
+.annotate "line", 356
   # rx subrule "identifier" subtype=capture negate=
-    rx747_cur."!cursor_pos"(rx747_pos)
-    $P10 = rx747_cur."identifier"()
-    unless $P10, rx747_fail
-    rx747_cur."!mark_push"(0, -1, 0, $P10)
+    rx750_cur."!cursor_pos"(rx750_pos)
+    $P10 = rx750_cur."identifier"()
+    unless $P10, rx750_fail
+    rx750_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx747_pos = $P10."pos"()
+    rx750_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx747_pos, rx747_eos, rx747_fail
-    sub $I10, rx747_pos, rx747_off
-    substr $S10, rx747_tgt, $I10, 1
+    ge rx750_pos, rx750_eos, rx750_fail
+    sub $I10, rx750_pos, rx750_off
+    substr $S10, rx750_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx747_fail
+    lt $I11, 0, rx750_fail
   # rx subrule "args" subtype=capture negate=
-    rx747_cur."!cursor_pos"(rx747_pos)
-    $P10 = rx747_cur."args"()
-    unless $P10, rx747_fail
-    rx747_cur."!mark_push"(0, -1, 0, $P10)
+    rx750_cur."!cursor_pos"(rx750_pos)
+    $P10 = rx750_cur."args"()
+    unless $P10, rx750_fail
+    rx750_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx747_pos = $P10."pos"()
-.annotate "line", 351
+    rx750_pos = $P10."pos"()
+.annotate "line", 355
   # rx pass
-    rx747_cur."!cursor_pass"(rx747_pos, "term:sym<identifier>")
-    rx747_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx747_pos)
-    .return (rx747_cur)
-  rx747_fail:
+    rx750_cur."!cursor_pass"(rx750_pos, "term:sym<identifier>")
+    rx750_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx750_pos)
+    .return (rx750_cur)
+  rx750_fail:
 .annotate "line", 4
-    (rx747_rep, rx747_pos, $I10, $P10) = rx747_cur."!mark_fail"(0)
-    lt rx747_pos, -1, rx747_done
-    eq rx747_pos, -1, rx747_fail
+    (rx750_rep, rx750_pos, $I10, $P10) = rx750_cur."!mark_fail"(0)
+    lt rx750_pos, -1, rx750_done
+    eq rx750_pos, -1, rx750_fail
     jump $I10
-  rx747_done:
-    rx747_cur."!cursor_fail"()
-    rx747_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
-    .return (rx747_cur)
+  rx750_done:
+    rx750_cur."!cursor_fail"()
+    rx750_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
+    .return (rx750_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<identifier>"  :subid("172_1267204702.05125") :method
+.sub "!PREFIX__term:sym<identifier>"  :subid("172_1271336396.90314") :method
 .annotate "line", 4
-    $P749 = self."!PREFIX__!subrule"("identifier", "")
-    new $P750, "ResizablePMCArray"
-    push $P750, $P749
-    .return ($P750)
+    $P752 = self."!PREFIX__!subrule"("identifier", "")
+    new $P753, "ResizablePMCArray"
+    push $P753, $P752
+    .return ($P753)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<name>"  :subid("173_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<name>"  :subid("173_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx753_tgt
-    .local int rx753_pos
-    .local int rx753_off
-    .local int rx753_eos
-    .local int rx753_rep
-    .local pmc rx753_cur
-    (rx753_cur, rx753_pos, rx753_tgt) = self."!cursor_start"()
-    rx753_cur."!cursor_debug"("START ", "term:sym<name>")
-    rx753_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx753_cur
+    .local string rx756_tgt
+    .local int rx756_pos
+    .local int rx756_off
+    .local int rx756_eos
+    .local int rx756_rep
+    .local pmc rx756_cur
+    (rx756_cur, rx756_pos, rx756_tgt) = self."!cursor_start"()
+    rx756_cur."!cursor_debug"("START ", "term:sym<name>")
+    rx756_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx756_cur
     .local pmc match
     .lex "$/", match
-    length rx753_eos, rx753_tgt
-    set rx753_off, 0
-    lt rx753_pos, 2, rx753_start
-    sub rx753_off, rx753_pos, 1
-    substr rx753_tgt, rx753_tgt, rx753_off
-  rx753_start:
+    length rx756_eos, rx756_tgt
+    set rx756_off, 0
+    lt rx756_pos, 2, rx756_start
+    sub rx756_off, rx756_pos, 1
+    substr rx756_tgt, rx756_tgt, rx756_off
+  rx756_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan757_done
-    goto rxscan757_scan
-  rxscan757_loop:
-    ($P10) = rx753_cur."from"()
+    ne $I10, -1, rxscan760_done
+    goto rxscan760_scan
+  rxscan760_loop:
+    ($P10) = rx756_cur."from"()
     inc $P10
-    set rx753_pos, $P10
-    ge rx753_pos, rx753_eos, rxscan757_done
-  rxscan757_scan:
-    set_addr $I10, rxscan757_loop
-    rx753_cur."!mark_push"(0, rx753_pos, $I10)
-  rxscan757_done:
-.annotate "line", 356
+    set rx756_pos, $P10
+    ge rx756_pos, rx756_eos, rxscan760_done
+  rxscan760_scan:
+    set_addr $I10, rxscan760_loop
+    rx756_cur."!mark_push"(0, rx756_pos, $I10)
+  rxscan760_done:
+.annotate "line", 360
   # rx subrule "name" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."name"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
+    rx756_cur."!cursor_pos"(rx756_pos)
+    $P10 = rx756_cur."name"()
+    unless $P10, rx756_fail
+    rx756_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx753_pos = $P10."pos"()
-  # rx rxquantr758 ** 0..1
-    set_addr $I759, rxquantr758_done
-    rx753_cur."!mark_push"(0, rx753_pos, $I759)
-  rxquantr758_loop:
+    rx756_pos = $P10."pos"()
+  # rx rxquantr761 ** 0..1
+    set_addr $I762, rxquantr761_done
+    rx756_cur."!mark_push"(0, rx756_pos, $I762)
+  rxquantr761_loop:
   # rx subrule "args" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."args"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
+    rx756_cur."!cursor_pos"(rx756_pos)
+    $P10 = rx756_cur."args"()
+    unless $P10, rx756_fail
+    rx756_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx753_pos = $P10."pos"()
-    (rx753_rep) = rx753_cur."!mark_commit"($I759)
-  rxquantr758_done:
-.annotate "line", 355
+    rx756_pos = $P10."pos"()
+    (rx756_rep) = rx756_cur."!mark_commit"($I762)
+  rxquantr761_done:
+.annotate "line", 359
   # rx pass
-    rx753_cur."!cursor_pass"(rx753_pos, "term:sym<name>")
-    rx753_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx753_pos)
-    .return (rx753_cur)
-  rx753_fail:
+    rx756_cur."!cursor_pass"(rx756_pos, "term:sym<name>")
+    rx756_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx756_pos)
+    .return (rx756_cur)
+  rx756_fail:
 .annotate "line", 4
-    (rx753_rep, rx753_pos, $I10, $P10) = rx753_cur."!mark_fail"(0)
-    lt rx753_pos, -1, rx753_done
-    eq rx753_pos, -1, rx753_fail
+    (rx756_rep, rx756_pos, $I10, $P10) = rx756_cur."!mark_fail"(0)
+    lt rx756_pos, -1, rx756_done
+    eq rx756_pos, -1, rx756_fail
     jump $I10
-  rx753_done:
-    rx753_cur."!cursor_fail"()
-    rx753_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
-    .return (rx753_cur)
+  rx756_done:
+    rx756_cur."!cursor_fail"()
+    rx756_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
+    .return (rx756_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<name>"  :subid("174_1267204702.05125") :method
+.sub "!PREFIX__term:sym<name>"  :subid("174_1271336396.90314") :method
 .annotate "line", 4
-    $P755 = self."!PREFIX__!subrule"("name", "")
-    new $P756, "ResizablePMCArray"
-    push $P756, $P755
-    .return ($P756)
+    $P758 = self."!PREFIX__!subrule"("name", "")
+    new $P759, "ResizablePMCArray"
+    push $P759, $P758
+    .return ($P759)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<pir::op>"  :subid("175_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<pir::op>"  :subid("175_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx761_tgt
-    .local int rx761_pos
-    .local int rx761_off
-    .local int rx761_eos
-    .local int rx761_rep
-    .local pmc rx761_cur
-    (rx761_cur, rx761_pos, rx761_tgt) = self."!cursor_start"()
-    rx761_cur."!cursor_debug"("START ", "term:sym<pir::op>")
-    rx761_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx761_cur
-    .local pmc match
-    .lex "$/", match
-    length rx761_eos, rx761_tgt
-    set rx761_off, 0
-    lt rx761_pos, 2, rx761_start
-    sub rx761_off, rx761_pos, 1
-    substr rx761_tgt, rx761_tgt, rx761_off
-  rx761_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan764_done
-    goto rxscan764_scan
-  rxscan764_loop:
-    ($P10) = rx761_cur."from"()
-    inc $P10
-    set rx761_pos, $P10
-    ge rx761_pos, rx761_eos, rxscan764_done
-  rxscan764_scan:
-    set_addr $I10, rxscan764_loop
-    rx761_cur."!mark_push"(0, rx761_pos, $I10)
-  rxscan764_done:
-.annotate "line", 360
+    .local string rx764_tgt
+    .local int rx764_pos
+    .local int rx764_off
+    .local int rx764_eos
+    .local int rx764_rep
+    .local pmc rx764_cur
+    (rx764_cur, rx764_pos, rx764_tgt) = self."!cursor_start"()
+    rx764_cur."!cursor_debug"("START ", "term:sym<pir::op>")
+    rx764_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx764_cur
+    .local pmc match
+    .lex "$/", match
+    length rx764_eos, rx764_tgt
+    set rx764_off, 0
+    lt rx764_pos, 2, rx764_start
+    sub rx764_off, rx764_pos, 1
+    substr rx764_tgt, rx764_tgt, rx764_off
+  rx764_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan767_done
+    goto rxscan767_scan
+  rxscan767_loop:
+    ($P10) = rx764_cur."from"()
+    inc $P10
+    set rx764_pos, $P10
+    ge rx764_pos, rx764_eos, rxscan767_done
+  rxscan767_scan:
+    set_addr $I10, rxscan767_loop
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  rxscan767_done:
+.annotate "line", 364
   # rx literal  "pir::"
-    add $I11, rx761_pos, 5
-    gt $I11, rx761_eos, rx761_fail
-    sub $I11, rx761_pos, rx761_off
-    substr $S10, rx761_tgt, $I11, 5
-    ne $S10, "pir::", rx761_fail
-    add rx761_pos, 5
+    add $I11, rx764_pos, 5
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 5
+    ne $S10, "pir::", rx764_fail
+    add rx764_pos, 5
   # rx subcapture "op"
-    set_addr $I10, rxcap_765_fail
-    rx761_cur."!mark_push"(0, rx761_pos, $I10)
+    set_addr $I10, rxcap_768_fail
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx761_pos, rx761_off
-    find_not_cclass $I11, 8192, rx761_tgt, $I10, rx761_eos
+    sub $I10, rx764_pos, rx764_off
+    find_not_cclass $I11, 8192, rx764_tgt, $I10, rx764_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx761_fail
-    add rx761_pos, rx761_off, $I11
-    set_addr $I10, rxcap_765_fail
-    ($I12, $I11) = rx761_cur."!mark_peek"($I10)
-    rx761_cur."!cursor_pos"($I11)
-    ($P10) = rx761_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx761_pos, "")
-    rx761_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx764_fail
+    add rx764_pos, rx764_off, $I11
+    set_addr $I10, rxcap_768_fail
+    ($I12, $I11) = rx764_cur."!mark_peek"($I10)
+    rx764_cur."!cursor_pos"($I11)
+    ($P10) = rx764_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx764_pos, "")
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("op")
-    goto rxcap_765_done
-  rxcap_765_fail:
-    goto rx761_fail
-  rxcap_765_done:
-  # rx rxquantr766 ** 0..1
-    set_addr $I767, rxquantr766_done
-    rx761_cur."!mark_push"(0, rx761_pos, $I767)
-  rxquantr766_loop:
+    goto rxcap_768_done
+  rxcap_768_fail:
+    goto rx764_fail
+  rxcap_768_done:
+  # rx rxquantr769 ** 0..1
+    set_addr $I770, rxquantr769_done
+    rx764_cur."!mark_push"(0, rx764_pos, $I770)
+  rxquantr769_loop:
   # rx subrule "args" subtype=capture negate=
-    rx761_cur."!cursor_pos"(rx761_pos)
-    $P10 = rx761_cur."args"()
-    unless $P10, rx761_fail
-    rx761_cur."!mark_push"(0, -1, 0, $P10)
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."args"()
+    unless $P10, rx764_fail
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx761_pos = $P10."pos"()
-    (rx761_rep) = rx761_cur."!mark_commit"($I767)
-  rxquantr766_done:
-.annotate "line", 359
+    rx764_pos = $P10."pos"()
+    (rx764_rep) = rx764_cur."!mark_commit"($I770)
+  rxquantr769_done:
+.annotate "line", 363
   # rx pass
-    rx761_cur."!cursor_pass"(rx761_pos, "term:sym<pir::op>")
-    rx761_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx761_pos)
-    .return (rx761_cur)
-  rx761_fail:
+    rx764_cur."!cursor_pass"(rx764_pos, "term:sym<pir::op>")
+    rx764_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx764_pos)
+    .return (rx764_cur)
+  rx764_fail:
 .annotate "line", 4
-    (rx761_rep, rx761_pos, $I10, $P10) = rx761_cur."!mark_fail"(0)
-    lt rx761_pos, -1, rx761_done
-    eq rx761_pos, -1, rx761_fail
+    (rx764_rep, rx764_pos, $I10, $P10) = rx764_cur."!mark_fail"(0)
+    lt rx764_pos, -1, rx764_done
+    eq rx764_pos, -1, rx764_fail
     jump $I10
-  rx761_done:
-    rx761_cur."!cursor_fail"()
-    rx761_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
-    .return (rx761_cur)
+  rx764_done:
+    rx764_cur."!cursor_fail"()
+    rx764_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
+    .return (rx764_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<pir::op>"  :subid("176_1267204702.05125") :method
+.sub "!PREFIX__term:sym<pir::op>"  :subid("176_1271336396.90314") :method
 .annotate "line", 4
-    new $P763, "ResizablePMCArray"
-    push $P763, "pir::"
-    .return ($P763)
+    new $P766, "ResizablePMCArray"
+    push $P766, "pir::"
+    .return ($P766)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "args"  :subid("177_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "args"  :subid("177_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx769_tgt
-    .local int rx769_pos
-    .local int rx769_off
-    .local int rx769_eos
-    .local int rx769_rep
-    .local pmc rx769_cur
-    (rx769_cur, rx769_pos, rx769_tgt) = self."!cursor_start"()
-    rx769_cur."!cursor_debug"("START ", "args")
-    .lex unicode:"$\x{a2}", rx769_cur
-    .local pmc match
-    .lex "$/", match
-    length rx769_eos, rx769_tgt
-    set rx769_off, 0
-    lt rx769_pos, 2, rx769_start
-    sub rx769_off, rx769_pos, 1
-    substr rx769_tgt, rx769_tgt, rx769_off
-  rx769_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan773_done
-    goto rxscan773_scan
-  rxscan773_loop:
-    ($P10) = rx769_cur."from"()
-    inc $P10
-    set rx769_pos, $P10
-    ge rx769_pos, rx769_eos, rxscan773_done
-  rxscan773_scan:
-    set_addr $I10, rxscan773_loop
-    rx769_cur."!mark_push"(0, rx769_pos, $I10)
-  rxscan773_done:
-.annotate "line", 364
+    .local string rx772_tgt
+    .local int rx772_pos
+    .local int rx772_off
+    .local int rx772_eos
+    .local int rx772_rep
+    .local pmc rx772_cur
+    (rx772_cur, rx772_pos, rx772_tgt) = self."!cursor_start"()
+    rx772_cur."!cursor_debug"("START ", "args")
+    .lex unicode:"$\x{a2}", rx772_cur
+    .local pmc match
+    .lex "$/", match
+    length rx772_eos, rx772_tgt
+    set rx772_off, 0
+    lt rx772_pos, 2, rx772_start
+    sub rx772_off, rx772_pos, 1
+    substr rx772_tgt, rx772_tgt, rx772_off
+  rx772_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan776_done
+    goto rxscan776_scan
+  rxscan776_loop:
+    ($P10) = rx772_cur."from"()
+    inc $P10
+    set rx772_pos, $P10
+    ge rx772_pos, rx772_eos, rxscan776_done
+  rxscan776_scan:
+    set_addr $I10, rxscan776_loop
+    rx772_cur."!mark_push"(0, rx772_pos, $I10)
+  rxscan776_done:
+.annotate "line", 368
   # rx literal  "("
-    add $I11, rx769_pos, 1
-    gt $I11, rx769_eos, rx769_fail
-    sub $I11, rx769_pos, rx769_off
-    substr $S10, rx769_tgt, $I11, 1
-    ne $S10, "(", rx769_fail
-    add rx769_pos, 1
+    add $I11, rx772_pos, 1
+    gt $I11, rx772_eos, rx772_fail
+    sub $I11, rx772_pos, rx772_off
+    substr $S10, rx772_tgt, $I11, 1
+    ne $S10, "(", rx772_fail
+    add rx772_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx769_cur."!cursor_pos"(rx769_pos)
-    $P10 = rx769_cur."arglist"()
-    unless $P10, rx769_fail
-    rx769_cur."!mark_push"(0, -1, 0, $P10)
+    rx772_cur."!cursor_pos"(rx772_pos)
+    $P10 = rx772_cur."arglist"()
+    unless $P10, rx772_fail
+    rx772_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx769_pos = $P10."pos"()
+    rx772_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx769_pos, 1
-    gt $I11, rx769_eos, rx769_fail
-    sub $I11, rx769_pos, rx769_off
-    substr $S10, rx769_tgt, $I11, 1
-    ne $S10, ")", rx769_fail
-    add rx769_pos, 1
-  # rx pass
-    rx769_cur."!cursor_pass"(rx769_pos, "args")
-    rx769_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx769_pos)
-    .return (rx769_cur)
-  rx769_fail:
-.annotate "line", 4
-    (rx769_rep, rx769_pos, $I10, $P10) = rx769_cur."!mark_fail"(0)
-    lt rx769_pos, -1, rx769_done
-    eq rx769_pos, -1, rx769_fail
-    jump $I10
-  rx769_done:
-    rx769_cur."!cursor_fail"()
-    rx769_cur."!cursor_debug"("FAIL  ", "args")
-    .return (rx769_cur)
+    add $I11, rx772_pos, 1
+    gt $I11, rx772_eos, rx772_fail
+    sub $I11, rx772_pos, rx772_off
+    substr $S10, rx772_tgt, $I11, 1
+    ne $S10, ")", rx772_fail
+    add rx772_pos, 1
+  # rx pass
+    rx772_cur."!cursor_pass"(rx772_pos, "args")
+    rx772_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx772_pos)
+    .return (rx772_cur)
+  rx772_fail:
+.annotate "line", 4
+    (rx772_rep, rx772_pos, $I10, $P10) = rx772_cur."!mark_fail"(0)
+    lt rx772_pos, -1, rx772_done
+    eq rx772_pos, -1, rx772_fail
+    jump $I10
+  rx772_done:
+    rx772_cur."!cursor_fail"()
+    rx772_cur."!cursor_debug"("FAIL  ", "args")
+    .return (rx772_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__args"  :subid("178_1267204702.05125") :method
-.annotate "line", 4
-    $P771 = self."!PREFIX__!subrule"("arglist", "(")
-    new $P772, "ResizablePMCArray"
-    push $P772, $P771
-    .return ($P772)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "arglist"  :subid("179_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx775_tgt
-    .local int rx775_pos
-    .local int rx775_off
-    .local int rx775_eos
-    .local int rx775_rep
-    .local pmc rx775_cur
-    (rx775_cur, rx775_pos, rx775_tgt) = self."!cursor_start"()
-    rx775_cur."!cursor_debug"("START ", "arglist")
-    .lex unicode:"$\x{a2}", rx775_cur
-    .local pmc match
-    .lex "$/", match
-    length rx775_eos, rx775_tgt
-    set rx775_off, 0
-    lt rx775_pos, 2, rx775_start
-    sub rx775_off, rx775_pos, 1
-    substr rx775_tgt, rx775_tgt, rx775_off
-  rx775_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan779_done
-    goto rxscan779_scan
-  rxscan779_loop:
-    ($P10) = rx775_cur."from"()
-    inc $P10
-    set rx775_pos, $P10
-    ge rx775_pos, rx775_eos, rxscan779_done
-  rxscan779_scan:
-    set_addr $I10, rxscan779_loop
-    rx775_cur."!mark_push"(0, rx775_pos, $I10)
-  rxscan779_done:
-.annotate "line", 368
-  # rx subrule "ws" subtype=method negate=
-    rx775_cur."!cursor_pos"(rx775_pos)
-    $P10 = rx775_cur."ws"()
-    unless $P10, rx775_fail
-    rx775_pos = $P10."pos"()
-  alt780_0:
-.annotate "line", 369
-    set_addr $I10, alt780_1
-    rx775_cur."!mark_push"(0, rx775_pos, $I10)
-.annotate "line", 370
+.sub "!PREFIX__args"  :subid("178_1271336396.90314") :method
+.annotate "line", 4
+    $P774 = self."!PREFIX__!subrule"("arglist", "(")
+    new $P775, "ResizablePMCArray"
+    push $P775, $P774
+    .return ($P775)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "arglist"  :subid("179_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 4
+    .local string rx778_tgt
+    .local int rx778_pos
+    .local int rx778_off
+    .local int rx778_eos
+    .local int rx778_rep
+    .local pmc rx778_cur
+    (rx778_cur, rx778_pos, rx778_tgt) = self."!cursor_start"()
+    rx778_cur."!cursor_debug"("START ", "arglist")
+    .lex unicode:"$\x{a2}", rx778_cur
+    .local pmc match
+    .lex "$/", match
+    length rx778_eos, rx778_tgt
+    set rx778_off, 0
+    lt rx778_pos, 2, rx778_start
+    sub rx778_off, rx778_pos, 1
+    substr rx778_tgt, rx778_tgt, rx778_off
+  rx778_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan782_done
+    goto rxscan782_scan
+  rxscan782_loop:
+    ($P10) = rx778_cur."from"()
+    inc $P10
+    set rx778_pos, $P10
+    ge rx778_pos, rx778_eos, rxscan782_done
+  rxscan782_scan:
+    set_addr $I10, rxscan782_loop
+    rx778_cur."!mark_push"(0, rx778_pos, $I10)
+  rxscan782_done:
+.annotate "line", 372
+  # rx subrule "ws" subtype=method negate=
+    rx778_cur."!cursor_pos"(rx778_pos)
+    $P10 = rx778_cur."ws"()
+    unless $P10, rx778_fail
+    rx778_pos = $P10."pos"()
+  alt783_0:
+.annotate "line", 373
+    set_addr $I10, alt783_1
+    rx778_cur."!mark_push"(0, rx778_pos, $I10)
+.annotate "line", 374
   # rx subrule "EXPR" subtype=capture negate=
-    rx775_cur."!cursor_pos"(rx775_pos)
-    $P10 = rx775_cur."EXPR"("f=")
-    unless $P10, rx775_fail
-    rx775_cur."!mark_push"(0, -1, 0, $P10)
+    rx778_cur."!cursor_pos"(rx778_pos)
+    $P10 = rx778_cur."EXPR"("f=")
+    unless $P10, rx778_fail
+    rx778_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx775_pos = $P10."pos"()
-    goto alt780_end
-  alt780_1:
-  alt780_end:
-.annotate "line", 367
+    rx778_pos = $P10."pos"()
+    goto alt783_end
+  alt783_1:
+  alt783_end:
+.annotate "line", 371
   # rx pass
-    rx775_cur."!cursor_pass"(rx775_pos, "arglist")
-    rx775_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx775_pos)
-    .return (rx775_cur)
-  rx775_fail:
+    rx778_cur."!cursor_pass"(rx778_pos, "arglist")
+    rx778_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx778_pos)
+    .return (rx778_cur)
+  rx778_fail:
 .annotate "line", 4
-    (rx775_rep, rx775_pos, $I10, $P10) = rx775_cur."!mark_fail"(0)
-    lt rx775_pos, -1, rx775_done
-    eq rx775_pos, -1, rx775_fail
+    (rx778_rep, rx778_pos, $I10, $P10) = rx778_cur."!mark_fail"(0)
+    lt rx778_pos, -1, rx778_done
+    eq rx778_pos, -1, rx778_fail
     jump $I10
-  rx775_done:
-    rx775_cur."!cursor_fail"()
-    rx775_cur."!cursor_debug"("FAIL  ", "arglist")
-    .return (rx775_cur)
+  rx778_done:
+    rx778_cur."!cursor_fail"()
+    rx778_cur."!cursor_debug"("FAIL  ", "arglist")
+    .return (rx778_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("180_1267204702.05125") :method
+.sub "!PREFIX__arglist"  :subid("180_1271336396.90314") :method
 .annotate "line", 4
-    $P777 = self."!PREFIX__!subrule"("", "")
-    new $P778, "ResizablePMCArray"
-    push $P778, $P777
-    .return ($P778)
+    $P780 = self."!PREFIX__!subrule"("", "")
+    new $P781, "ResizablePMCArray"
+    push $P781, $P780
+    .return ($P781)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<value>"  :subid("181_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<value>"  :subid("181_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx782_tgt
-    .local int rx782_pos
-    .local int rx782_off
-    .local int rx782_eos
-    .local int rx782_rep
-    .local pmc rx782_cur
-    (rx782_cur, rx782_pos, rx782_tgt) = self."!cursor_start"()
-    rx782_cur."!cursor_debug"("START ", "term:sym<value>")
-    .lex unicode:"$\x{a2}", rx782_cur
+    .local string rx785_tgt
+    .local int rx785_pos
+    .local int rx785_off
+    .local int rx785_eos
+    .local int rx785_rep
+    .local pmc rx785_cur
+    (rx785_cur, rx785_pos, rx785_tgt) = self."!cursor_start"()
+    rx785_cur."!cursor_debug"("START ", "term:sym<value>")
+    .lex unicode:"$\x{a2}", rx785_cur
     .local pmc match
     .lex "$/", match
-    length rx782_eos, rx782_tgt
-    set rx782_off, 0
-    lt rx782_pos, 2, rx782_start
-    sub rx782_off, rx782_pos, 1
-    substr rx782_tgt, rx782_tgt, rx782_off
-  rx782_start:
+    length rx785_eos, rx785_tgt
+    set rx785_off, 0
+    lt rx785_pos, 2, rx785_start
+    sub rx785_off, rx785_pos, 1
+    substr rx785_tgt, rx785_tgt, rx785_off
+  rx785_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan786_done
-    goto rxscan786_scan
-  rxscan786_loop:
-    ($P10) = rx782_cur."from"()
+    ne $I10, -1, rxscan789_done
+    goto rxscan789_scan
+  rxscan789_loop:
+    ($P10) = rx785_cur."from"()
     inc $P10
-    set rx782_pos, $P10
-    ge rx782_pos, rx782_eos, rxscan786_done
-  rxscan786_scan:
-    set_addr $I10, rxscan786_loop
-    rx782_cur."!mark_push"(0, rx782_pos, $I10)
-  rxscan786_done:
-.annotate "line", 376
+    set rx785_pos, $P10
+    ge rx785_pos, rx785_eos, rxscan789_done
+  rxscan789_scan:
+    set_addr $I10, rxscan789_loop
+    rx785_cur."!mark_push"(0, rx785_pos, $I10)
+  rxscan789_done:
+.annotate "line", 380
   # rx subrule "value" subtype=capture negate=
-    rx782_cur."!cursor_pos"(rx782_pos)
-    $P10 = rx782_cur."value"()
-    unless $P10, rx782_fail
-    rx782_cur."!mark_push"(0, -1, 0, $P10)
+    rx785_cur."!cursor_pos"(rx785_pos)
+    $P10 = rx785_cur."value"()
+    unless $P10, rx785_fail
+    rx785_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("value")
-    rx782_pos = $P10."pos"()
+    rx785_pos = $P10."pos"()
   # rx pass
-    rx782_cur."!cursor_pass"(rx782_pos, "term:sym<value>")
-    rx782_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx782_pos)
-    .return (rx782_cur)
-  rx782_fail:
+    rx785_cur."!cursor_pass"(rx785_pos, "term:sym<value>")
+    rx785_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx785_pos)
+    .return (rx785_cur)
+  rx785_fail:
 .annotate "line", 4
-    (rx782_rep, rx782_pos, $I10, $P10) = rx782_cur."!mark_fail"(0)
-    lt rx782_pos, -1, rx782_done
-    eq rx782_pos, -1, rx782_fail
+    (rx785_rep, rx785_pos, $I10, $P10) = rx785_cur."!mark_fail"(0)
+    lt rx785_pos, -1, rx785_done
+    eq rx785_pos, -1, rx785_fail
     jump $I10
-  rx782_done:
-    rx782_cur."!cursor_fail"()
-    rx782_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
-    .return (rx782_cur)
+  rx785_done:
+    rx785_cur."!cursor_fail"()
+    rx785_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
+    .return (rx785_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<value>"  :subid("182_1267204702.05125") :method
+.sub "!PREFIX__term:sym<value>"  :subid("182_1271336396.90314") :method
 .annotate "line", 4
-    $P784 = self."!PREFIX__!subrule"("value", "")
-    new $P785, "ResizablePMCArray"
-    push $P785, $P784
-    .return ($P785)
+    $P787 = self."!PREFIX__!subrule"("value", "")
+    new $P788, "ResizablePMCArray"
+    push $P788, $P787
+    .return ($P788)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "value"  :subid("183_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "value"  :subid("183_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx788_tgt
-    .local int rx788_pos
-    .local int rx788_off
-    .local int rx788_eos
-    .local int rx788_rep
-    .local pmc rx788_cur
-    (rx788_cur, rx788_pos, rx788_tgt) = self."!cursor_start"()
-    rx788_cur."!cursor_debug"("START ", "value")
-    .lex unicode:"$\x{a2}", rx788_cur
+    .local string rx791_tgt
+    .local int rx791_pos
+    .local int rx791_off
+    .local int rx791_eos
+    .local int rx791_rep
+    .local pmc rx791_cur
+    (rx791_cur, rx791_pos, rx791_tgt) = self."!cursor_start"()
+    rx791_cur."!cursor_debug"("START ", "value")
+    .lex unicode:"$\x{a2}", rx791_cur
     .local pmc match
     .lex "$/", match
-    length rx788_eos, rx788_tgt
-    set rx788_off, 0
-    lt rx788_pos, 2, rx788_start
-    sub rx788_off, rx788_pos, 1
-    substr rx788_tgt, rx788_tgt, rx788_off
-  rx788_start:
+    length rx791_eos, rx791_tgt
+    set rx791_off, 0
+    lt rx791_pos, 2, rx791_start
+    sub rx791_off, rx791_pos, 1
+    substr rx791_tgt, rx791_tgt, rx791_off
+  rx791_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan793_done
-    goto rxscan793_scan
-  rxscan793_loop:
-    ($P10) = rx788_cur."from"()
+    ne $I10, -1, rxscan796_done
+    goto rxscan796_scan
+  rxscan796_loop:
+    ($P10) = rx791_cur."from"()
     inc $P10
-    set rx788_pos, $P10
-    ge rx788_pos, rx788_eos, rxscan793_done
-  rxscan793_scan:
-    set_addr $I10, rxscan793_loop
-    rx788_cur."!mark_push"(0, rx788_pos, $I10)
-  rxscan793_done:
-  alt794_0:
-.annotate "line", 378
-    set_addr $I10, alt794_1
-    rx788_cur."!mark_push"(0, rx788_pos, $I10)
-.annotate "line", 379
+    set rx791_pos, $P10
+    ge rx791_pos, rx791_eos, rxscan796_done
+  rxscan796_scan:
+    set_addr $I10, rxscan796_loop
+    rx791_cur."!mark_push"(0, rx791_pos, $I10)
+  rxscan796_done:
+  alt797_0:
+.annotate "line", 382
+    set_addr $I10, alt797_1
+    rx791_cur."!mark_push"(0, rx791_pos, $I10)
+.annotate "line", 383
   # rx subrule "quote" subtype=capture negate=
-    rx788_cur."!cursor_pos"(rx788_pos)
-    $P10 = rx788_cur."quote"()
-    unless $P10, rx788_fail
-    rx788_cur."!mark_push"(0, -1, 0, $P10)
+    rx791_cur."!cursor_pos"(rx791_pos)
+    $P10 = rx791_cur."quote"()
+    unless $P10, rx791_fail
+    rx791_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx788_pos = $P10."pos"()
-    goto alt794_end
-  alt794_1:
-.annotate "line", 380
+    rx791_pos = $P10."pos"()
+    goto alt797_end
+  alt797_1:
+.annotate "line", 384
   # rx subrule "number" subtype=capture negate=
-    rx788_cur."!cursor_pos"(rx788_pos)
-    $P10 = rx788_cur."number"()
-    unless $P10, rx788_fail
-    rx788_cur."!mark_push"(0, -1, 0, $P10)
+    rx791_cur."!cursor_pos"(rx791_pos)
+    $P10 = rx791_cur."number"()
+    unless $P10, rx791_fail
+    rx791_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("number")
-    rx788_pos = $P10."pos"()
-  alt794_end:
-.annotate "line", 378
+    rx791_pos = $P10."pos"()
+  alt797_end:
+.annotate "line", 382
   # rx pass
-    rx788_cur."!cursor_pass"(rx788_pos, "value")
-    rx788_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx788_pos)
-    .return (rx788_cur)
-  rx788_fail:
+    rx791_cur."!cursor_pass"(rx791_pos, "value")
+    rx791_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx791_pos)
+    .return (rx791_cur)
+  rx791_fail:
 .annotate "line", 4
-    (rx788_rep, rx788_pos, $I10, $P10) = rx788_cur."!mark_fail"(0)
-    lt rx788_pos, -1, rx788_done
-    eq rx788_pos, -1, rx788_fail
+    (rx791_rep, rx791_pos, $I10, $P10) = rx791_cur."!mark_fail"(0)
+    lt rx791_pos, -1, rx791_done
+    eq rx791_pos, -1, rx791_fail
     jump $I10
-  rx788_done:
-    rx788_cur."!cursor_fail"()
-    rx788_cur."!cursor_debug"("FAIL  ", "value")
-    .return (rx788_cur)
+  rx791_done:
+    rx791_cur."!cursor_fail"()
+    rx791_cur."!cursor_debug"("FAIL  ", "value")
+    .return (rx791_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__value"  :subid("184_1267204702.05125") :method
+.sub "!PREFIX__value"  :subid("184_1271336396.90314") :method
 .annotate "line", 4
-    $P790 = self."!PREFIX__!subrule"("number", "")
-    $P791 = self."!PREFIX__!subrule"("quote", "")
-    new $P792, "ResizablePMCArray"
-    push $P792, $P790
-    push $P792, $P791
-    .return ($P792)
+    $P793 = self."!PREFIX__!subrule"("number", "")
+    $P794 = self."!PREFIX__!subrule"("quote", "")
+    new $P795, "ResizablePMCArray"
+    push $P795, $P793
+    push $P795, $P794
+    .return ($P795)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "number"  :subid("185_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "number"  :subid("185_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx796_tgt
-    .local int rx796_pos
-    .local int rx796_off
-    .local int rx796_eos
-    .local int rx796_rep
-    .local pmc rx796_cur
-    (rx796_cur, rx796_pos, rx796_tgt) = self."!cursor_start"()
-    rx796_cur."!cursor_debug"("START ", "number")
-    .lex unicode:"$\x{a2}", rx796_cur
+    .local string rx799_tgt
+    .local int rx799_pos
+    .local int rx799_off
+    .local int rx799_eos
+    .local int rx799_rep
+    .local pmc rx799_cur
+    (rx799_cur, rx799_pos, rx799_tgt) = self."!cursor_start"()
+    rx799_cur."!cursor_debug"("START ", "number")
+    .lex unicode:"$\x{a2}", rx799_cur
     .local pmc match
     .lex "$/", match
-    length rx796_eos, rx796_tgt
-    set rx796_off, 0
-    lt rx796_pos, 2, rx796_start
-    sub rx796_off, rx796_pos, 1
-    substr rx796_tgt, rx796_tgt, rx796_off
-  rx796_start:
+    length rx799_eos, rx799_tgt
+    set rx799_off, 0
+    lt rx799_pos, 2, rx799_start
+    sub rx799_off, rx799_pos, 1
+    substr rx799_tgt, rx799_tgt, rx799_off
+  rx799_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan799_done
-    goto rxscan799_scan
-  rxscan799_loop:
-    ($P10) = rx796_cur."from"()
+    ne $I10, -1, rxscan802_done
+    goto rxscan802_scan
+  rxscan802_loop:
+    ($P10) = rx799_cur."from"()
     inc $P10
-    set rx796_pos, $P10
-    ge rx796_pos, rx796_eos, rxscan799_done
-  rxscan799_scan:
-    set_addr $I10, rxscan799_loop
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
-  rxscan799_done:
-.annotate "line", 384
+    set rx799_pos, $P10
+    ge rx799_pos, rx799_eos, rxscan802_done
+  rxscan802_scan:
+    set_addr $I10, rxscan802_loop
+    rx799_cur."!mark_push"(0, rx799_pos, $I10)
+  rxscan802_done:
+.annotate "line", 388
   # rx subcapture "sign"
-    set_addr $I10, rxcap_802_fail
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
-  # rx rxquantr800 ** 0..1
-    set_addr $I801, rxquantr800_done
-    rx796_cur."!mark_push"(0, rx796_pos, $I801)
-  rxquantr800_loop:
+    set_addr $I10, rxcap_805_fail
+    rx799_cur."!mark_push"(0, rx799_pos, $I10)
+  # rx rxquantr803 ** 0..1
+    set_addr $I804, rxquantr803_done
+    rx799_cur."!mark_push"(0, rx799_pos, $I804)
+  rxquantr803_loop:
   # rx enumcharlist negate=0 
-    ge rx796_pos, rx796_eos, rx796_fail
-    sub $I10, rx796_pos, rx796_off
-    substr $S10, rx796_tgt, $I10, 1
+    ge rx799_pos, rx799_eos, rx799_fail
+    sub $I10, rx799_pos, rx799_off
+    substr $S10, rx799_tgt, $I10, 1
     index $I11, "+-", $S10
-    lt $I11, 0, rx796_fail
-    inc rx796_pos
-    (rx796_rep) = rx796_cur."!mark_commit"($I801)
-  rxquantr800_done:
-    set_addr $I10, rxcap_802_fail
-    ($I12, $I11) = rx796_cur."!mark_peek"($I10)
-    rx796_cur."!cursor_pos"($I11)
-    ($P10) = rx796_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx796_pos, "")
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx799_fail
+    inc rx799_pos
+    (rx799_rep) = rx799_cur."!mark_commit"($I804)
+  rxquantr803_done:
+    set_addr $I10, rxcap_805_fail
+    ($I12, $I11) = rx799_cur."!mark_peek"($I10)
+    rx799_cur."!cursor_pos"($I11)
+    ($P10) = rx799_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx799_pos, "")
+    rx799_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sign")
-    goto rxcap_802_done
-  rxcap_802_fail:
-    goto rx796_fail
-  rxcap_802_done:
-  alt803_0:
-.annotate "line", 385
-    set_addr $I10, alt803_1
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
+    goto rxcap_805_done
+  rxcap_805_fail:
+    goto rx799_fail
+  rxcap_805_done:
+  alt806_0:
+.annotate "line", 389
+    set_addr $I10, alt806_1
+    rx799_cur."!mark_push"(0, rx799_pos, $I10)
   # rx subrule "dec_number" subtype=capture negate=
-    rx796_cur."!cursor_pos"(rx796_pos)
-    $P10 = rx796_cur."dec_number"()
-    unless $P10, rx796_fail
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
+    rx799_cur."!cursor_pos"(rx799_pos)
+    $P10 = rx799_cur."dec_number"()
+    unless $P10, rx799_fail
+    rx799_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("dec_number")
-    rx796_pos = $P10."pos"()
-    goto alt803_end
-  alt803_1:
+    rx799_pos = $P10."pos"()
+    goto alt806_end
+  alt806_1:
   # rx subrule "integer" subtype=capture negate=
-    rx796_cur."!cursor_pos"(rx796_pos)
-    $P10 = rx796_cur."integer"()
-    unless $P10, rx796_fail
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
+    rx799_cur."!cursor_pos"(rx799_pos)
+    $P10 = rx799_cur."integer"()
+    unless $P10, rx799_fail
+    rx799_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("integer")
-    rx796_pos = $P10."pos"()
-  alt803_end:
-.annotate "line", 383
+    rx799_pos = $P10."pos"()
+  alt806_end:
+.annotate "line", 387
   # rx pass
-    rx796_cur."!cursor_pass"(rx796_pos, "number")
-    rx796_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx796_pos)
-    .return (rx796_cur)
-  rx796_fail:
+    rx799_cur."!cursor_pass"(rx799_pos, "number")
+    rx799_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx799_pos)
+    .return (rx799_cur)
+  rx799_fail:
 .annotate "line", 4
-    (rx796_rep, rx796_pos, $I10, $P10) = rx796_cur."!mark_fail"(0)
-    lt rx796_pos, -1, rx796_done
-    eq rx796_pos, -1, rx796_fail
+    (rx799_rep, rx799_pos, $I10, $P10) = rx799_cur."!mark_fail"(0)
+    lt rx799_pos, -1, rx799_done
+    eq rx799_pos, -1, rx799_fail
     jump $I10
-  rx796_done:
-    rx796_cur."!cursor_fail"()
-    rx796_cur."!cursor_debug"("FAIL  ", "number")
-    .return (rx796_cur)
+  rx799_done:
+    rx799_cur."!cursor_fail"()
+    rx799_cur."!cursor_debug"("FAIL  ", "number")
+    .return (rx799_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__number"  :subid("186_1267204702.05125") :method
+.sub "!PREFIX__number"  :subid("186_1271336396.90314") :method
 .annotate "line", 4
-    new $P798, "ResizablePMCArray"
-    push $P798, ""
-    .return ($P798)
+    new $P801, "ResizablePMCArray"
+    push $P801, ""
+    .return ($P801)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote"  :subid("187_1267204702.05125") :method
-.annotate "line", 388
-    $P805 = self."!protoregex"("quote")
-    .return ($P805)
+.sub "quote"  :subid("187_1271336396.90314") :method
+.annotate "line", 392
+    $P808 = self."!protoregex"("quote")
+    .return ($P808)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote"  :subid("188_1267204702.05125") :method
-.annotate "line", 388
-    $P807 = self."!PREFIX__!protoregex"("quote")
-    .return ($P807)
+.sub "!PREFIX__quote"  :subid("188_1271336396.90314") :method
+.annotate "line", 392
+    $P810 = self."!PREFIX__!protoregex"("quote")
+    .return ($P810)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<apos>"  :subid("189_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<apos>"  :subid("189_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx809_tgt
-    .local int rx809_pos
-    .local int rx809_off
-    .local int rx809_eos
-    .local int rx809_rep
-    .local pmc rx809_cur
-    (rx809_cur, rx809_pos, rx809_tgt) = self."!cursor_start"()
-    rx809_cur."!cursor_debug"("START ", "quote:sym<apos>")
-    .lex unicode:"$\x{a2}", rx809_cur
-    .local pmc match
-    .lex "$/", match
-    length rx809_eos, rx809_tgt
-    set rx809_off, 0
-    lt rx809_pos, 2, rx809_start
-    sub rx809_off, rx809_pos, 1
-    substr rx809_tgt, rx809_tgt, rx809_off
-  rx809_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan812_done
-    goto rxscan812_scan
-  rxscan812_loop:
-    ($P10) = rx809_cur."from"()
-    inc $P10
-    set rx809_pos, $P10
-    ge rx809_pos, rx809_eos, rxscan812_done
-  rxscan812_scan:
-    set_addr $I10, rxscan812_loop
-    rx809_cur."!mark_push"(0, rx809_pos, $I10)
-  rxscan812_done:
-.annotate "line", 389
+    .local string rx812_tgt
+    .local int rx812_pos
+    .local int rx812_off
+    .local int rx812_eos
+    .local int rx812_rep
+    .local pmc rx812_cur
+    (rx812_cur, rx812_pos, rx812_tgt) = self."!cursor_start"()
+    rx812_cur."!cursor_debug"("START ", "quote:sym<apos>")
+    .lex unicode:"$\x{a2}", rx812_cur
+    .local pmc match
+    .lex "$/", match
+    length rx812_eos, rx812_tgt
+    set rx812_off, 0
+    lt rx812_pos, 2, rx812_start
+    sub rx812_off, rx812_pos, 1
+    substr rx812_tgt, rx812_tgt, rx812_off
+  rx812_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan815_done
+    goto rxscan815_scan
+  rxscan815_loop:
+    ($P10) = rx812_cur."from"()
+    inc $P10
+    set rx812_pos, $P10
+    ge rx812_pos, rx812_eos, rxscan815_done
+  rxscan815_scan:
+    set_addr $I10, rxscan815_loop
+    rx812_cur."!mark_push"(0, rx812_pos, $I10)
+  rxscan815_done:
+.annotate "line", 393
   # rx enumcharlist negate=0 zerowidth
-    ge rx809_pos, rx809_eos, rx809_fail
-    sub $I10, rx809_pos, rx809_off
-    substr $S10, rx809_tgt, $I10, 1
+    ge rx812_pos, rx812_eos, rx812_fail
+    sub $I10, rx812_pos, rx812_off
+    substr $S10, rx812_tgt, $I10, 1
     index $I11, "'", $S10
-    lt $I11, 0, rx809_fail
+    lt $I11, 0, rx812_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx809_cur."!cursor_pos"(rx809_pos)
-    $P10 = rx809_cur."quote_EXPR"(":q")
-    unless $P10, rx809_fail
-    rx809_cur."!mark_push"(0, -1, 0, $P10)
+    rx812_cur."!cursor_pos"(rx812_pos)
+    $P10 = rx812_cur."quote_EXPR"(":q")
+    unless $P10, rx812_fail
+    rx812_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx809_pos = $P10."pos"()
+    rx812_pos = $P10."pos"()
   # rx pass
-    rx809_cur."!cursor_pass"(rx809_pos, "quote:sym<apos>")
-    rx809_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx809_pos)
-    .return (rx809_cur)
-  rx809_fail:
+    rx812_cur."!cursor_pass"(rx812_pos, "quote:sym<apos>")
+    rx812_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx812_pos)
+    .return (rx812_cur)
+  rx812_fail:
 .annotate "line", 4
-    (rx809_rep, rx809_pos, $I10, $P10) = rx809_cur."!mark_fail"(0)
-    lt rx809_pos, -1, rx809_done
-    eq rx809_pos, -1, rx809_fail
+    (rx812_rep, rx812_pos, $I10, $P10) = rx812_cur."!mark_fail"(0)
+    lt rx812_pos, -1, rx812_done
+    eq rx812_pos, -1, rx812_fail
     jump $I10
-  rx809_done:
-    rx809_cur."!cursor_fail"()
-    rx809_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
-    .return (rx809_cur)
+  rx812_done:
+    rx812_cur."!cursor_fail"()
+    rx812_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
+    .return (rx812_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<apos>"  :subid("190_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<apos>"  :subid("190_1271336396.90314") :method
 .annotate "line", 4
-    new $P811, "ResizablePMCArray"
-    push $P811, "'"
-    .return ($P811)
+    new $P814, "ResizablePMCArray"
+    push $P814, "'"
+    .return ($P814)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<dblq>"  :subid("191_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<dblq>"  :subid("191_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx814_tgt
-    .local int rx814_pos
-    .local int rx814_off
-    .local int rx814_eos
-    .local int rx814_rep
-    .local pmc rx814_cur
-    (rx814_cur, rx814_pos, rx814_tgt) = self."!cursor_start"()
-    rx814_cur."!cursor_debug"("START ", "quote:sym<dblq>")
-    .lex unicode:"$\x{a2}", rx814_cur
+    .local string rx817_tgt
+    .local int rx817_pos
+    .local int rx817_off
+    .local int rx817_eos
+    .local int rx817_rep
+    .local pmc rx817_cur
+    (rx817_cur, rx817_pos, rx817_tgt) = self."!cursor_start"()
+    rx817_cur."!cursor_debug"("START ", "quote:sym<dblq>")
+    .lex unicode:"$\x{a2}", rx817_cur
     .local pmc match
     .lex "$/", match
-    length rx814_eos, rx814_tgt
-    set rx814_off, 0
-    lt rx814_pos, 2, rx814_start
-    sub rx814_off, rx814_pos, 1
-    substr rx814_tgt, rx814_tgt, rx814_off
-  rx814_start:
+    length rx817_eos, rx817_tgt
+    set rx817_off, 0
+    lt rx817_pos, 2, rx817_start
+    sub rx817_off, rx817_pos, 1
+    substr rx817_tgt, rx817_tgt, rx817_off
+  rx817_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan817_done
-    goto rxscan817_scan
-  rxscan817_loop:
-    ($P10) = rx814_cur."from"()
+    ne $I10, -1, rxscan820_done
+    goto rxscan820_scan
+  rxscan820_loop:
+    ($P10) = rx817_cur."from"()
     inc $P10
-    set rx814_pos, $P10
-    ge rx814_pos, rx814_eos, rxscan817_done
-  rxscan817_scan:
-    set_addr $I10, rxscan817_loop
-    rx814_cur."!mark_push"(0, rx814_pos, $I10)
-  rxscan817_done:
-.annotate "line", 390
+    set rx817_pos, $P10
+    ge rx817_pos, rx817_eos, rxscan820_done
+  rxscan820_scan:
+    set_addr $I10, rxscan820_loop
+    rx817_cur."!mark_push"(0, rx817_pos, $I10)
+  rxscan820_done:
+.annotate "line", 394
   # rx enumcharlist negate=0 zerowidth
-    ge rx814_pos, rx814_eos, rx814_fail
-    sub $I10, rx814_pos, rx814_off
-    substr $S10, rx814_tgt, $I10, 1
+    ge rx817_pos, rx817_eos, rx817_fail
+    sub $I10, rx817_pos, rx817_off
+    substr $S10, rx817_tgt, $I10, 1
     index $I11, "\"", $S10
-    lt $I11, 0, rx814_fail
+    lt $I11, 0, rx817_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx814_cur."!cursor_pos"(rx814_pos)
-    $P10 = rx814_cur."quote_EXPR"(":qq")
-    unless $P10, rx814_fail
-    rx814_cur."!mark_push"(0, -1, 0, $P10)
+    rx817_cur."!cursor_pos"(rx817_pos)
+    $P10 = rx817_cur."quote_EXPR"(":qq")
+    unless $P10, rx817_fail
+    rx817_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx814_pos = $P10."pos"()
+    rx817_pos = $P10."pos"()
   # rx pass
-    rx814_cur."!cursor_pass"(rx814_pos, "quote:sym<dblq>")
-    rx814_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx814_pos)
-    .return (rx814_cur)
-  rx814_fail:
+    rx817_cur."!cursor_pass"(rx817_pos, "quote:sym<dblq>")
+    rx817_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx817_pos)
+    .return (rx817_cur)
+  rx817_fail:
 .annotate "line", 4
-    (rx814_rep, rx814_pos, $I10, $P10) = rx814_cur."!mark_fail"(0)
-    lt rx814_pos, -1, rx814_done
-    eq rx814_pos, -1, rx814_fail
+    (rx817_rep, rx817_pos, $I10, $P10) = rx817_cur."!mark_fail"(0)
+    lt rx817_pos, -1, rx817_done
+    eq rx817_pos, -1, rx817_fail
     jump $I10
-  rx814_done:
-    rx814_cur."!cursor_fail"()
-    rx814_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
-    .return (rx814_cur)
+  rx817_done:
+    rx817_cur."!cursor_fail"()
+    rx817_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
+    .return (rx817_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<dblq>"  :subid("192_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<dblq>"  :subid("192_1271336396.90314") :method
 .annotate "line", 4
-    new $P816, "ResizablePMCArray"
-    push $P816, "\""
-    .return ($P816)
+    new $P819, "ResizablePMCArray"
+    push $P819, "\""
+    .return ($P819)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<q>"  :subid("193_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<q>"  :subid("193_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx819_tgt
-    .local int rx819_pos
-    .local int rx819_off
-    .local int rx819_eos
-    .local int rx819_rep
-    .local pmc rx819_cur
-    (rx819_cur, rx819_pos, rx819_tgt) = self."!cursor_start"()
-    rx819_cur."!cursor_debug"("START ", "quote:sym<q>")
-    .lex unicode:"$\x{a2}", rx819_cur
+    .local string rx822_tgt
+    .local int rx822_pos
+    .local int rx822_off
+    .local int rx822_eos
+    .local int rx822_rep
+    .local pmc rx822_cur
+    (rx822_cur, rx822_pos, rx822_tgt) = self."!cursor_start"()
+    rx822_cur."!cursor_debug"("START ", "quote:sym<q>")
+    .lex unicode:"$\x{a2}", rx822_cur
     .local pmc match
     .lex "$/", match
-    length rx819_eos, rx819_tgt
-    set rx819_off, 0
-    lt rx819_pos, 2, rx819_start
-    sub rx819_off, rx819_pos, 1
-    substr rx819_tgt, rx819_tgt, rx819_off
-  rx819_start:
+    length rx822_eos, rx822_tgt
+    set rx822_off, 0
+    lt rx822_pos, 2, rx822_start
+    sub rx822_off, rx822_pos, 1
+    substr rx822_tgt, rx822_tgt, rx822_off
+  rx822_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan823_done
-    goto rxscan823_scan
-  rxscan823_loop:
-    ($P10) = rx819_cur."from"()
+    ne $I10, -1, rxscan826_done
+    goto rxscan826_scan
+  rxscan826_loop:
+    ($P10) = rx822_cur."from"()
     inc $P10
-    set rx819_pos, $P10
-    ge rx819_pos, rx819_eos, rxscan823_done
-  rxscan823_scan:
-    set_addr $I10, rxscan823_loop
-    rx819_cur."!mark_push"(0, rx819_pos, $I10)
-  rxscan823_done:
-.annotate "line", 391
+    set rx822_pos, $P10
+    ge rx822_pos, rx822_eos, rxscan826_done
+  rxscan826_scan:
+    set_addr $I10, rxscan826_loop
+    rx822_cur."!mark_push"(0, rx822_pos, $I10)
+  rxscan826_done:
+.annotate "line", 395
   # rx literal  "q"
-    add $I11, rx819_pos, 1
-    gt $I11, rx819_eos, rx819_fail
-    sub $I11, rx819_pos, rx819_off
-    substr $S10, rx819_tgt, $I11, 1
-    ne $S10, "q", rx819_fail
-    add rx819_pos, 1
+    add $I11, rx822_pos, 1
+    gt $I11, rx822_eos, rx822_fail
+    sub $I11, rx822_pos, rx822_off
+    substr $S10, rx822_tgt, $I11, 1
+    ne $S10, "q", rx822_fail
+    add rx822_pos, 1
   # rx enumcharlist negate=1 zerowidth
-    ge rx819_pos, rx819_eos, rx819_fail
-    sub $I10, rx819_pos, rx819_off
-    substr $S10, rx819_tgt, $I10, 1
+    ge rx822_pos, rx822_eos, rx822_fail
+    sub $I10, rx822_pos, rx822_off
+    substr $S10, rx822_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx819_fail
+    ge $I11, 0, rx822_fail
   # rx subrule "ws" subtype=method negate=
-    rx819_cur."!cursor_pos"(rx819_pos)
-    $P10 = rx819_cur."ws"()
-    unless $P10, rx819_fail
-    rx819_pos = $P10."pos"()
+    rx822_cur."!cursor_pos"(rx822_pos)
+    $P10 = rx822_cur."ws"()
+    unless $P10, rx822_fail
+    rx822_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx819_cur."!cursor_pos"(rx819_pos)
-    $P10 = rx819_cur."quote_EXPR"(":q")
-    unless $P10, rx819_fail
-    rx819_cur."!mark_push"(0, -1, 0, $P10)
+    rx822_cur."!cursor_pos"(rx822_pos)
+    $P10 = rx822_cur."quote_EXPR"(":q")
+    unless $P10, rx822_fail
+    rx822_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx819_pos = $P10."pos"()
+    rx822_pos = $P10."pos"()
   # rx pass
-    rx819_cur."!cursor_pass"(rx819_pos, "quote:sym<q>")
-    rx819_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx819_pos)
-    .return (rx819_cur)
-  rx819_fail:
+    rx822_cur."!cursor_pass"(rx822_pos, "quote:sym<q>")
+    rx822_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx822_pos)
+    .return (rx822_cur)
+  rx822_fail:
 .annotate "line", 4
-    (rx819_rep, rx819_pos, $I10, $P10) = rx819_cur."!mark_fail"(0)
-    lt rx819_pos, -1, rx819_done
-    eq rx819_pos, -1, rx819_fail
+    (rx822_rep, rx822_pos, $I10, $P10) = rx822_cur."!mark_fail"(0)
+    lt rx822_pos, -1, rx822_done
+    eq rx822_pos, -1, rx822_fail
     jump $I10
-  rx819_done:
-    rx819_cur."!cursor_fail"()
-    rx819_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
-    .return (rx819_cur)
+  rx822_done:
+    rx822_cur."!cursor_fail"()
+    rx822_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
+    .return (rx822_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<q>"  :subid("194_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<q>"  :subid("194_1271336396.90314") :method
 .annotate "line", 4
-    $P821 = self."!PREFIX__!subrule"("", "q")
-    new $P822, "ResizablePMCArray"
-    push $P822, $P821
-    .return ($P822)
+    $P824 = self."!PREFIX__!subrule"("", "q")
+    new $P825, "ResizablePMCArray"
+    push $P825, $P824
+    .return ($P825)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<qq>"  :subid("195_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<qq>"  :subid("195_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx825_tgt
-    .local int rx825_pos
-    .local int rx825_off
-    .local int rx825_eos
-    .local int rx825_rep
-    .local pmc rx825_cur
-    (rx825_cur, rx825_pos, rx825_tgt) = self."!cursor_start"()
-    rx825_cur."!cursor_debug"("START ", "quote:sym<qq>")
-    .lex unicode:"$\x{a2}", rx825_cur
+    .local string rx828_tgt
+    .local int rx828_pos
+    .local int rx828_off
+    .local int rx828_eos
+    .local int rx828_rep
+    .local pmc rx828_cur
+    (rx828_cur, rx828_pos, rx828_tgt) = self."!cursor_start"()
+    rx828_cur."!cursor_debug"("START ", "quote:sym<qq>")
+    .lex unicode:"$\x{a2}", rx828_cur
     .local pmc match
     .lex "$/", match
-    length rx825_eos, rx825_tgt
-    set rx825_off, 0
-    lt rx825_pos, 2, rx825_start
-    sub rx825_off, rx825_pos, 1
-    substr rx825_tgt, rx825_tgt, rx825_off
-  rx825_start:
+    length rx828_eos, rx828_tgt
+    set rx828_off, 0
+    lt rx828_pos, 2, rx828_start
+    sub rx828_off, rx828_pos, 1
+    substr rx828_tgt, rx828_tgt, rx828_off
+  rx828_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan829_done
-    goto rxscan829_scan
-  rxscan829_loop:
-    ($P10) = rx825_cur."from"()
+    ne $I10, -1, rxscan832_done
+    goto rxscan832_scan
+  rxscan832_loop:
+    ($P10) = rx828_cur."from"()
     inc $P10
-    set rx825_pos, $P10
-    ge rx825_pos, rx825_eos, rxscan829_done
-  rxscan829_scan:
-    set_addr $I10, rxscan829_loop
-    rx825_cur."!mark_push"(0, rx825_pos, $I10)
-  rxscan829_done:
-.annotate "line", 392
+    set rx828_pos, $P10
+    ge rx828_pos, rx828_eos, rxscan832_done
+  rxscan832_scan:
+    set_addr $I10, rxscan832_loop
+    rx828_cur."!mark_push"(0, rx828_pos, $I10)
+  rxscan832_done:
+.annotate "line", 396
   # rx literal  "qq"
-    add $I11, rx825_pos, 2
-    gt $I11, rx825_eos, rx825_fail
-    sub $I11, rx825_pos, rx825_off
-    substr $S10, rx825_tgt, $I11, 2
-    ne $S10, "qq", rx825_fail
-    add rx825_pos, 2
+    add $I11, rx828_pos, 2
+    gt $I11, rx828_eos, rx828_fail
+    sub $I11, rx828_pos, rx828_off
+    substr $S10, rx828_tgt, $I11, 2
+    ne $S10, "qq", rx828_fail
+    add rx828_pos, 2
   # rx enumcharlist negate=1 zerowidth
-    ge rx825_pos, rx825_eos, rx825_fail
-    sub $I10, rx825_pos, rx825_off
-    substr $S10, rx825_tgt, $I10, 1
+    ge rx828_pos, rx828_eos, rx828_fail
+    sub $I10, rx828_pos, rx828_off
+    substr $S10, rx828_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx825_fail
+    ge $I11, 0, rx828_fail
   # rx subrule "ws" subtype=method negate=
-    rx825_cur."!cursor_pos"(rx825_pos)
-    $P10 = rx825_cur."ws"()
-    unless $P10, rx825_fail
-    rx825_pos = $P10."pos"()
+    rx828_cur."!cursor_pos"(rx828_pos)
+    $P10 = rx828_cur."ws"()
+    unless $P10, rx828_fail
+    rx828_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx825_cur."!cursor_pos"(rx825_pos)
-    $P10 = rx825_cur."quote_EXPR"(":qq")
-    unless $P10, rx825_fail
-    rx825_cur."!mark_push"(0, -1, 0, $P10)
+    rx828_cur."!cursor_pos"(rx828_pos)
+    $P10 = rx828_cur."quote_EXPR"(":qq")
+    unless $P10, rx828_fail
+    rx828_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx825_pos = $P10."pos"()
+    rx828_pos = $P10."pos"()
   # rx pass
-    rx825_cur."!cursor_pass"(rx825_pos, "quote:sym<qq>")
-    rx825_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx825_pos)
-    .return (rx825_cur)
-  rx825_fail:
+    rx828_cur."!cursor_pass"(rx828_pos, "quote:sym<qq>")
+    rx828_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx828_pos)
+    .return (rx828_cur)
+  rx828_fail:
 .annotate "line", 4
-    (rx825_rep, rx825_pos, $I10, $P10) = rx825_cur."!mark_fail"(0)
-    lt rx825_pos, -1, rx825_done
-    eq rx825_pos, -1, rx825_fail
+    (rx828_rep, rx828_pos, $I10, $P10) = rx828_cur."!mark_fail"(0)
+    lt rx828_pos, -1, rx828_done
+    eq rx828_pos, -1, rx828_fail
     jump $I10
-  rx825_done:
-    rx825_cur."!cursor_fail"()
-    rx825_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
-    .return (rx825_cur)
+  rx828_done:
+    rx828_cur."!cursor_fail"()
+    rx828_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
+    .return (rx828_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<qq>"  :subid("196_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<qq>"  :subid("196_1271336396.90314") :method
 .annotate "line", 4
-    $P827 = self."!PREFIX__!subrule"("", "qq")
-    new $P828, "ResizablePMCArray"
-    push $P828, $P827
-    .return ($P828)
+    $P830 = self."!PREFIX__!subrule"("", "qq")
+    new $P831, "ResizablePMCArray"
+    push $P831, $P830
+    .return ($P831)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q>"  :subid("197_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<Q>"  :subid("197_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx831_tgt
-    .local int rx831_pos
-    .local int rx831_off
-    .local int rx831_eos
-    .local int rx831_rep
-    .local pmc rx831_cur
-    (rx831_cur, rx831_pos, rx831_tgt) = self."!cursor_start"()
-    rx831_cur."!cursor_debug"("START ", "quote:sym<Q>")
-    .lex unicode:"$\x{a2}", rx831_cur
-    .local pmc match
-    .lex "$/", match
-    length rx831_eos, rx831_tgt
-    set rx831_off, 0
-    lt rx831_pos, 2, rx831_start
-    sub rx831_off, rx831_pos, 1
-    substr rx831_tgt, rx831_tgt, rx831_off
-  rx831_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan835_done
-    goto rxscan835_scan
-  rxscan835_loop:
-    ($P10) = rx831_cur."from"()
-    inc $P10
-    set rx831_pos, $P10
-    ge rx831_pos, rx831_eos, rxscan835_done
-  rxscan835_scan:
-    set_addr $I10, rxscan835_loop
-    rx831_cur."!mark_push"(0, rx831_pos, $I10)
-  rxscan835_done:
-.annotate "line", 393
+    .local string rx834_tgt
+    .local int rx834_pos
+    .local int rx834_off
+    .local int rx834_eos
+    .local int rx834_rep
+    .local pmc rx834_cur
+    (rx834_cur, rx834_pos, rx834_tgt) = self."!cursor_start"()
+    rx834_cur."!cursor_debug"("START ", "quote:sym<Q>")
+    .lex unicode:"$\x{a2}", rx834_cur
+    .local pmc match
+    .lex "$/", match
+    length rx834_eos, rx834_tgt
+    set rx834_off, 0
+    lt rx834_pos, 2, rx834_start
+    sub rx834_off, rx834_pos, 1
+    substr rx834_tgt, rx834_tgt, rx834_off
+  rx834_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan838_done
+    goto rxscan838_scan
+  rxscan838_loop:
+    ($P10) = rx834_cur."from"()
+    inc $P10
+    set rx834_pos, $P10
+    ge rx834_pos, rx834_eos, rxscan838_done
+  rxscan838_scan:
+    set_addr $I10, rxscan838_loop
+    rx834_cur."!mark_push"(0, rx834_pos, $I10)
+  rxscan838_done:
+.annotate "line", 397
   # rx literal  "Q"
-    add $I11, rx831_pos, 1
-    gt $I11, rx831_eos, rx831_fail
-    sub $I11, rx831_pos, rx831_off
-    substr $S10, rx831_tgt, $I11, 1
-    ne $S10, "Q", rx831_fail
-    add rx831_pos, 1
+    add $I11, rx834_pos, 1
+    gt $I11, rx834_eos, rx834_fail
+    sub $I11, rx834_pos, rx834_off
+    substr $S10, rx834_tgt, $I11, 1
+    ne $S10, "Q", rx834_fail
+    add rx834_pos, 1
   # rx enumcharlist negate=1 zerowidth
-    ge rx831_pos, rx831_eos, rx831_fail
-    sub $I10, rx831_pos, rx831_off
-    substr $S10, rx831_tgt, $I10, 1
+    ge rx834_pos, rx834_eos, rx834_fail
+    sub $I10, rx834_pos, rx834_off
+    substr $S10, rx834_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx831_fail
+    ge $I11, 0, rx834_fail
   # rx subrule "ws" subtype=method negate=
-    rx831_cur."!cursor_pos"(rx831_pos)
-    $P10 = rx831_cur."ws"()
-    unless $P10, rx831_fail
-    rx831_pos = $P10."pos"()
+    rx834_cur."!cursor_pos"(rx834_pos)
+    $P10 = rx834_cur."ws"()
+    unless $P10, rx834_fail
+    rx834_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx831_cur."!cursor_pos"(rx831_pos)
-    $P10 = rx831_cur."quote_EXPR"()
-    unless $P10, rx831_fail
-    rx831_cur."!mark_push"(0, -1, 0, $P10)
+    rx834_cur."!cursor_pos"(rx834_pos)
+    $P10 = rx834_cur."quote_EXPR"()
+    unless $P10, rx834_fail
+    rx834_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx831_pos = $P10."pos"()
+    rx834_pos = $P10."pos"()
   # rx pass
-    rx831_cur."!cursor_pass"(rx831_pos, "quote:sym<Q>")
-    rx831_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx831_pos)
-    .return (rx831_cur)
-  rx831_fail:
+    rx834_cur."!cursor_pass"(rx834_pos, "quote:sym<Q>")
+    rx834_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx834_pos)
+    .return (rx834_cur)
+  rx834_fail:
 .annotate "line", 4
-    (rx831_rep, rx831_pos, $I10, $P10) = rx831_cur."!mark_fail"(0)
-    lt rx831_pos, -1, rx831_done
-    eq rx831_pos, -1, rx831_fail
+    (rx834_rep, rx834_pos, $I10, $P10) = rx834_cur."!mark_fail"(0)
+    lt rx834_pos, -1, rx834_done
+    eq rx834_pos, -1, rx834_fail
     jump $I10
-  rx831_done:
-    rx831_cur."!cursor_fail"()
-    rx831_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
-    .return (rx831_cur)
+  rx834_done:
+    rx834_cur."!cursor_fail"()
+    rx834_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
+    .return (rx834_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q>"  :subid("198_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<Q>"  :subid("198_1271336396.90314") :method
 .annotate "line", 4
-    $P833 = self."!PREFIX__!subrule"("", "Q")
-    new $P834, "ResizablePMCArray"
-    push $P834, $P833
-    .return ($P834)
+    $P836 = self."!PREFIX__!subrule"("", "Q")
+    new $P837, "ResizablePMCArray"
+    push $P837, $P836
+    .return ($P837)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q:PIR>"  :subid("199_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<Q:PIR>"  :subid("199_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx837_tgt
-    .local int rx837_pos
-    .local int rx837_off
-    .local int rx837_eos
-    .local int rx837_rep
-    .local pmc rx837_cur
-    (rx837_cur, rx837_pos, rx837_tgt) = self."!cursor_start"()
-    rx837_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
-    .lex unicode:"$\x{a2}", rx837_cur
+    .local string rx840_tgt
+    .local int rx840_pos
+    .local int rx840_off
+    .local int rx840_eos
+    .local int rx840_rep
+    .local pmc rx840_cur
+    (rx840_cur, rx840_pos, rx840_tgt) = self."!cursor_start"()
+    rx840_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
+    .lex unicode:"$\x{a2}", rx840_cur
     .local pmc match
     .lex "$/", match
-    length rx837_eos, rx837_tgt
-    set rx837_off, 0
-    lt rx837_pos, 2, rx837_start
-    sub rx837_off, rx837_pos, 1
-    substr rx837_tgt, rx837_tgt, rx837_off
-  rx837_start:
+    length rx840_eos, rx840_tgt
+    set rx840_off, 0
+    lt rx840_pos, 2, rx840_start
+    sub rx840_off, rx840_pos, 1
+    substr rx840_tgt, rx840_tgt, rx840_off
+  rx840_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan841_done
-    goto rxscan841_scan
-  rxscan841_loop:
-    ($P10) = rx837_cur."from"()
+    ne $I10, -1, rxscan844_done
+    goto rxscan844_scan
+  rxscan844_loop:
+    ($P10) = rx840_cur."from"()
     inc $P10
-    set rx837_pos, $P10
-    ge rx837_pos, rx837_eos, rxscan841_done
-  rxscan841_scan:
-    set_addr $I10, rxscan841_loop
-    rx837_cur."!mark_push"(0, rx837_pos, $I10)
-  rxscan841_done:
-.annotate "line", 394
+    set rx840_pos, $P10
+    ge rx840_pos, rx840_eos, rxscan844_done
+  rxscan844_scan:
+    set_addr $I10, rxscan844_loop
+    rx840_cur."!mark_push"(0, rx840_pos, $I10)
+  rxscan844_done:
+.annotate "line", 398
   # rx literal  "Q:PIR"
-    add $I11, rx837_pos, 5
-    gt $I11, rx837_eos, rx837_fail
-    sub $I11, rx837_pos, rx837_off
-    substr $S10, rx837_tgt, $I11, 5
-    ne $S10, "Q:PIR", rx837_fail
-    add rx837_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx837_cur."!cursor_pos"(rx837_pos)
-    $P10 = rx837_cur."ws"()
-    unless $P10, rx837_fail
-    rx837_pos = $P10."pos"()
+    add $I11, rx840_pos, 5
+    gt $I11, rx840_eos, rx840_fail
+    sub $I11, rx840_pos, rx840_off
+    substr $S10, rx840_tgt, $I11, 5
+    ne $S10, "Q:PIR", rx840_fail
+    add rx840_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx840_cur."!cursor_pos"(rx840_pos)
+    $P10 = rx840_cur."ws"()
+    unless $P10, rx840_fail
+    rx840_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx837_cur."!cursor_pos"(rx837_pos)
-    $P10 = rx837_cur."quote_EXPR"()
-    unless $P10, rx837_fail
-    rx837_cur."!mark_push"(0, -1, 0, $P10)
+    rx840_cur."!cursor_pos"(rx840_pos)
+    $P10 = rx840_cur."quote_EXPR"()
+    unless $P10, rx840_fail
+    rx840_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx837_pos = $P10."pos"()
+    rx840_pos = $P10."pos"()
   # rx pass
-    rx837_cur."!cursor_pass"(rx837_pos, "quote:sym<Q:PIR>")
-    rx837_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx837_pos)
-    .return (rx837_cur)
-  rx837_fail:
+    rx840_cur."!cursor_pass"(rx840_pos, "quote:sym<Q:PIR>")
+    rx840_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx840_pos)
+    .return (rx840_cur)
+  rx840_fail:
 .annotate "line", 4
-    (rx837_rep, rx837_pos, $I10, $P10) = rx837_cur."!mark_fail"(0)
-    lt rx837_pos, -1, rx837_done
-    eq rx837_pos, -1, rx837_fail
+    (rx840_rep, rx840_pos, $I10, $P10) = rx840_cur."!mark_fail"(0)
+    lt rx840_pos, -1, rx840_done
+    eq rx840_pos, -1, rx840_fail
     jump $I10
-  rx837_done:
-    rx837_cur."!cursor_fail"()
-    rx837_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
-    .return (rx837_cur)
+  rx840_done:
+    rx840_cur."!cursor_fail"()
+    rx840_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
+    .return (rx840_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("200_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("200_1271336396.90314") :method
 .annotate "line", 4
-    $P839 = self."!PREFIX__!subrule"("", "Q:PIR")
-    new $P840, "ResizablePMCArray"
-    push $P840, $P839
-    .return ($P840)
+    $P842 = self."!PREFIX__!subrule"("", "Q:PIR")
+    new $P843, "ResizablePMCArray"
+    push $P843, $P842
+    .return ($P843)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym</ />"  :subid("201_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym</ />"  :subid("201_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx843_tgt
-    .local int rx843_pos
-    .local int rx843_off
-    .local int rx843_eos
-    .local int rx843_rep
-    .local pmc rx843_cur
-    (rx843_cur, rx843_pos, rx843_tgt) = self."!cursor_start"()
-    rx843_cur."!cursor_debug"("START ", "quote:sym</ />")
-    .lex unicode:"$\x{a2}", rx843_cur
+    .local string rx846_tgt
+    .local int rx846_pos
+    .local int rx846_off
+    .local int rx846_eos
+    .local int rx846_rep
+    .local pmc rx846_cur
+    (rx846_cur, rx846_pos, rx846_tgt) = self."!cursor_start"()
+    rx846_cur."!cursor_debug"("START ", "quote:sym</ />")
+    .lex unicode:"$\x{a2}", rx846_cur
     .local pmc match
     .lex "$/", match
-    length rx843_eos, rx843_tgt
-    set rx843_off, 0
-    lt rx843_pos, 2, rx843_start
-    sub rx843_off, rx843_pos, 1
-    substr rx843_tgt, rx843_tgt, rx843_off
-  rx843_start:
+    length rx846_eos, rx846_tgt
+    set rx846_off, 0
+    lt rx846_pos, 2, rx846_start
+    sub rx846_off, rx846_pos, 1
+    substr rx846_tgt, rx846_tgt, rx846_off
+  rx846_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan847_done
-    goto rxscan847_scan
-  rxscan847_loop:
-    ($P10) = rx843_cur."from"()
+    ne $I10, -1, rxscan850_done
+    goto rxscan850_scan
+  rxscan850_loop:
+    ($P10) = rx846_cur."from"()
     inc $P10
-    set rx843_pos, $P10
-    ge rx843_pos, rx843_eos, rxscan847_done
-  rxscan847_scan:
-    set_addr $I10, rxscan847_loop
-    rx843_cur."!mark_push"(0, rx843_pos, $I10)
-  rxscan847_done:
-.annotate "line", 396
+    set rx846_pos, $P10
+    ge rx846_pos, rx846_eos, rxscan850_done
+  rxscan850_scan:
+    set_addr $I10, rxscan850_loop
+    rx846_cur."!mark_push"(0, rx846_pos, $I10)
+  rxscan850_done:
+.annotate "line", 400
   # rx literal  "/"
-    add $I11, rx843_pos, 1
-    gt $I11, rx843_eos, rx843_fail
-    sub $I11, rx843_pos, rx843_off
-    substr $S10, rx843_tgt, $I11, 1
-    ne $S10, "/", rx843_fail
-    add rx843_pos, 1
-.annotate "line", 397
+    add $I11, rx846_pos, 1
+    gt $I11, rx846_eos, rx846_fail
+    sub $I11, rx846_pos, rx846_off
+    substr $S10, rx846_tgt, $I11, 1
+    ne $S10, "/", rx846_fail
+    add rx846_pos, 1
+.annotate "line", 401
   # rx subrule "newpad" subtype=method negate=
-    rx843_cur."!cursor_pos"(rx843_pos)
-    $P10 = rx843_cur."newpad"()
-    unless $P10, rx843_fail
-    rx843_pos = $P10."pos"()
-.annotate "line", 398
+    rx846_cur."!cursor_pos"(rx846_pos)
+    $P10 = rx846_cur."newpad"()
+    unless $P10, rx846_fail
+    rx846_pos = $P10."pos"()
+.annotate "line", 402
   # rx reduce name="quote:sym</ />" key="open"
-    rx843_cur."!cursor_pos"(rx843_pos)
-    rx843_cur."!reduce"("quote:sym</ />", "open")
-.annotate "line", 399
+    rx846_cur."!cursor_pos"(rx846_pos)
+    rx846_cur."!reduce"("quote:sym</ />", "open")
+.annotate "line", 403
   # rx subrule "LANG" subtype=capture negate=
-    rx843_cur."!cursor_pos"(rx843_pos)
-    $P10 = rx843_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx843_fail
-    rx843_cur."!mark_push"(0, -1, 0, $P10)
+    rx846_cur."!cursor_pos"(rx846_pos)
+    $P10 = rx846_cur."LANG"("Regex", "nibbler")
+    unless $P10, rx846_fail
+    rx846_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("p6regex")
-    rx843_pos = $P10."pos"()
-.annotate "line", 400
+    rx846_pos = $P10."pos"()
+.annotate "line", 404
   # rx literal  "/"
-    add $I11, rx843_pos, 1
-    gt $I11, rx843_eos, rx843_fail
-    sub $I11, rx843_pos, rx843_off
-    substr $S10, rx843_tgt, $I11, 1
-    ne $S10, "/", rx843_fail
-    add rx843_pos, 1
-.annotate "line", 395
+    add $I11, rx846_pos, 1
+    gt $I11, rx846_eos, rx846_fail
+    sub $I11, rx846_pos, rx846_off
+    substr $S10, rx846_tgt, $I11, 1
+    ne $S10, "/", rx846_fail
+    add rx846_pos, 1
+.annotate "line", 399
   # rx pass
-    rx843_cur."!cursor_pass"(rx843_pos, "quote:sym</ />")
-    rx843_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx843_pos)
-    .return (rx843_cur)
-  rx843_fail:
+    rx846_cur."!cursor_pass"(rx846_pos, "quote:sym</ />")
+    rx846_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx846_pos)
+    .return (rx846_cur)
+  rx846_fail:
 .annotate "line", 4
-    (rx843_rep, rx843_pos, $I10, $P10) = rx843_cur."!mark_fail"(0)
-    lt rx843_pos, -1, rx843_done
-    eq rx843_pos, -1, rx843_fail
+    (rx846_rep, rx846_pos, $I10, $P10) = rx846_cur."!mark_fail"(0)
+    lt rx846_pos, -1, rx846_done
+    eq rx846_pos, -1, rx846_fail
     jump $I10
-  rx843_done:
-    rx843_cur."!cursor_fail"()
-    rx843_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
-    .return (rx843_cur)
+  rx846_done:
+    rx846_cur."!cursor_fail"()
+    rx846_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
+    .return (rx846_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym</ />"  :subid("202_1267204702.05125") :method
+.sub "!PREFIX__quote:sym</ />"  :subid("202_1271336396.90314") :method
 .annotate "line", 4
-    $P845 = self."!PREFIX__!subrule"("", "/")
-    new $P846, "ResizablePMCArray"
-    push $P846, $P845
-    .return ($P846)
+    $P848 = self."!PREFIX__!subrule"("", "/")
+    new $P849, "ResizablePMCArray"
+    push $P849, $P848
+    .return ($P849)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<$>"  :subid("203_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote_escape:sym<$>"  :subid("203_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx849_tgt
-    .local int rx849_pos
-    .local int rx849_off
-    .local int rx849_eos
-    .local int rx849_rep
-    .local pmc rx849_cur
-    (rx849_cur, rx849_pos, rx849_tgt) = self."!cursor_start"()
-    rx849_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
-    .lex unicode:"$\x{a2}", rx849_cur
+    .local string rx852_tgt
+    .local int rx852_pos
+    .local int rx852_off
+    .local int rx852_eos
+    .local int rx852_rep
+    .local pmc rx852_cur
+    (rx852_cur, rx852_pos, rx852_tgt) = self."!cursor_start"()
+    rx852_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
+    .lex unicode:"$\x{a2}", rx852_cur
     .local pmc match
     .lex "$/", match
-    length rx849_eos, rx849_tgt
-    set rx849_off, 0
-    lt rx849_pos, 2, rx849_start
-    sub rx849_off, rx849_pos, 1
-    substr rx849_tgt, rx849_tgt, rx849_off
-  rx849_start:
+    length rx852_eos, rx852_tgt
+    set rx852_off, 0
+    lt rx852_pos, 2, rx852_start
+    sub rx852_off, rx852_pos, 1
+    substr rx852_tgt, rx852_tgt, rx852_off
+  rx852_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan852_done
-    goto rxscan852_scan
-  rxscan852_loop:
-    ($P10) = rx849_cur."from"()
+    ne $I10, -1, rxscan855_done
+    goto rxscan855_scan
+  rxscan855_loop:
+    ($P10) = rx852_cur."from"()
     inc $P10
-    set rx849_pos, $P10
-    ge rx849_pos, rx849_eos, rxscan852_done
-  rxscan852_scan:
-    set_addr $I10, rxscan852_loop
-    rx849_cur."!mark_push"(0, rx849_pos, $I10)
-  rxscan852_done:
-.annotate "line", 403
+    set rx852_pos, $P10
+    ge rx852_pos, rx852_eos, rxscan855_done
+  rxscan855_scan:
+    set_addr $I10, rxscan855_loop
+    rx852_cur."!mark_push"(0, rx852_pos, $I10)
+  rxscan855_done:
+.annotate "line", 407
   # rx enumcharlist negate=0 zerowidth
-    ge rx849_pos, rx849_eos, rx849_fail
-    sub $I10, rx849_pos, rx849_off
-    substr $S10, rx849_tgt, $I10, 1
+    ge rx852_pos, rx852_eos, rx852_fail
+    sub $I10, rx852_pos, rx852_off
+    substr $S10, rx852_tgt, $I10, 1
     index $I11, "$", $S10
-    lt $I11, 0, rx849_fail
+    lt $I11, 0, rx852_fail
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx849_cur."!cursor_pos"(rx849_pos)
-    $P10 = rx849_cur."quotemod_check"("s")
-    unless $P10, rx849_fail
+    rx852_cur."!cursor_pos"(rx852_pos)
+    $P10 = rx852_cur."quotemod_check"("s")
+    unless $P10, rx852_fail
   # rx subrule "variable" subtype=capture negate=
-    rx849_cur."!cursor_pos"(rx849_pos)
-    $P10 = rx849_cur."variable"()
-    unless $P10, rx849_fail
-    rx849_cur."!mark_push"(0, -1, 0, $P10)
+    rx852_cur."!cursor_pos"(rx852_pos)
+    $P10 = rx852_cur."variable"()
+    unless $P10, rx852_fail
+    rx852_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx849_pos = $P10."pos"()
+    rx852_pos = $P10."pos"()
   # rx pass
-    rx849_cur."!cursor_pass"(rx849_pos, "quote_escape:sym<$>")
-    rx849_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx849_pos)
-    .return (rx849_cur)
-  rx849_fail:
+    rx852_cur."!cursor_pass"(rx852_pos, "quote_escape:sym<$>")
+    rx852_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx852_pos)
+    .return (rx852_cur)
+  rx852_fail:
 .annotate "line", 4
-    (rx849_rep, rx849_pos, $I10, $P10) = rx849_cur."!mark_fail"(0)
-    lt rx849_pos, -1, rx849_done
-    eq rx849_pos, -1, rx849_fail
+    (rx852_rep, rx852_pos, $I10, $P10) = rx852_cur."!mark_fail"(0)
+    lt rx852_pos, -1, rx852_done
+    eq rx852_pos, -1, rx852_fail
     jump $I10
-  rx849_done:
-    rx849_cur."!cursor_fail"()
-    rx849_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
-    .return (rx849_cur)
+  rx852_done:
+    rx852_cur."!cursor_fail"()
+    rx852_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
+    .return (rx852_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<$>"  :subid("204_1267204702.05125") :method
+.sub "!PREFIX__quote_escape:sym<$>"  :subid("204_1271336396.90314") :method
 .annotate "line", 4
-    new $P851, "ResizablePMCArray"
-    push $P851, "$"
-    .return ($P851)
+    new $P854, "ResizablePMCArray"
+    push $P854, "$"
+    .return ($P854)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<{ }>"  :subid("205_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote_escape:sym<{ }>"  :subid("205_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx854_tgt
-    .local int rx854_pos
-    .local int rx854_off
-    .local int rx854_eos
-    .local int rx854_rep
-    .local pmc rx854_cur
-    (rx854_cur, rx854_pos, rx854_tgt) = self."!cursor_start"()
-    rx854_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx854_cur
+    .local string rx857_tgt
+    .local int rx857_pos
+    .local int rx857_off
+    .local int rx857_eos
+    .local int rx857_rep
+    .local pmc rx857_cur
+    (rx857_cur, rx857_pos, rx857_tgt) = self."!cursor_start"()
+    rx857_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx857_cur
     .local pmc match
     .lex "$/", match
-    length rx854_eos, rx854_tgt
-    set rx854_off, 0
-    lt rx854_pos, 2, rx854_start
-    sub rx854_off, rx854_pos, 1
-    substr rx854_tgt, rx854_tgt, rx854_off
-  rx854_start:
+    length rx857_eos, rx857_tgt
+    set rx857_off, 0
+    lt rx857_pos, 2, rx857_start
+    sub rx857_off, rx857_pos, 1
+    substr rx857_tgt, rx857_tgt, rx857_off
+  rx857_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan857_done
-    goto rxscan857_scan
-  rxscan857_loop:
-    ($P10) = rx854_cur."from"()
+    ne $I10, -1, rxscan860_done
+    goto rxscan860_scan
+  rxscan860_loop:
+    ($P10) = rx857_cur."from"()
     inc $P10
-    set rx854_pos, $P10
-    ge rx854_pos, rx854_eos, rxscan857_done
-  rxscan857_scan:
-    set_addr $I10, rxscan857_loop
-    rx854_cur."!mark_push"(0, rx854_pos, $I10)
-  rxscan857_done:
-.annotate "line", 404
+    set rx857_pos, $P10
+    ge rx857_pos, rx857_eos, rxscan860_done
+  rxscan860_scan:
+    set_addr $I10, rxscan860_loop
+    rx857_cur."!mark_push"(0, rx857_pos, $I10)
+  rxscan860_done:
+.annotate "line", 408
   # rx enumcharlist negate=0 zerowidth
-    ge rx854_pos, rx854_eos, rx854_fail
-    sub $I10, rx854_pos, rx854_off
-    substr $S10, rx854_tgt, $I10, 1
+    ge rx857_pos, rx857_eos, rx857_fail
+    sub $I10, rx857_pos, rx857_off
+    substr $S10, rx857_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx854_fail
+    lt $I11, 0, rx857_fail
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx854_cur."!cursor_pos"(rx854_pos)
-    $P10 = rx854_cur."quotemod_check"("c")
-    unless $P10, rx854_fail
+    rx857_cur."!cursor_pos"(rx857_pos)
+    $P10 = rx857_cur."quotemod_check"("c")
+    unless $P10, rx857_fail
   # rx subrule "block" subtype=capture negate=
-    rx854_cur."!cursor_pos"(rx854_pos)
-    $P10 = rx854_cur."block"()
-    unless $P10, rx854_fail
-    rx854_cur."!mark_push"(0, -1, 0, $P10)
+    rx857_cur."!cursor_pos"(rx857_pos)
+    $P10 = rx857_cur."block"()
+    unless $P10, rx857_fail
+    rx857_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx854_pos = $P10."pos"()
+    rx857_pos = $P10."pos"()
   # rx pass
-    rx854_cur."!cursor_pass"(rx854_pos, "quote_escape:sym<{ }>")
-    rx854_cur."!cursor_debug"("PASS  ", "quote_escape:sym<{ }>", " at pos=", rx854_pos)
-    .return (rx854_cur)
-  rx854_fail:
+    rx857_cur."!cursor_pass"(rx857_pos, "quote_escape:sym<{ }>")
+    rx857_cur."!cursor_debug"("PASS  ", "quote_escape:sym<{ }>", " at pos=", rx857_pos)
+    .return (rx857_cur)
+  rx857_fail:
 .annotate "line", 4
-    (rx854_rep, rx854_pos, $I10, $P10) = rx854_cur."!mark_fail"(0)
-    lt rx854_pos, -1, rx854_done
-    eq rx854_pos, -1, rx854_fail
+    (rx857_rep, rx857_pos, $I10, $P10) = rx857_cur."!mark_fail"(0)
+    lt rx857_pos, -1, rx857_done
+    eq rx857_pos, -1, rx857_fail
     jump $I10
-  rx854_done:
-    rx854_cur."!cursor_fail"()
-    rx854_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
-    .return (rx854_cur)
+  rx857_done:
+    rx857_cur."!cursor_fail"()
+    rx857_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
+    .return (rx857_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("206_1267204702.05125") :method
+.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("206_1271336396.90314") :method
 .annotate "line", 4
-    new $P856, "ResizablePMCArray"
-    push $P856, "{"
-    .return ($P856)
+    new $P859, "ResizablePMCArray"
+    push $P859, "{"
+    .return ($P859)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<( )>"  :subid("207_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<( )>"  :subid("207_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx859_tgt
-    .local int rx859_pos
-    .local int rx859_off
-    .local int rx859_eos
-    .local int rx859_rep
-    .local pmc rx859_cur
-    (rx859_cur, rx859_pos, rx859_tgt) = self."!cursor_start"()
-    rx859_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
-    rx859_cur."!cursor_caparray"("EXPR")
-    .lex unicode:"$\x{a2}", rx859_cur
+    .local string rx862_tgt
+    .local int rx862_pos
+    .local int rx862_off
+    .local int rx862_eos
+    .local int rx862_rep
+    .local pmc rx862_cur
+    (rx862_cur, rx862_pos, rx862_tgt) = self."!cursor_start"()
+    rx862_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
+    rx862_cur."!cursor_caparray"("EXPR")
+    .lex unicode:"$\x{a2}", rx862_cur
     .local pmc match
     .lex "$/", match
-    length rx859_eos, rx859_tgt
-    set rx859_off, 0
-    lt rx859_pos, 2, rx859_start
-    sub rx859_off, rx859_pos, 1
-    substr rx859_tgt, rx859_tgt, rx859_off
-  rx859_start:
+    length rx862_eos, rx862_tgt
+    set rx862_off, 0
+    lt rx862_pos, 2, rx862_start
+    sub rx862_off, rx862_pos, 1
+    substr rx862_tgt, rx862_tgt, rx862_off
+  rx862_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan863_done
-    goto rxscan863_scan
-  rxscan863_loop:
-    ($P10) = rx859_cur."from"()
+    ne $I10, -1, rxscan866_done
+    goto rxscan866_scan
+  rxscan866_loop:
+    ($P10) = rx862_cur."from"()
     inc $P10
-    set rx859_pos, $P10
-    ge rx859_pos, rx859_eos, rxscan863_done
-  rxscan863_scan:
-    set_addr $I10, rxscan863_loop
-    rx859_cur."!mark_push"(0, rx859_pos, $I10)
-  rxscan863_done:
-.annotate "line", 406
+    set rx862_pos, $P10
+    ge rx862_pos, rx862_eos, rxscan866_done
+  rxscan866_scan:
+    set_addr $I10, rxscan866_loop
+    rx862_cur."!mark_push"(0, rx862_pos, $I10)
+  rxscan866_done:
+.annotate "line", 410
   # rx literal  "("
-    add $I11, rx859_pos, 1
-    gt $I11, rx859_eos, rx859_fail
-    sub $I11, rx859_pos, rx859_off
-    substr $S10, rx859_tgt, $I11, 1
-    ne $S10, "(", rx859_fail
-    add rx859_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx859_cur."!cursor_pos"(rx859_pos)
-    $P10 = rx859_cur."ws"()
-    unless $P10, rx859_fail
-    rx859_pos = $P10."pos"()
-  # rx rxquantr864 ** 0..1
-    set_addr $I865, rxquantr864_done
-    rx859_cur."!mark_push"(0, rx859_pos, $I865)
-  rxquantr864_loop:
+    add $I11, rx862_pos, 1
+    gt $I11, rx862_eos, rx862_fail
+    sub $I11, rx862_pos, rx862_off
+    substr $S10, rx862_tgt, $I11, 1
+    ne $S10, "(", rx862_fail
+    add rx862_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx862_cur."!cursor_pos"(rx862_pos)
+    $P10 = rx862_cur."ws"()
+    unless $P10, rx862_fail
+    rx862_pos = $P10."pos"()
+  # rx rxquantr867 ** 0..1
+    set_addr $I868, rxquantr867_done
+    rx862_cur."!mark_push"(0, rx862_pos, $I868)
+  rxquantr867_loop:
   # rx subrule "EXPR" subtype=capture negate=
-    rx859_cur."!cursor_pos"(rx859_pos)
-    $P10 = rx859_cur."EXPR"()
-    unless $P10, rx859_fail
-    rx859_cur."!mark_push"(0, -1, 0, $P10)
+    rx862_cur."!cursor_pos"(rx862_pos)
+    $P10 = rx862_cur."EXPR"()
+    unless $P10, rx862_fail
+    rx862_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx859_pos = $P10."pos"()
-    (rx859_rep) = rx859_cur."!mark_commit"($I865)
-  rxquantr864_done:
+    rx862_pos = $P10."pos"()
+    (rx862_rep) = rx862_cur."!mark_commit"($I868)
+  rxquantr867_done:
   # rx literal  ")"
-    add $I11, rx859_pos, 1
-    gt $I11, rx859_eos, rx859_fail
-    sub $I11, rx859_pos, rx859_off
-    substr $S10, rx859_tgt, $I11, 1
-    ne $S10, ")", rx859_fail
-    add rx859_pos, 1
+    add $I11, rx862_pos, 1
+    gt $I11, rx862_eos, rx862_fail
+    sub $I11, rx862_pos, rx862_off
+    substr $S10, rx862_tgt, $I11, 1
+    ne $S10, ")", rx862_fail
+    add rx862_pos, 1
   # rx pass
-    rx859_cur."!cursor_pass"(rx859_pos, "circumfix:sym<( )>")
-    rx859_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx859_pos)
-    .return (rx859_cur)
-  rx859_fail:
+    rx862_cur."!cursor_pass"(rx862_pos, "circumfix:sym<( )>")
+    rx862_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx862_pos)
+    .return (rx862_cur)
+  rx862_fail:
 .annotate "line", 4
-    (rx859_rep, rx859_pos, $I10, $P10) = rx859_cur."!mark_fail"(0)
-    lt rx859_pos, -1, rx859_done
-    eq rx859_pos, -1, rx859_fail
+    (rx862_rep, rx862_pos, $I10, $P10) = rx862_cur."!mark_fail"(0)
+    lt rx862_pos, -1, rx862_done
+    eq rx862_pos, -1, rx862_fail
     jump $I10
-  rx859_done:
-    rx859_cur."!cursor_fail"()
-    rx859_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
-    .return (rx859_cur)
+  rx862_done:
+    rx862_cur."!cursor_fail"()
+    rx862_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
+    .return (rx862_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<( )>"  :subid("208_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<( )>"  :subid("208_1271336396.90314") :method
 .annotate "line", 4
-    $P861 = self."!PREFIX__!subrule"("", "(")
-    new $P862, "ResizablePMCArray"
-    push $P862, $P861
-    .return ($P862)
+    $P864 = self."!PREFIX__!subrule"("", "(")
+    new $P865, "ResizablePMCArray"
+    push $P865, $P864
+    .return ($P865)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<[ ]>"  :subid("209_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<[ ]>"  :subid("209_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx867_tgt
-    .local int rx867_pos
-    .local int rx867_off
-    .local int rx867_eos
-    .local int rx867_rep
-    .local pmc rx867_cur
-    (rx867_cur, rx867_pos, rx867_tgt) = self."!cursor_start"()
-    rx867_cur."!cursor_debug"("START ", "circumfix:sym<[ ]>")
-    rx867_cur."!cursor_caparray"("EXPR")
-    .lex unicode:"$\x{a2}", rx867_cur
+    .local string rx870_tgt
+    .local int rx870_pos
+    .local int rx870_off
+    .local int rx870_eos
+    .local int rx870_rep
+    .local pmc rx870_cur
+    (rx870_cur, rx870_pos, rx870_tgt) = self."!cursor_start"()
+    rx870_cur."!cursor_debug"("START ", "circumfix:sym<[ ]>")
+    rx870_cur."!cursor_caparray"("EXPR")
+    .lex unicode:"$\x{a2}", rx870_cur
     .local pmc match
     .lex "$/", match
-    length rx867_eos, rx867_tgt
-    set rx867_off, 0
-    lt rx867_pos, 2, rx867_start
-    sub rx867_off, rx867_pos, 1
-    substr rx867_tgt, rx867_tgt, rx867_off
-  rx867_start:
+    length rx870_eos, rx870_tgt
+    set rx870_off, 0
+    lt rx870_pos, 2, rx870_start
+    sub rx870_off, rx870_pos, 1
+    substr rx870_tgt, rx870_tgt, rx870_off
+  rx870_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan871_done
-    goto rxscan871_scan
-  rxscan871_loop:
-    ($P10) = rx867_cur."from"()
+    ne $I10, -1, rxscan874_done
+    goto rxscan874_scan
+  rxscan874_loop:
+    ($P10) = rx870_cur."from"()
     inc $P10
-    set rx867_pos, $P10
-    ge rx867_pos, rx867_eos, rxscan871_done
-  rxscan871_scan:
-    set_addr $I10, rxscan871_loop
-    rx867_cur."!mark_push"(0, rx867_pos, $I10)
-  rxscan871_done:
-.annotate "line", 407
+    set rx870_pos, $P10
+    ge rx870_pos, rx870_eos, rxscan874_done
+  rxscan874_scan:
+    set_addr $I10, rxscan874_loop
+    rx870_cur."!mark_push"(0, rx870_pos, $I10)
+  rxscan874_done:
+.annotate "line", 411
   # rx literal  "["
-    add $I11, rx867_pos, 1
-    gt $I11, rx867_eos, rx867_fail
-    sub $I11, rx867_pos, rx867_off
-    substr $S10, rx867_tgt, $I11, 1
-    ne $S10, "[", rx867_fail
-    add rx867_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx867_cur."!cursor_pos"(rx867_pos)
-    $P10 = rx867_cur."ws"()
-    unless $P10, rx867_fail
-    rx867_pos = $P10."pos"()
-  # rx rxquantr872 ** 0..1
-    set_addr $I873, rxquantr872_done
-    rx867_cur."!mark_push"(0, rx867_pos, $I873)
-  rxquantr872_loop:
+    add $I11, rx870_pos, 1
+    gt $I11, rx870_eos, rx870_fail
+    sub $I11, rx870_pos, rx870_off
+    substr $S10, rx870_tgt, $I11, 1
+    ne $S10, "[", rx870_fail
+    add rx870_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx870_cur."!cursor_pos"(rx870_pos)
+    $P10 = rx870_cur."ws"()
+    unless $P10, rx870_fail
+    rx870_pos = $P10."pos"()
+  # rx rxquantr875 ** 0..1
+    set_addr $I876, rxquantr875_done
+    rx870_cur."!mark_push"(0, rx870_pos, $I876)
+  rxquantr875_loop:
   # rx subrule "EXPR" subtype=capture negate=
-    rx867_cur."!cursor_pos"(rx867_pos)
-    $P10 = rx867_cur."EXPR"()
-    unless $P10, rx867_fail
-    rx867_cur."!mark_push"(0, -1, 0, $P10)
+    rx870_cur."!cursor_pos"(rx870_pos)
+    $P10 = rx870_cur."EXPR"()
+    unless $P10, rx870_fail
+    rx870_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx867_pos = $P10."pos"()
-    (rx867_rep) = rx867_cur."!mark_commit"($I873)
-  rxquantr872_done:
+    rx870_pos = $P10."pos"()
+    (rx870_rep) = rx870_cur."!mark_commit"($I876)
+  rxquantr875_done:
   # rx literal  "]"
-    add $I11, rx867_pos, 1
-    gt $I11, rx867_eos, rx867_fail
-    sub $I11, rx867_pos, rx867_off
-    substr $S10, rx867_tgt, $I11, 1
-    ne $S10, "]", rx867_fail
-    add rx867_pos, 1
+    add $I11, rx870_pos, 1
+    gt $I11, rx870_eos, rx870_fail
+    sub $I11, rx870_pos, rx870_off
+    substr $S10, rx870_tgt, $I11, 1
+    ne $S10, "]", rx870_fail
+    add rx870_pos, 1
   # rx pass
-    rx867_cur."!cursor_pass"(rx867_pos, "circumfix:sym<[ ]>")
-    rx867_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx867_pos)
-    .return (rx867_cur)
-  rx867_fail:
+    rx870_cur."!cursor_pass"(rx870_pos, "circumfix:sym<[ ]>")
+    rx870_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx870_pos)
+    .return (rx870_cur)
+  rx870_fail:
 .annotate "line", 4
-    (rx867_rep, rx867_pos, $I10, $P10) = rx867_cur."!mark_fail"(0)
-    lt rx867_pos, -1, rx867_done
-    eq rx867_pos, -1, rx867_fail
+    (rx870_rep, rx870_pos, $I10, $P10) = rx870_cur."!mark_fail"(0)
+    lt rx870_pos, -1, rx870_done
+    eq rx870_pos, -1, rx870_fail
     jump $I10
-  rx867_done:
-    rx867_cur."!cursor_fail"()
-    rx867_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
-    .return (rx867_cur)
+  rx870_done:
+    rx870_cur."!cursor_fail"()
+    rx870_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
+    .return (rx870_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("210_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("210_1271336396.90314") :method
 .annotate "line", 4
-    $P869 = self."!PREFIX__!subrule"("", "[")
-    new $P870, "ResizablePMCArray"
-    push $P870, $P869
-    .return ($P870)
+    $P872 = self."!PREFIX__!subrule"("", "[")
+    new $P873, "ResizablePMCArray"
+    push $P873, $P872
+    .return ($P873)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<ang>"  :subid("211_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<ang>"  :subid("211_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx875_tgt
-    .local int rx875_pos
-    .local int rx875_off
-    .local int rx875_eos
-    .local int rx875_rep
-    .local pmc rx875_cur
-    (rx875_cur, rx875_pos, rx875_tgt) = self."!cursor_start"()
-    rx875_cur."!cursor_debug"("START ", "circumfix:sym<ang>")
-    .lex unicode:"$\x{a2}", rx875_cur
-    .local pmc match
-    .lex "$/", match
-    length rx875_eos, rx875_tgt
-    set rx875_off, 0
-    lt rx875_pos, 2, rx875_start
-    sub rx875_off, rx875_pos, 1
-    substr rx875_tgt, rx875_tgt, rx875_off
-  rx875_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan878_done
-    goto rxscan878_scan
-  rxscan878_loop:
-    ($P10) = rx875_cur."from"()
-    inc $P10
-    set rx875_pos, $P10
-    ge rx875_pos, rx875_eos, rxscan878_done
-  rxscan878_scan:
-    set_addr $I10, rxscan878_loop
-    rx875_cur."!mark_push"(0, rx875_pos, $I10)
-  rxscan878_done:
-.annotate "line", 408
+    .local string rx878_tgt
+    .local int rx878_pos
+    .local int rx878_off
+    .local int rx878_eos
+    .local int rx878_rep
+    .local pmc rx878_cur
+    (rx878_cur, rx878_pos, rx878_tgt) = self."!cursor_start"()
+    rx878_cur."!cursor_debug"("START ", "circumfix:sym<ang>")
+    .lex unicode:"$\x{a2}", rx878_cur
+    .local pmc match
+    .lex "$/", match
+    length rx878_eos, rx878_tgt
+    set rx878_off, 0
+    lt rx878_pos, 2, rx878_start
+    sub rx878_off, rx878_pos, 1
+    substr rx878_tgt, rx878_tgt, rx878_off
+  rx878_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan881_done
+    goto rxscan881_scan
+  rxscan881_loop:
+    ($P10) = rx878_cur."from"()
+    inc $P10
+    set rx878_pos, $P10
+    ge rx878_pos, rx878_eos, rxscan881_done
+  rxscan881_scan:
+    set_addr $I10, rxscan881_loop
+    rx878_cur."!mark_push"(0, rx878_pos, $I10)
+  rxscan881_done:
+.annotate "line", 412
   # rx enumcharlist negate=0 zerowidth
-    ge rx875_pos, rx875_eos, rx875_fail
-    sub $I10, rx875_pos, rx875_off
-    substr $S10, rx875_tgt, $I10, 1
+    ge rx878_pos, rx878_eos, rx878_fail
+    sub $I10, rx878_pos, rx878_off
+    substr $S10, rx878_tgt, $I10, 1
     index $I11, "<", $S10
-    lt $I11, 0, rx875_fail
+    lt $I11, 0, rx878_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx875_cur."!cursor_pos"(rx875_pos)
-    $P10 = rx875_cur."quote_EXPR"(":q", ":w")
-    unless $P10, rx875_fail
-    rx875_cur."!mark_push"(0, -1, 0, $P10)
+    rx878_cur."!cursor_pos"(rx878_pos)
+    $P10 = rx878_cur."quote_EXPR"(":q", ":w")
+    unless $P10, rx878_fail
+    rx878_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx875_pos = $P10."pos"()
+    rx878_pos = $P10."pos"()
   # rx pass
-    rx875_cur."!cursor_pass"(rx875_pos, "circumfix:sym<ang>")
-    rx875_cur."!cursor_debug"("PASS  ", "circumfix:sym<ang>", " at pos=", rx875_pos)
-    .return (rx875_cur)
-  rx875_fail:
+    rx878_cur."!cursor_pass"(rx878_pos, "circumfix:sym<ang>")
+    rx878_cur."!cursor_debug"("PASS  ", "circumfix:sym<ang>", " at pos=", rx878_pos)
+    .return (rx878_cur)
+  rx878_fail:
 .annotate "line", 4
-    (rx875_rep, rx875_pos, $I10, $P10) = rx875_cur."!mark_fail"(0)
-    lt rx875_pos, -1, rx875_done
-    eq rx875_pos, -1, rx875_fail
+    (rx878_rep, rx878_pos, $I10, $P10) = rx878_cur."!mark_fail"(0)
+    lt rx878_pos, -1, rx878_done
+    eq rx878_pos, -1, rx878_fail
     jump $I10
-  rx875_done:
-    rx875_cur."!cursor_fail"()
-    rx875_cur."!cursor_debug"("FAIL  ", "circumfix:sym<ang>")
-    .return (rx875_cur)
+  rx878_done:
+    rx878_cur."!cursor_fail"()
+    rx878_cur."!cursor_debug"("FAIL  ", "circumfix:sym<ang>")
+    .return (rx878_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<ang>"  :subid("212_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<ang>"  :subid("212_1271336396.90314") :method
 .annotate "line", 4
-    new $P877, "ResizablePMCArray"
-    push $P877, "<"
-    .return ($P877)
+    new $P880, "ResizablePMCArray"
+    push $P880, "<"
+    .return ($P880)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("213_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("213_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx880_tgt
-    .local int rx880_pos
-    .local int rx880_off
-    .local int rx880_eos
-    .local int rx880_rep
-    .local pmc rx880_cur
-    (rx880_cur, rx880_pos, rx880_tgt) = self."!cursor_start"()
-    rx880_cur."!cursor_debug"("START ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    .lex unicode:"$\x{a2}", rx880_cur
+    .local string rx883_tgt
+    .local int rx883_pos
+    .local int rx883_off
+    .local int rx883_eos
+    .local int rx883_rep
+    .local pmc rx883_cur
+    (rx883_cur, rx883_pos, rx883_tgt) = self."!cursor_start"()
+    rx883_cur."!cursor_debug"("START ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    .lex unicode:"$\x{a2}", rx883_cur
     .local pmc match
     .lex "$/", match
-    length rx880_eos, rx880_tgt
-    set rx880_off, 0
-    lt rx880_pos, 2, rx880_start
-    sub rx880_off, rx880_pos, 1
-    substr rx880_tgt, rx880_tgt, rx880_off
-  rx880_start:
+    length rx883_eos, rx883_tgt
+    set rx883_off, 0
+    lt rx883_pos, 2, rx883_start
+    sub rx883_off, rx883_pos, 1
+    substr rx883_tgt, rx883_tgt, rx883_off
+  rx883_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan883_done
-    goto rxscan883_scan
-  rxscan883_loop:
-    ($P10) = rx880_cur."from"()
+    ne $I10, -1, rxscan886_done
+    goto rxscan886_scan
+  rxscan886_loop:
+    ($P10) = rx883_cur."from"()
     inc $P10
-    set rx880_pos, $P10
-    ge rx880_pos, rx880_eos, rxscan883_done
-  rxscan883_scan:
-    set_addr $I10, rxscan883_loop
-    rx880_cur."!mark_push"(0, rx880_pos, $I10)
-  rxscan883_done:
-.annotate "line", 409
+    set rx883_pos, $P10
+    ge rx883_pos, rx883_eos, rxscan886_done
+  rxscan886_scan:
+    set_addr $I10, rxscan886_loop
+    rx883_cur."!mark_push"(0, rx883_pos, $I10)
+  rxscan886_done:
+.annotate "line", 413
   # rx enumcharlist negate=0 zerowidth
-    ge rx880_pos, rx880_eos, rx880_fail
-    sub $I10, rx880_pos, rx880_off
-    substr $S10, rx880_tgt, $I10, 1
+    ge rx883_pos, rx883_eos, rx883_fail
+    sub $I10, rx883_pos, rx883_off
+    substr $S10, rx883_tgt, $I10, 1
     index $I11, unicode:"\x{ab}", $S10
-    lt $I11, 0, rx880_fail
+    lt $I11, 0, rx883_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx880_cur."!cursor_pos"(rx880_pos)
-    $P10 = rx880_cur."quote_EXPR"(":qq", ":w")
-    unless $P10, rx880_fail
-    rx880_cur."!mark_push"(0, -1, 0, $P10)
+    rx883_cur."!cursor_pos"(rx883_pos)
+    $P10 = rx883_cur."quote_EXPR"(":qq", ":w")
+    unless $P10, rx883_fail
+    rx883_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx880_pos = $P10."pos"()
+    rx883_pos = $P10."pos"()
   # rx pass
-    rx880_cur."!cursor_pass"(rx880_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    rx880_cur."!cursor_debug"("PASS  ", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx880_pos)
-    .return (rx880_cur)
-  rx880_fail:
+    rx883_cur."!cursor_pass"(rx883_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    rx883_cur."!cursor_debug"("PASS  ", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx883_pos)
+    .return (rx883_cur)
+  rx883_fail:
 .annotate "line", 4
-    (rx880_rep, rx880_pos, $I10, $P10) = rx880_cur."!mark_fail"(0)
-    lt rx880_pos, -1, rx880_done
-    eq rx880_pos, -1, rx880_fail
+    (rx883_rep, rx883_pos, $I10, $P10) = rx883_cur."!mark_fail"(0)
+    lt rx883_pos, -1, rx883_done
+    eq rx883_pos, -1, rx883_fail
     jump $I10
-  rx880_done:
-    rx880_cur."!cursor_fail"()
-    rx880_cur."!cursor_debug"("FAIL  ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    .return (rx880_cur)
+  rx883_done:
+    rx883_cur."!cursor_fail"()
+    rx883_cur."!cursor_debug"("FAIL  ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    .return (rx883_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("214_1267204702.05125") :method
+.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("214_1271336396.90314") :method
 .annotate "line", 4
-    new $P882, "ResizablePMCArray"
-    push $P882, unicode:"\x{ab}"
-    .return ($P882)
+    new $P885, "ResizablePMCArray"
+    push $P885, unicode:"\x{ab}"
+    .return ($P885)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<{ }>"  :subid("215_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<{ }>"  :subid("215_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx885_tgt
-    .local int rx885_pos
-    .local int rx885_off
-    .local int rx885_eos
-    .local int rx885_rep
-    .local pmc rx885_cur
-    (rx885_cur, rx885_pos, rx885_tgt) = self."!cursor_start"()
-    rx885_cur."!cursor_debug"("START ", "circumfix:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx885_cur
+    .local string rx888_tgt
+    .local int rx888_pos
+    .local int rx888_off
+    .local int rx888_eos
+    .local int rx888_rep
+    .local pmc rx888_cur
+    (rx888_cur, rx888_pos, rx888_tgt) = self."!cursor_start"()
+    rx888_cur."!cursor_debug"("START ", "circumfix:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx888_cur
     .local pmc match
     .lex "$/", match
-    length rx885_eos, rx885_tgt
-    set rx885_off, 0
-    lt rx885_pos, 2, rx885_start
-    sub rx885_off, rx885_pos, 1
-    substr rx885_tgt, rx885_tgt, rx885_off
-  rx885_start:
+    length rx888_eos, rx888_tgt
+    set rx888_off, 0
+    lt rx888_pos, 2, rx888_start
+    sub rx888_off, rx888_pos, 1
+    substr rx888_tgt, rx888_tgt, rx888_off
+  rx888_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan888_done
-    goto rxscan888_scan
-  rxscan888_loop:
-    ($P10) = rx885_cur."from"()
+    ne $I10, -1, rxscan891_done
+    goto rxscan891_scan
+  rxscan891_loop:
+    ($P10) = rx888_cur."from"()
     inc $P10
-    set rx885_pos, $P10
-    ge rx885_pos, rx885_eos, rxscan888_done
-  rxscan888_scan:
-    set_addr $I10, rxscan888_loop
-    rx885_cur."!mark_push"(0, rx885_pos, $I10)
-  rxscan888_done:
-.annotate "line", 410
+    set rx888_pos, $P10
+    ge rx888_pos, rx888_eos, rxscan891_done
+  rxscan891_scan:
+    set_addr $I10, rxscan891_loop
+    rx888_cur."!mark_push"(0, rx888_pos, $I10)
+  rxscan891_done:
+.annotate "line", 414
   # rx enumcharlist negate=0 zerowidth
-    ge rx885_pos, rx885_eos, rx885_fail
-    sub $I10, rx885_pos, rx885_off
-    substr $S10, rx885_tgt, $I10, 1
+    ge rx888_pos, rx888_eos, rx888_fail
+    sub $I10, rx888_pos, rx888_off
+    substr $S10, rx888_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx885_fail
+    lt $I11, 0, rx888_fail
   # rx subrule "pblock" subtype=capture negate=
-    rx885_cur."!cursor_pos"(rx885_pos)
-    $P10 = rx885_cur."pblock"()
-    unless $P10, rx885_fail
-    rx885_cur."!mark_push"(0, -1, 0, $P10)
+    rx888_cur."!cursor_pos"(rx888_pos)
+    $P10 = rx888_cur."pblock"()
+    unless $P10, rx888_fail
+    rx888_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx885_pos = $P10."pos"()
+    rx888_pos = $P10."pos"()
   # rx pass
-    rx885_cur."!cursor_pass"(rx885_pos, "circumfix:sym<{ }>")
-    rx885_cur."!cursor_debug"("PASS  ", "circumfix:sym<{ }>", " at pos=", rx885_pos)
-    .return (rx885_cur)
-  rx885_fail:
+    rx888_cur."!cursor_pass"(rx888_pos, "circumfix:sym<{ }>")
+    rx888_cur."!cursor_debug"("PASS  ", "circumfix:sym<{ }>", " at pos=", rx888_pos)
+    .return (rx888_cur)
+  rx888_fail:
 .annotate "line", 4
-    (rx885_rep, rx885_pos, $I10, $P10) = rx885_cur."!mark_fail"(0)
-    lt rx885_pos, -1, rx885_done
-    eq rx885_pos, -1, rx885_fail
+    (rx888_rep, rx888_pos, $I10, $P10) = rx888_cur."!mark_fail"(0)
+    lt rx888_pos, -1, rx888_done
+    eq rx888_pos, -1, rx888_fail
     jump $I10
-  rx885_done:
-    rx885_cur."!cursor_fail"()
-    rx885_cur."!cursor_debug"("FAIL  ", "circumfix:sym<{ }>")
-    .return (rx885_cur)
+  rx888_done:
+    rx888_cur."!cursor_fail"()
+    rx888_cur."!cursor_debug"("FAIL  ", "circumfix:sym<{ }>")
+    .return (rx888_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<{ }>"  :subid("216_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<{ }>"  :subid("216_1271336396.90314") :method
 .annotate "line", 4
-    new $P887, "ResizablePMCArray"
-    push $P887, "{"
-    .return ($P887)
+    new $P890, "ResizablePMCArray"
+    push $P890, "{"
+    .return ($P890)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<sigil>"  :subid("217_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<sigil>"  :subid("217_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx890_tgt
-    .local int rx890_pos
-    .local int rx890_off
-    .local int rx890_eos
-    .local int rx890_rep
-    .local pmc rx890_cur
-    (rx890_cur, rx890_pos, rx890_tgt) = self."!cursor_start"()
-    rx890_cur."!cursor_debug"("START ", "circumfix:sym<sigil>")
-    .lex unicode:"$\x{a2}", rx890_cur
+    .local string rx893_tgt
+    .local int rx893_pos
+    .local int rx893_off
+    .local int rx893_eos
+    .local int rx893_rep
+    .local pmc rx893_cur
+    (rx893_cur, rx893_pos, rx893_tgt) = self."!cursor_start"()
+    rx893_cur."!cursor_debug"("START ", "circumfix:sym<sigil>")
+    .lex unicode:"$\x{a2}", rx893_cur
     .local pmc match
     .lex "$/", match
-    length rx890_eos, rx890_tgt
-    set rx890_off, 0
-    lt rx890_pos, 2, rx890_start
-    sub rx890_off, rx890_pos, 1
-    substr rx890_tgt, rx890_tgt, rx890_off
-  rx890_start:
+    length rx893_eos, rx893_tgt
+    set rx893_off, 0
+    lt rx893_pos, 2, rx893_start
+    sub rx893_off, rx893_pos, 1
+    substr rx893_tgt, rx893_tgt, rx893_off
+  rx893_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan894_done
-    goto rxscan894_scan
-  rxscan894_loop:
-    ($P10) = rx890_cur."from"()
+    ne $I10, -1, rxscan897_done
+    goto rxscan897_scan
+  rxscan897_loop:
+    ($P10) = rx893_cur."from"()
     inc $P10
-    set rx890_pos, $P10
-    ge rx890_pos, rx890_eos, rxscan894_done
-  rxscan894_scan:
-    set_addr $I10, rxscan894_loop
-    rx890_cur."!mark_push"(0, rx890_pos, $I10)
-  rxscan894_done:
-.annotate "line", 411
+    set rx893_pos, $P10
+    ge rx893_pos, rx893_eos, rxscan897_done
+  rxscan897_scan:
+    set_addr $I10, rxscan897_loop
+    rx893_cur."!mark_push"(0, rx893_pos, $I10)
+  rxscan897_done:
+.annotate "line", 415
   # rx subrule "sigil" subtype=capture negate=
-    rx890_cur."!cursor_pos"(rx890_pos)
-    $P10 = rx890_cur."sigil"()
-    unless $P10, rx890_fail
-    rx890_cur."!mark_push"(0, -1, 0, $P10)
+    rx893_cur."!cursor_pos"(rx893_pos)
+    $P10 = rx893_cur."sigil"()
+    unless $P10, rx893_fail
+    rx893_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx890_pos = $P10."pos"()
+    rx893_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx890_pos, 1
-    gt $I11, rx890_eos, rx890_fail
-    sub $I11, rx890_pos, rx890_off
-    substr $S10, rx890_tgt, $I11, 1
-    ne $S10, "(", rx890_fail
-    add rx890_pos, 1
+    add $I11, rx893_pos, 1
+    gt $I11, rx893_eos, rx893_fail
+    sub $I11, rx893_pos, rx893_off
+    substr $S10, rx893_tgt, $I11, 1
+    ne $S10, "(", rx893_fail
+    add rx893_pos, 1
   # rx subrule "semilist" subtype=capture negate=
-    rx890_cur."!cursor_pos"(rx890_pos)
-    $P10 = rx890_cur."semilist"()
-    unless $P10, rx890_fail
-    rx890_cur."!mark_push"(0, -1, 0, $P10)
+    rx893_cur."!cursor_pos"(rx893_pos)
+    $P10 = rx893_cur."semilist"()
+    unless $P10, rx893_fail
+    rx893_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("semilist")
-    rx890_pos = $P10."pos"()
-  alt895_0:
-    set_addr $I10, alt895_1
-    rx890_cur."!mark_push"(0, rx890_pos, $I10)
+    rx893_pos = $P10."pos"()
+  alt898_0:
+    set_addr $I10, alt898_1
+    rx893_cur."!mark_push"(0, rx893_pos, $I10)
   # rx literal  ")"
-    add $I11, rx890_pos, 1
-    gt $I11, rx890_eos, rx890_fail
-    sub $I11, rx890_pos, rx890_off
-    substr $S10, rx890_tgt, $I11, 1
-    ne $S10, ")", rx890_fail
-    add rx890_pos, 1
-    goto alt895_end
-  alt895_1:
+    add $I11, rx893_pos, 1
+    gt $I11, rx893_eos, rx893_fail
+    sub $I11, rx893_pos, rx893_off
+    substr $S10, rx893_tgt, $I11, 1
+    ne $S10, ")", rx893_fail
+    add rx893_pos, 1
+    goto alt898_end
+  alt898_1:
   # rx subrule "FAILGOAL" subtype=method negate=
-    rx890_cur."!cursor_pos"(rx890_pos)
-    $P10 = rx890_cur."FAILGOAL"("')'")
-    unless $P10, rx890_fail
-    rx890_pos = $P10."pos"()
-  alt895_end:
+    rx893_cur."!cursor_pos"(rx893_pos)
+    $P10 = rx893_cur."FAILGOAL"("')'")
+    unless $P10, rx893_fail
+    rx893_pos = $P10."pos"()
+  alt898_end:
   # rx pass
-    rx890_cur."!cursor_pass"(rx890_pos, "circumfix:sym<sigil>")
-    rx890_cur."!cursor_debug"("PASS  ", "circumfix:sym<sigil>", " at pos=", rx890_pos)
-    .return (rx890_cur)
-  rx890_fail:
+    rx893_cur."!cursor_pass"(rx893_pos, "circumfix:sym<sigil>")
+    rx893_cur."!cursor_debug"("PASS  ", "circumfix:sym<sigil>", " at pos=", rx893_pos)
+    .return (rx893_cur)
+  rx893_fail:
 .annotate "line", 4
-    (rx890_rep, rx890_pos, $I10, $P10) = rx890_cur."!mark_fail"(0)
-    lt rx890_pos, -1, rx890_done
-    eq rx890_pos, -1, rx890_fail
+    (rx893_rep, rx893_pos, $I10, $P10) = rx893_cur."!mark_fail"(0)
+    lt rx893_pos, -1, rx893_done
+    eq rx893_pos, -1, rx893_fail
     jump $I10
-  rx890_done:
-    rx890_cur."!cursor_fail"()
-    rx890_cur."!cursor_debug"("FAIL  ", "circumfix:sym<sigil>")
-    .return (rx890_cur)
+  rx893_done:
+    rx893_cur."!cursor_fail"()
+    rx893_cur."!cursor_debug"("FAIL  ", "circumfix:sym<sigil>")
+    .return (rx893_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<sigil>"  :subid("218_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<sigil>"  :subid("218_1271336396.90314") :method
 .annotate "line", 4
-    $P892 = self."!PREFIX__!subrule"("sigil", "")
-    new $P893, "ResizablePMCArray"
-    push $P893, $P892
-    .return ($P893)
+    $P895 = self."!PREFIX__!subrule"("sigil", "")
+    new $P896, "ResizablePMCArray"
+    push $P896, $P895
+    .return ($P896)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "semilist"  :subid("219_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "semilist"  :subid("219_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx898_tgt
-    .local int rx898_pos
-    .local int rx898_off
-    .local int rx898_eos
-    .local int rx898_rep
-    .local pmc rx898_cur
-    (rx898_cur, rx898_pos, rx898_tgt) = self."!cursor_start"()
-    rx898_cur."!cursor_debug"("START ", "semilist")
-    .lex unicode:"$\x{a2}", rx898_cur
+    .local string rx901_tgt
+    .local int rx901_pos
+    .local int rx901_off
+    .local int rx901_eos
+    .local int rx901_rep
+    .local pmc rx901_cur
+    (rx901_cur, rx901_pos, rx901_tgt) = self."!cursor_start"()
+    rx901_cur."!cursor_debug"("START ", "semilist")
+    .lex unicode:"$\x{a2}", rx901_cur
     .local pmc match
     .lex "$/", match
-    length rx898_eos, rx898_tgt
-    set rx898_off, 0
-    lt rx898_pos, 2, rx898_start
-    sub rx898_off, rx898_pos, 1
-    substr rx898_tgt, rx898_tgt, rx898_off
-  rx898_start:
+    length rx901_eos, rx901_tgt
+    set rx901_off, 0
+    lt rx901_pos, 2, rx901_start
+    sub rx901_off, rx901_pos, 1
+    substr rx901_tgt, rx901_tgt, rx901_off
+  rx901_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan901_done
-    goto rxscan901_scan
-  rxscan901_loop:
-    ($P10) = rx898_cur."from"()
+    ne $I10, -1, rxscan904_done
+    goto rxscan904_scan
+  rxscan904_loop:
+    ($P10) = rx901_cur."from"()
     inc $P10
-    set rx898_pos, $P10
-    ge rx898_pos, rx898_eos, rxscan901_done
-  rxscan901_scan:
-    set_addr $I10, rxscan901_loop
-    rx898_cur."!mark_push"(0, rx898_pos, $I10)
-  rxscan901_done:
-.annotate "line", 413
+    set rx901_pos, $P10
+    ge rx901_pos, rx901_eos, rxscan904_done
+  rxscan904_scan:
+    set_addr $I10, rxscan904_loop
+    rx901_cur."!mark_push"(0, rx901_pos, $I10)
+  rxscan904_done:
+.annotate "line", 417
   # rx subrule "ws" subtype=method negate=
-    rx898_cur."!cursor_pos"(rx898_pos)
-    $P10 = rx898_cur."ws"()
-    unless $P10, rx898_fail
-    rx898_pos = $P10."pos"()
+    rx901_cur."!cursor_pos"(rx901_pos)
+    $P10 = rx901_cur."ws"()
+    unless $P10, rx901_fail
+    rx901_pos = $P10."pos"()
   # rx subrule "statement" subtype=capture negate=
-    rx898_cur."!cursor_pos"(rx898_pos)
-    $P10 = rx898_cur."statement"()
-    unless $P10, rx898_fail
-    rx898_cur."!mark_push"(0, -1, 0, $P10)
+    rx901_cur."!cursor_pos"(rx901_pos)
+    $P10 = rx901_cur."statement"()
+    unless $P10, rx901_fail
+    rx901_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx898_pos = $P10."pos"()
+    rx901_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx898_cur."!cursor_pos"(rx898_pos)
-    $P10 = rx898_cur."ws"()
-    unless $P10, rx898_fail
-    rx898_pos = $P10."pos"()
+    rx901_cur."!cursor_pos"(rx901_pos)
+    $P10 = rx901_cur."ws"()
+    unless $P10, rx901_fail
+    rx901_pos = $P10."pos"()
   # rx pass
-    rx898_cur."!cursor_pass"(rx898_pos, "semilist")
-    rx898_cur."!cursor_debug"("PASS  ", "semilist", " at pos=", rx898_pos)
-    .return (rx898_cur)
-  rx898_fail:
+    rx901_cur."!cursor_pass"(rx901_pos, "semilist")
+    rx901_cur."!cursor_debug"("PASS  ", "semilist", " at pos=", rx901_pos)
+    .return (rx901_cur)
+  rx901_fail:
 .annotate "line", 4
-    (rx898_rep, rx898_pos, $I10, $P10) = rx898_cur."!mark_fail"(0)
-    lt rx898_pos, -1, rx898_done
-    eq rx898_pos, -1, rx898_fail
+    (rx901_rep, rx901_pos, $I10, $P10) = rx901_cur."!mark_fail"(0)
+    lt rx901_pos, -1, rx901_done
+    eq rx901_pos, -1, rx901_fail
     jump $I10
-  rx898_done:
-    rx898_cur."!cursor_fail"()
-    rx898_cur."!cursor_debug"("FAIL  ", "semilist")
-    .return (rx898_cur)
+  rx901_done:
+    rx901_cur."!cursor_fail"()
+    rx901_cur."!cursor_debug"("FAIL  ", "semilist")
+    .return (rx901_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__semilist"  :subid("220_1267204702.05125") :method
+.sub "!PREFIX__semilist"  :subid("220_1271336396.90314") :method
 .annotate "line", 4
-    new $P900, "ResizablePMCArray"
-    push $P900, ""
-    .return ($P900)
+    new $P903, "ResizablePMCArray"
+    push $P903, ""
+    .return ($P903)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixish"  :subid("221_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx905_tgt
-    .local int rx905_pos
-    .local int rx905_off
-    .local int rx905_eos
-    .local int rx905_rep
-    .local pmc rx905_cur
-    (rx905_cur, rx905_pos, rx905_tgt) = self."!cursor_start"()
-    rx905_cur."!cursor_debug"("START ", "infixish")
-    .lex unicode:"$\x{a2}", rx905_cur
-    .local pmc match
-    .lex "$/", match
-    length rx905_eos, rx905_tgt
-    set rx905_off, 0
-    lt rx905_pos, 2, rx905_start
-    sub rx905_off, rx905_pos, 1
-    substr rx905_tgt, rx905_tgt, rx905_off
-  rx905_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan908_done
-    goto rxscan908_scan
-  rxscan908_loop:
-    ($P10) = rx905_cur."from"()
-    inc $P10
-    set rx905_pos, $P10
-    ge rx905_pos, rx905_eos, rxscan908_done
-  rxscan908_scan:
-    set_addr $I10, rxscan908_loop
-    rx905_cur."!mark_push"(0, rx905_pos, $I10)
-  rxscan908_done:
-.annotate "line", 436
+.sub "infixish"  :subid("221_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx908_tgt
+    .local int rx908_pos
+    .local int rx908_off
+    .local int rx908_eos
+    .local int rx908_rep
+    .local pmc rx908_cur
+    (rx908_cur, rx908_pos, rx908_tgt) = self."!cursor_start"()
+    rx908_cur."!cursor_debug"("START ", "infixish")
+    .lex unicode:"$\x{a2}", rx908_cur
+    .local pmc match
+    .lex "$/", match
+    length rx908_eos, rx908_tgt
+    set rx908_off, 0
+    lt rx908_pos, 2, rx908_start
+    sub rx908_off, rx908_pos, 1
+    substr rx908_tgt, rx908_tgt, rx908_off
+  rx908_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan911_done
+    goto rxscan911_scan
+  rxscan911_loop:
+    ($P10) = rx908_cur."from"()
+    inc $P10
+    set rx908_pos, $P10
+    ge rx908_pos, rx908_eos, rxscan911_done
+  rxscan911_scan:
+    set_addr $I10, rxscan911_loop
+    rx908_cur."!mark_push"(0, rx908_pos, $I10)
+  rxscan911_done:
+.annotate "line", 440
   # rx subrule "infixstopper" subtype=zerowidth negate=1
-    rx905_cur."!cursor_pos"(rx905_pos)
-    $P10 = rx905_cur."infixstopper"()
-    if $P10, rx905_fail
+    rx908_cur."!cursor_pos"(rx908_pos)
+    $P10 = rx908_cur."infixstopper"()
+    if $P10, rx908_fail
   # rx subrule "infix" subtype=capture negate=
-    rx905_cur."!cursor_pos"(rx905_pos)
-    $P10 = rx905_cur."infix"()
-    unless $P10, rx905_fail
-    rx905_cur."!mark_push"(0, -1, 0, $P10)
+    rx908_cur."!cursor_pos"(rx908_pos)
+    $P10 = rx908_cur."infix"()
+    unless $P10, rx908_fail
+    rx908_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("OPER=infix")
-    rx905_pos = $P10."pos"()
+    rx908_pos = $P10."pos"()
   # rx pass
-    rx905_cur."!cursor_pass"(rx905_pos, "infixish")
-    rx905_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx905_pos)
-    .return (rx905_cur)
-  rx905_fail:
-.annotate "line", 417
-    (rx905_rep, rx905_pos, $I10, $P10) = rx905_cur."!mark_fail"(0)
-    lt rx905_pos, -1, rx905_done
-    eq rx905_pos, -1, rx905_fail
+    rx908_cur."!cursor_pass"(rx908_pos, "infixish")
+    rx908_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx908_pos)
+    .return (rx908_cur)
+  rx908_fail:
+.annotate "line", 421
+    (rx908_rep, rx908_pos, $I10, $P10) = rx908_cur."!mark_fail"(0)
+    lt rx908_pos, -1, rx908_done
+    eq rx908_pos, -1, rx908_fail
     jump $I10
-  rx905_done:
-    rx905_cur."!cursor_fail"()
-    rx905_cur."!cursor_debug"("FAIL  ", "infixish")
-    .return (rx905_cur)
+  rx908_done:
+    rx908_cur."!cursor_fail"()
+    rx908_cur."!cursor_debug"("FAIL  ", "infixish")
+    .return (rx908_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("222_1267204702.05125") :method
-.annotate "line", 417
-    new $P907, "ResizablePMCArray"
-    push $P907, ""
-    .return ($P907)
+.sub "!PREFIX__infixish"  :subid("222_1271336396.90314") :method
+.annotate "line", 421
+    new $P910, "ResizablePMCArray"
+    push $P910, ""
+    .return ($P910)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixstopper"  :subid("223_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx910_tgt
-    .local int rx910_pos
-    .local int rx910_off
-    .local int rx910_eos
-    .local int rx910_rep
-    .local pmc rx910_cur
-    (rx910_cur, rx910_pos, rx910_tgt) = self."!cursor_start"()
-    rx910_cur."!cursor_debug"("START ", "infixstopper")
-    .lex unicode:"$\x{a2}", rx910_cur
-    .local pmc match
-    .lex "$/", match
-    length rx910_eos, rx910_tgt
-    set rx910_off, 0
-    lt rx910_pos, 2, rx910_start
-    sub rx910_off, rx910_pos, 1
-    substr rx910_tgt, rx910_tgt, rx910_off
-  rx910_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan913_done
-    goto rxscan913_scan
-  rxscan913_loop:
-    ($P10) = rx910_cur."from"()
-    inc $P10
-    set rx910_pos, $P10
-    ge rx910_pos, rx910_eos, rxscan913_done
-  rxscan913_scan:
-    set_addr $I10, rxscan913_loop
-    rx910_cur."!mark_push"(0, rx910_pos, $I10)
-  rxscan913_done:
-.annotate "line", 437
+.sub "infixstopper"  :subid("223_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx913_tgt
+    .local int rx913_pos
+    .local int rx913_off
+    .local int rx913_eos
+    .local int rx913_rep
+    .local pmc rx913_cur
+    (rx913_cur, rx913_pos, rx913_tgt) = self."!cursor_start"()
+    rx913_cur."!cursor_debug"("START ", "infixstopper")
+    .lex unicode:"$\x{a2}", rx913_cur
+    .local pmc match
+    .lex "$/", match
+    length rx913_eos, rx913_tgt
+    set rx913_off, 0
+    lt rx913_pos, 2, rx913_start
+    sub rx913_off, rx913_pos, 1
+    substr rx913_tgt, rx913_tgt, rx913_off
+  rx913_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan916_done
+    goto rxscan916_scan
+  rxscan916_loop:
+    ($P10) = rx913_cur."from"()
+    inc $P10
+    set rx913_pos, $P10
+    ge rx913_pos, rx913_eos, rxscan916_done
+  rxscan916_scan:
+    set_addr $I10, rxscan916_loop
+    rx913_cur."!mark_push"(0, rx913_pos, $I10)
+  rxscan916_done:
+.annotate "line", 441
   # rx subrule "lambda" subtype=zerowidth negate=
-    rx910_cur."!cursor_pos"(rx910_pos)
-    $P10 = rx910_cur."lambda"()
-    unless $P10, rx910_fail
-  # rx pass
-    rx910_cur."!cursor_pass"(rx910_pos, "infixstopper")
-    rx910_cur."!cursor_debug"("PASS  ", "infixstopper", " at pos=", rx910_pos)
-    .return (rx910_cur)
-  rx910_fail:
-.annotate "line", 417
-    (rx910_rep, rx910_pos, $I10, $P10) = rx910_cur."!mark_fail"(0)
-    lt rx910_pos, -1, rx910_done
-    eq rx910_pos, -1, rx910_fail
+    rx913_cur."!cursor_pos"(rx913_pos)
+    $P10 = rx913_cur."lambda"()
+    unless $P10, rx913_fail
+  # rx pass
+    rx913_cur."!cursor_pass"(rx913_pos, "infixstopper")
+    rx913_cur."!cursor_debug"("PASS  ", "infixstopper", " at pos=", rx913_pos)
+    .return (rx913_cur)
+  rx913_fail:
+.annotate "line", 421
+    (rx913_rep, rx913_pos, $I10, $P10) = rx913_cur."!mark_fail"(0)
+    lt rx913_pos, -1, rx913_done
+    eq rx913_pos, -1, rx913_fail
     jump $I10
-  rx910_done:
-    rx910_cur."!cursor_fail"()
-    rx910_cur."!cursor_debug"("FAIL  ", "infixstopper")
-    .return (rx910_cur)
+  rx913_done:
+    rx913_cur."!cursor_fail"()
+    rx913_cur."!cursor_debug"("FAIL  ", "infixstopper")
+    .return (rx913_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixstopper"  :subid("224_1267204702.05125") :method
-.annotate "line", 417
-    new $P912, "ResizablePMCArray"
-    push $P912, ""
-    .return ($P912)
+.sub "!PREFIX__infixstopper"  :subid("224_1271336396.90314") :method
+.annotate "line", 421
+    new $P915, "ResizablePMCArray"
+    push $P915, ""
+    .return ($P915)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<[ ]>"  :subid("225_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx915_tgt
-    .local int rx915_pos
-    .local int rx915_off
-    .local int rx915_eos
-    .local int rx915_rep
-    .local pmc rx915_cur
-    (rx915_cur, rx915_pos, rx915_tgt) = self."!cursor_start"()
-    rx915_cur."!cursor_debug"("START ", "postcircumfix:sym<[ ]>")
-    .lex unicode:"$\x{a2}", rx915_cur
-    .local pmc match
-    .lex "$/", match
-    length rx915_eos, rx915_tgt
-    set rx915_off, 0
-    lt rx915_pos, 2, rx915_start
-    sub rx915_off, rx915_pos, 1
-    substr rx915_tgt, rx915_tgt, rx915_off
-  rx915_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan919_done
-    goto rxscan919_scan
-  rxscan919_loop:
-    ($P10) = rx915_cur."from"()
-    inc $P10
-    set rx915_pos, $P10
-    ge rx915_pos, rx915_eos, rxscan919_done
-  rxscan919_scan:
-    set_addr $I10, rxscan919_loop
-    rx915_cur."!mark_push"(0, rx915_pos, $I10)
-  rxscan919_done:
-.annotate "line", 440
+.sub "postcircumfix:sym<[ ]>"  :subid("225_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx918_tgt
+    .local int rx918_pos
+    .local int rx918_off
+    .local int rx918_eos
+    .local int rx918_rep
+    .local pmc rx918_cur
+    (rx918_cur, rx918_pos, rx918_tgt) = self."!cursor_start"()
+    rx918_cur."!cursor_debug"("START ", "postcircumfix:sym<[ ]>")
+    .lex unicode:"$\x{a2}", rx918_cur
+    .local pmc match
+    .lex "$/", match
+    length rx918_eos, rx918_tgt
+    set rx918_off, 0
+    lt rx918_pos, 2, rx918_start
+    sub rx918_off, rx918_pos, 1
+    substr rx918_tgt, rx918_tgt, rx918_off
+  rx918_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan922_done
+    goto rxscan922_scan
+  rxscan922_loop:
+    ($P10) = rx918_cur."from"()
+    inc $P10
+    set rx918_pos, $P10
+    ge rx918_pos, rx918_eos, rxscan922_done
+  rxscan922_scan:
+    set_addr $I10, rxscan922_loop
+    rx918_cur."!mark_push"(0, rx918_pos, $I10)
+  rxscan922_done:
+.annotate "line", 444
   # rx literal  "["
-    add $I11, rx915_pos, 1
-    gt $I11, rx915_eos, rx915_fail
-    sub $I11, rx915_pos, rx915_off
-    substr $S10, rx915_tgt, $I11, 1
-    ne $S10, "[", rx915_fail
-    add rx915_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx915_cur."!cursor_pos"(rx915_pos)
-    $P10 = rx915_cur."ws"()
-    unless $P10, rx915_fail
-    rx915_pos = $P10."pos"()
+    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
+    add rx918_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx918_cur."!cursor_pos"(rx918_pos)
+    $P10 = rx918_cur."ws"()
+    unless $P10, rx918_fail
+    rx918_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx915_cur."!cursor_pos"(rx915_pos)
-    $P10 = rx915_cur."EXPR"()
-    unless $P10, rx915_fail
-    rx915_cur."!mark_push"(0, -1, 0, $P10)
+    rx918_cur."!cursor_pos"(rx918_pos)
+    $P10 = rx918_cur."EXPR"()
+    unless $P10, rx918_fail
+    rx918_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx915_pos = $P10."pos"()
+    rx918_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx915_pos, 1
-    gt $I11, rx915_eos, rx915_fail
-    sub $I11, rx915_pos, rx915_off
-    substr $S10, rx915_tgt, $I11, 1
-    ne $S10, "]", rx915_fail
-    add rx915_pos, 1
-.annotate "line", 441
+    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
+    add rx918_pos, 1
+.annotate "line", 445
   # rx subrule "O" subtype=capture negate=
-    rx915_cur."!cursor_pos"(rx915_pos)
-    $P10 = rx915_cur."O"("%methodop")
-    unless $P10, rx915_fail
-    rx915_cur."!mark_push"(0, -1, 0, $P10)
+    rx918_cur."!cursor_pos"(rx918_pos)
+    $P10 = rx918_cur."O"("%methodop")
+    unless $P10, rx918_fail
+    rx918_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx915_pos = $P10."pos"()
-.annotate "line", 439
+    rx918_pos = $P10."pos"()
+.annotate "line", 443
   # rx pass
-    rx915_cur."!cursor_pass"(rx915_pos, "postcircumfix:sym<[ ]>")
-    rx915_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<[ ]>", " at pos=", rx915_pos)
-    .return (rx915_cur)
-  rx915_fail:
-.annotate "line", 417
-    (rx915_rep, rx915_pos, $I10, $P10) = rx915_cur."!mark_fail"(0)
-    lt rx915_pos, -1, rx915_done
-    eq rx915_pos, -1, rx915_fail
+    rx918_cur."!cursor_pass"(rx918_pos, "postcircumfix:sym<[ ]>")
+    rx918_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<[ ]>", " at pos=", rx918_pos)
+    .return (rx918_cur)
+  rx918_fail:
+.annotate "line", 421
+    (rx918_rep, rx918_pos, $I10, $P10) = rx918_cur."!mark_fail"(0)
+    lt rx918_pos, -1, rx918_done
+    eq rx918_pos, -1, rx918_fail
     jump $I10
-  rx915_done:
-    rx915_cur."!cursor_fail"()
-    rx915_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<[ ]>")
-    .return (rx915_cur)
+  rx918_done:
+    rx918_cur."!cursor_fail"()
+    rx918_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<[ ]>")
+    .return (rx918_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("226_1267204702.05125") :method
-.annotate "line", 417
-    $P917 = self."!PREFIX__!subrule"("", "[")
-    new $P918, "ResizablePMCArray"
-    push $P918, $P917
-    .return ($P918)
+.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("226_1271336396.90314") :method
+.annotate "line", 421
+    $P920 = self."!PREFIX__!subrule"("", "[")
+    new $P921, "ResizablePMCArray"
+    push $P921, $P920
+    .return ($P921)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<{ }>"  :subid("227_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx921_tgt
-    .local int rx921_pos
-    .local int rx921_off
-    .local int rx921_eos
-    .local int rx921_rep
-    .local pmc rx921_cur
-    (rx921_cur, rx921_pos, rx921_tgt) = self."!cursor_start"()
-    rx921_cur."!cursor_debug"("START ", "postcircumfix:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx921_cur
-    .local pmc match
-    .lex "$/", match
-    length rx921_eos, rx921_tgt
-    set rx921_off, 0
-    lt rx921_pos, 2, rx921_start
-    sub rx921_off, rx921_pos, 1
-    substr rx921_tgt, rx921_tgt, rx921_off
-  rx921_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan925_done
-    goto rxscan925_scan
-  rxscan925_loop:
-    ($P10) = rx921_cur."from"()
-    inc $P10
-    set rx921_pos, $P10
-    ge rx921_pos, rx921_eos, rxscan925_done
-  rxscan925_scan:
-    set_addr $I10, rxscan925_loop
-    rx921_cur."!mark_push"(0, rx921_pos, $I10)
-  rxscan925_done:
-.annotate "line", 445
+.sub "postcircumfix:sym<{ }>"  :subid("227_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx924_tgt
+    .local int rx924_pos
+    .local int rx924_off
+    .local int rx924_eos
+    .local int rx924_rep
+    .local pmc rx924_cur
+    (rx924_cur, rx924_pos, rx924_tgt) = self."!cursor_start"()
+    rx924_cur."!cursor_debug"("START ", "postcircumfix:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx924_cur
+    .local pmc match
+    .lex "$/", match
+    length rx924_eos, rx924_tgt
+    set rx924_off, 0
+    lt rx924_pos, 2, rx924_start
+    sub rx924_off, rx924_pos, 1
+    substr rx924_tgt, rx924_tgt, rx924_off
+  rx924_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan928_done
+    goto rxscan928_scan
+  rxscan928_loop:
+    ($P10) = rx924_cur."from"()
+    inc $P10
+    set rx924_pos, $P10
+    ge rx924_pos, rx924_eos, rxscan928_done
+  rxscan928_scan:
+    set_addr $I10, rxscan928_loop
+    rx924_cur."!mark_push"(0, rx924_pos, $I10)
+  rxscan928_done:
+.annotate "line", 449
   # rx literal  "{"
-    add $I11, rx921_pos, 1
-    gt $I11, rx921_eos, rx921_fail
-    sub $I11, rx921_pos, rx921_off
-    substr $S10, rx921_tgt, $I11, 1
-    ne $S10, "{", rx921_fail
-    add rx921_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx921_cur."!cursor_pos"(rx921_pos)
-    $P10 = rx921_cur."ws"()
-    unless $P10, rx921_fail
-    rx921_pos = $P10."pos"()
+    add $I11, rx924_pos, 1
+    gt $I11, rx924_eos, rx924_fail
+    sub $I11, rx924_pos, rx924_off
+    substr $S10, rx924_tgt, $I11, 1
+    ne $S10, "{", rx924_fail
+    add rx924_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx924_cur."!cursor_pos"(rx924_pos)
+    $P10 = rx924_cur."ws"()
+    unless $P10, rx924_fail
+    rx924_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx921_cur."!cursor_pos"(rx921_pos)
-    $P10 = rx921_cur."EXPR"()
-    unless $P10, rx921_fail
-    rx921_cur."!mark_push"(0, -1, 0, $P10)
+    rx924_cur."!cursor_pos"(rx924_pos)
+    $P10 = rx924_cur."EXPR"()
+    unless $P10, rx924_fail
+    rx924_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx921_pos = $P10."pos"()
+    rx924_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx921_pos, 1
-    gt $I11, rx921_eos, rx921_fail
-    sub $I11, rx921_pos, rx921_off
-    substr $S10, rx921_tgt, $I11, 1
-    ne $S10, "}", rx921_fail
-    add rx921_pos, 1
-.annotate "line", 446
+    add $I11, rx924_pos, 1
+    gt $I11, rx924_eos, rx924_fail
+    sub $I11, rx924_pos, rx924_off
+    substr $S10, rx924_tgt, $I11, 1
+    ne $S10, "}", rx924_fail
+    add rx924_pos, 1
+.annotate "line", 450
   # rx subrule "O" subtype=capture negate=
-    rx921_cur."!cursor_pos"(rx921_pos)
-    $P10 = rx921_cur."O"("%methodop")
-    unless $P10, rx921_fail
-    rx921_cur."!mark_push"(0, -1, 0, $P10)
+    rx924_cur."!cursor_pos"(rx924_pos)
+    $P10 = rx924_cur."O"("%methodop")
+    unless $P10, rx924_fail
+    rx924_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx921_pos = $P10."pos"()
-.annotate "line", 444
+    rx924_pos = $P10."pos"()
+.annotate "line", 448
   # rx pass
-    rx921_cur."!cursor_pass"(rx921_pos, "postcircumfix:sym<{ }>")
-    rx921_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<{ }>", " at pos=", rx921_pos)
-    .return (rx921_cur)
-  rx921_fail:
-.annotate "line", 417
-    (rx921_rep, rx921_pos, $I10, $P10) = rx921_cur."!mark_fail"(0)
-    lt rx921_pos, -1, rx921_done
-    eq rx921_pos, -1, rx921_fail
+    rx924_cur."!cursor_pass"(rx924_pos, "postcircumfix:sym<{ }>")
+    rx924_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<{ }>", " at pos=", rx924_pos)
+    .return (rx924_cur)
+  rx924_fail:
+.annotate "line", 421
+    (rx924_rep, rx924_pos, $I10, $P10) = rx924_cur."!mark_fail"(0)
+    lt rx924_pos, -1, rx924_done
+    eq rx924_pos, -1, rx924_fail
     jump $I10
-  rx921_done:
-    rx921_cur."!cursor_fail"()
-    rx921_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<{ }>")
-    .return (rx921_cur)
+  rx924_done:
+    rx924_cur."!cursor_fail"()
+    rx924_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<{ }>")
+    .return (rx924_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("228_1267204702.05125") :method
-.annotate "line", 417
-    $P923 = self."!PREFIX__!subrule"("", "{")
-    new $P924, "ResizablePMCArray"
-    push $P924, $P923
-    .return ($P924)
+.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("228_1271336396.90314") :method
+.annotate "line", 421
+    $P926 = self."!PREFIX__!subrule"("", "{")
+    new $P927, "ResizablePMCArray"
+    push $P927, $P926
+    .return ($P927)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<ang>"  :subid("229_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx927_tgt
-    .local int rx927_pos
-    .local int rx927_off
-    .local int rx927_eos
-    .local int rx927_rep
-    .local pmc rx927_cur
-    (rx927_cur, rx927_pos, rx927_tgt) = self."!cursor_start"()
-    rx927_cur."!cursor_debug"("START ", "postcircumfix:sym<ang>")
-    .lex unicode:"$\x{a2}", rx927_cur
-    .local pmc match
-    .lex "$/", match
-    length rx927_eos, rx927_tgt
-    set rx927_off, 0
-    lt rx927_pos, 2, rx927_start
-    sub rx927_off, rx927_pos, 1
-    substr rx927_tgt, rx927_tgt, rx927_off
-  rx927_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan930_done
-    goto rxscan930_scan
-  rxscan930_loop:
-    ($P10) = rx927_cur."from"()
-    inc $P10
-    set rx927_pos, $P10
-    ge rx927_pos, rx927_eos, rxscan930_done
-  rxscan930_scan:
-    set_addr $I10, rxscan930_loop
-    rx927_cur."!mark_push"(0, rx927_pos, $I10)
-  rxscan930_done:
-.annotate "line", 450
+.sub "postcircumfix:sym<ang>"  :subid("229_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx930_tgt
+    .local int rx930_pos
+    .local int rx930_off
+    .local int rx930_eos
+    .local int rx930_rep
+    .local pmc rx930_cur
+    (rx930_cur, rx930_pos, rx930_tgt) = self."!cursor_start"()
+    rx930_cur."!cursor_debug"("START ", "postcircumfix:sym<ang>")
+    .lex unicode:"$\x{a2}", rx930_cur
+    .local pmc match
+    .lex "$/", match
+    length rx930_eos, rx930_tgt
+    set rx930_off, 0
+    lt rx930_pos, 2, rx930_start
+    sub rx930_off, rx930_pos, 1
+    substr rx930_tgt, rx930_tgt, rx930_off
+  rx930_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan933_done
+    goto rxscan933_scan
+  rxscan933_loop:
+    ($P10) = rx930_cur."from"()
+    inc $P10
+    set rx930_pos, $P10
+    ge rx930_pos, rx930_eos, rxscan933_done
+  rxscan933_scan:
+    set_addr $I10, rxscan933_loop
+    rx930_cur."!mark_push"(0, rx930_pos, $I10)
+  rxscan933_done:
+.annotate "line", 454
   # rx enumcharlist negate=0 zerowidth
-    ge rx927_pos, rx927_eos, rx927_fail
-    sub $I10, rx927_pos, rx927_off
-    substr $S10, rx927_tgt, $I10, 1
+    ge rx930_pos, rx930_eos, rx930_fail
+    sub $I10, rx930_pos, rx930_off
+    substr $S10, rx930_tgt, $I10, 1
     index $I11, "<", $S10
-    lt $I11, 0, rx927_fail
+    lt $I11, 0, rx930_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx927_cur."!cursor_pos"(rx927_pos)
-    $P10 = rx927_cur."quote_EXPR"(":q")
-    unless $P10, rx927_fail
-    rx927_cur."!mark_push"(0, -1, 0, $P10)
+    rx930_cur."!cursor_pos"(rx930_pos)
+    $P10 = rx930_cur."quote_EXPR"(":q")
+    unless $P10, rx930_fail
+    rx930_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx927_pos = $P10."pos"()
-.annotate "line", 451
+    rx930_pos = $P10."pos"()
+.annotate "line", 455
   # rx subrule "O" subtype=capture negate=
-    rx927_cur."!cursor_pos"(rx927_pos)
-    $P10 = rx927_cur."O"("%methodop")
-    unless $P10, rx927_fail
-    rx927_cur."!mark_push"(0, -1, 0, $P10)
+    rx930_cur."!cursor_pos"(rx930_pos)
+    $P10 = rx930_cur."O"("%methodop")
+    unless $P10, rx930_fail
+    rx930_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx927_pos = $P10."pos"()
-.annotate "line", 449
+    rx930_pos = $P10."pos"()
+.annotate "line", 453
   # rx pass
-    rx927_cur."!cursor_pass"(rx927_pos, "postcircumfix:sym<ang>")
-    rx927_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<ang>", " at pos=", rx927_pos)
-    .return (rx927_cur)
-  rx927_fail:
-.annotate "line", 417
-    (rx927_rep, rx927_pos, $I10, $P10) = rx927_cur."!mark_fail"(0)
-    lt rx927_pos, -1, rx927_done
-    eq rx927_pos, -1, rx927_fail
+    rx930_cur."!cursor_pass"(rx930_pos, "postcircumfix:sym<ang>")
+    rx930_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<ang>", " at pos=", rx930_pos)
+    .return (rx930_cur)
+  rx930_fail:
+.annotate "line", 421
+    (rx930_rep, rx930_pos, $I10, $P10) = rx930_cur."!mark_fail"(0)
+    lt rx930_pos, -1, rx930_done
+    eq rx930_pos, -1, rx930_fail
     jump $I10
-  rx927_done:
-    rx927_cur."!cursor_fail"()
-    rx927_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<ang>")
-    .return (rx927_cur)
+  rx930_done:
+    rx930_cur."!cursor_fail"()
+    rx930_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<ang>")
+    .return (rx930_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("230_1267204702.05125") :method
-.annotate "line", 417
-    new $P929, "ResizablePMCArray"
-    push $P929, "<"
-    .return ($P929)
+.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("230_1271336396.90314") :method
+.annotate "line", 421
+    new $P932, "ResizablePMCArray"
+    push $P932, "<"
+    .return ($P932)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<( )>"  :subid("231_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx932_tgt
-    .local int rx932_pos
-    .local int rx932_off
-    .local int rx932_eos
-    .local int rx932_rep
-    .local pmc rx932_cur
-    (rx932_cur, rx932_pos, rx932_tgt) = self."!cursor_start"()
-    rx932_cur."!cursor_debug"("START ", "postcircumfix:sym<( )>")
-    .lex unicode:"$\x{a2}", rx932_cur
-    .local pmc match
-    .lex "$/", match
-    length rx932_eos, rx932_tgt
-    set rx932_off, 0
-    lt rx932_pos, 2, rx932_start
-    sub rx932_off, rx932_pos, 1
-    substr rx932_tgt, rx932_tgt, rx932_off
-  rx932_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan936_done
-    goto rxscan936_scan
-  rxscan936_loop:
-    ($P10) = rx932_cur."from"()
-    inc $P10
-    set rx932_pos, $P10
-    ge rx932_pos, rx932_eos, rxscan936_done
-  rxscan936_scan:
-    set_addr $I10, rxscan936_loop
-    rx932_cur."!mark_push"(0, rx932_pos, $I10)
-  rxscan936_done:
-.annotate "line", 455
+.sub "postcircumfix:sym<( )>"  :subid("231_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx935_tgt
+    .local int rx935_pos
+    .local int rx935_off
+    .local int rx935_eos
+    .local int rx935_rep
+    .local pmc rx935_cur
+    (rx935_cur, rx935_pos, rx935_tgt) = self."!cursor_start"()
+    rx935_cur."!cursor_debug"("START ", "postcircumfix:sym<( )>")
+    .lex unicode:"$\x{a2}", rx935_cur
+    .local pmc match
+    .lex "$/", match
+    length rx935_eos, rx935_tgt
+    set rx935_off, 0
+    lt rx935_pos, 2, rx935_start
+    sub rx935_off, rx935_pos, 1
+    substr rx935_tgt, rx935_tgt, rx935_off
+  rx935_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan939_done
+    goto rxscan939_scan
+  rxscan939_loop:
+    ($P10) = rx935_cur."from"()
+    inc $P10
+    set rx935_pos, $P10
+    ge rx935_pos, rx935_eos, rxscan939_done
+  rxscan939_scan:
+    set_addr $I10, rxscan939_loop
+    rx935_cur."!mark_push"(0, rx935_pos, $I10)
+  rxscan939_done:
+.annotate "line", 459
   # rx literal  "("
-    add $I11, rx932_pos, 1
-    gt $I11, rx932_eos, rx932_fail
-    sub $I11, rx932_pos, rx932_off
-    substr $S10, rx932_tgt, $I11, 1
-    ne $S10, "(", rx932_fail
-    add rx932_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx932_cur."!cursor_pos"(rx932_pos)
-    $P10 = rx932_cur."ws"()
-    unless $P10, rx932_fail
-    rx932_pos = $P10."pos"()
+    add $I11, rx935_pos, 1
+    gt $I11, rx935_eos, rx935_fail
+    sub $I11, rx935_pos, rx935_off
+    substr $S10, rx935_tgt, $I11, 1
+    ne $S10, "(", rx935_fail
+    add rx935_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx935_cur."!cursor_pos"(rx935_pos)
+    $P10 = rx935_cur."ws"()
+    unless $P10, rx935_fail
+    rx935_pos = $P10."pos"()
   # rx subrule "arglist" subtype=capture negate=
-    rx932_cur."!cursor_pos"(rx932_pos)
-    $P10 = rx932_cur."arglist"()
-    unless $P10, rx932_fail
-    rx932_cur."!mark_push"(0, -1, 0, $P10)
+    rx935_cur."!cursor_pos"(rx935_pos)
+    $P10 = rx935_cur."arglist"()
+    unless $P10, rx935_fail
+    rx935_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx932_pos = $P10."pos"()
+    rx935_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx932_pos, 1
-    gt $I11, rx932_eos, rx932_fail
-    sub $I11, rx932_pos, rx932_off
-    substr $S10, rx932_tgt, $I11, 1
-    ne $S10, ")", rx932_fail
-    add rx932_pos, 1
-.annotate "line", 456
+    add $I11, rx935_pos, 1
+    gt $I11, rx935_eos, rx935_fail
+    sub $I11, rx935_pos, rx935_off
+    substr $S10, rx935_tgt, $I11, 1
+    ne $S10, ")", rx935_fail
+    add rx935_pos, 1
+.annotate "line", 460
   # rx subrule "O" subtype=capture negate=
-    rx932_cur."!cursor_pos"(rx932_pos)
-    $P10 = rx932_cur."O"("%methodop")
-    unless $P10, rx932_fail
-    rx932_cur."!mark_push"(0, -1, 0, $P10)
+    rx935_cur."!cursor_pos"(rx935_pos)
+    $P10 = rx935_cur."O"("%methodop")
+    unless $P10, rx935_fail
+    rx935_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx932_pos = $P10."pos"()
-.annotate "line", 454
+    rx935_pos = $P10."pos"()
+.annotate "line", 458
   # rx pass
-    rx932_cur."!cursor_pass"(rx932_pos, "postcircumfix:sym<( )>")
-    rx932_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<( )>", " at pos=", rx932_pos)
-    .return (rx932_cur)
-  rx932_fail:
-.annotate "line", 417
-    (rx932_rep, rx932_pos, $I10, $P10) = rx932_cur."!mark_fail"(0)
-    lt rx932_pos, -1, rx932_done
-    eq rx932_pos, -1, rx932_fail
+    rx935_cur."!cursor_pass"(rx935_pos, "postcircumfix:sym<( )>")
+    rx935_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<( )>", " at pos=", rx935_pos)
+    .return (rx935_cur)
+  rx935_fail:
+.annotate "line", 421
+    (rx935_rep, rx935_pos, $I10, $P10) = rx935_cur."!mark_fail"(0)
+    lt rx935_pos, -1, rx935_done
+    eq rx935_pos, -1, rx935_fail
     jump $I10
-  rx932_done:
-    rx932_cur."!cursor_fail"()
-    rx932_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<( )>")
-    .return (rx932_cur)
+  rx935_done:
+    rx935_cur."!cursor_fail"()
+    rx935_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<( )>")
+    .return (rx935_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("232_1267204702.05125") :method
-.annotate "line", 417
-    $P934 = self."!PREFIX__!subrule"("", "(")
-    new $P935, "ResizablePMCArray"
-    push $P935, $P934
-    .return ($P935)
+.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("232_1271336396.90314") :method
+.annotate "line", 421
+    $P937 = self."!PREFIX__!subrule"("", "(")
+    new $P938, "ResizablePMCArray"
+    push $P938, $P937
+    .return ($P938)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<.>"  :subid("233_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx938_tgt
-    .local int rx938_pos
-    .local int rx938_off
-    .local int rx938_eos
-    .local int rx938_rep
-    .local pmc rx938_cur
-    (rx938_cur, rx938_pos, rx938_tgt) = self."!cursor_start"()
-    rx938_cur."!cursor_debug"("START ", "postfix:sym<.>")
-    .lex unicode:"$\x{a2}", rx938_cur
-    .local pmc match
-    .lex "$/", match
-    length rx938_eos, rx938_tgt
-    set rx938_off, 0
-    lt rx938_pos, 2, rx938_start
-    sub rx938_off, rx938_pos, 1
-    substr rx938_tgt, rx938_tgt, rx938_off
-  rx938_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan942_done
-    goto rxscan942_scan
-  rxscan942_loop:
-    ($P10) = rx938_cur."from"()
-    inc $P10
-    set rx938_pos, $P10
-    ge rx938_pos, rx938_eos, rxscan942_done
-  rxscan942_scan:
-    set_addr $I10, rxscan942_loop
-    rx938_cur."!mark_push"(0, rx938_pos, $I10)
-  rxscan942_done:
-.annotate "line", 459
+.sub "postfix:sym<.>"  :subid("233_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx941_tgt
+    .local int rx941_pos
+    .local int rx941_off
+    .local int rx941_eos
+    .local int rx941_rep
+    .local pmc rx941_cur
+    (rx941_cur, rx941_pos, rx941_tgt) = self."!cursor_start"()
+    rx941_cur."!cursor_debug"("START ", "postfix:sym<.>")
+    .lex unicode:"$\x{a2}", rx941_cur
+    .local pmc match
+    .lex "$/", match
+    length rx941_eos, rx941_tgt
+    set rx941_off, 0
+    lt rx941_pos, 2, rx941_start
+    sub rx941_off, rx941_pos, 1
+    substr rx941_tgt, rx941_tgt, rx941_off
+  rx941_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan945_done
+    goto rxscan945_scan
+  rxscan945_loop:
+    ($P10) = rx941_cur."from"()
+    inc $P10
+    set rx941_pos, $P10
+    ge rx941_pos, rx941_eos, rxscan945_done
+  rxscan945_scan:
+    set_addr $I10, rxscan945_loop
+    rx941_cur."!mark_push"(0, rx941_pos, $I10)
+  rxscan945_done:
+.annotate "line", 463
   # rx subrule "dotty" subtype=capture negate=
-    rx938_cur."!cursor_pos"(rx938_pos)
-    $P10 = rx938_cur."dotty"()
-    unless $P10, rx938_fail
-    rx938_cur."!mark_push"(0, -1, 0, $P10)
+    rx941_cur."!cursor_pos"(rx941_pos)
+    $P10 = rx941_cur."dotty"()
+    unless $P10, rx941_fail
+    rx941_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("dotty")
-    rx938_pos = $P10."pos"()
+    rx941_pos = $P10."pos"()
   # rx subrule "O" subtype=capture negate=
-    rx938_cur."!cursor_pos"(rx938_pos)
-    $P10 = rx938_cur."O"("%methodop")
-    unless $P10, rx938_fail
-    rx938_cur."!mark_push"(0, -1, 0, $P10)
+    rx941_cur."!cursor_pos"(rx941_pos)
+    $P10 = rx941_cur."O"("%methodop")
+    unless $P10, rx941_fail
+    rx941_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx938_pos = $P10."pos"()
+    rx941_pos = $P10."pos"()
   # rx pass
-    rx938_cur."!cursor_pass"(rx938_pos, "postfix:sym<.>")
-    rx938_cur."!cursor_debug"("PASS  ", "postfix:sym<.>", " at pos=", rx938_pos)
-    .return (rx938_cur)
-  rx938_fail:
-.annotate "line", 417
-    (rx938_rep, rx938_pos, $I10, $P10) = rx938_cur."!mark_fail"(0)
-    lt rx938_pos, -1, rx938_done
-    eq rx938_pos, -1, rx938_fail
+    rx941_cur."!cursor_pass"(rx941_pos, "postfix:sym<.>")
+    rx941_cur."!cursor_debug"("PASS  ", "postfix:sym<.>", " at pos=", rx941_pos)
+    .return (rx941_cur)
+  rx941_fail:
+.annotate "line", 421
+    (rx941_rep, rx941_pos, $I10, $P10) = rx941_cur."!mark_fail"(0)
+    lt rx941_pos, -1, rx941_done
+    eq rx941_pos, -1, rx941_fail
     jump $I10
-  rx938_done:
-    rx938_cur."!cursor_fail"()
-    rx938_cur."!cursor_debug"("FAIL  ", "postfix:sym<.>")
-    .return (rx938_cur)
+  rx941_done:
+    rx941_cur."!cursor_fail"()
+    rx941_cur."!cursor_debug"("FAIL  ", "postfix:sym<.>")
+    .return (rx941_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<.>"  :subid("234_1267204702.05125") :method
-.annotate "line", 417
-    $P940 = self."!PREFIX__!subrule"("dotty", "")
-    new $P941, "ResizablePMCArray"
-    push $P941, $P940
-    .return ($P941)
+.sub "!PREFIX__postfix:sym<.>"  :subid("234_1271336396.90314") :method
+.annotate "line", 421
+    $P943 = self."!PREFIX__!subrule"("dotty", "")
+    new $P944, "ResizablePMCArray"
+    push $P944, $P943
+    .return ($P944)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<++>"  :subid("235_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx944_tgt
-    .local int rx944_pos
-    .local int rx944_off
-    .local int rx944_eos
-    .local int rx944_rep
-    .local pmc rx944_cur
-    (rx944_cur, rx944_pos, rx944_tgt) = self."!cursor_start"()
-    rx944_cur."!cursor_debug"("START ", "prefix:sym<++>")
-    .lex unicode:"$\x{a2}", rx944_cur
-    .local pmc match
-    .lex "$/", match
-    length rx944_eos, rx944_tgt
-    set rx944_off, 0
-    lt rx944_pos, 2, rx944_start
-    sub rx944_off, rx944_pos, 1
-    substr rx944_tgt, rx944_tgt, rx944_off
-  rx944_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan948_done
-    goto rxscan948_scan
-  rxscan948_loop:
-    ($P10) = rx944_cur."from"()
-    inc $P10
-    set rx944_pos, $P10
-    ge rx944_pos, rx944_eos, rxscan948_done
-  rxscan948_scan:
-    set_addr $I10, rxscan948_loop
-    rx944_cur."!mark_push"(0, rx944_pos, $I10)
-  rxscan948_done:
-.annotate "line", 461
+.sub "prefix:sym<++>"  :subid("235_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx947_tgt
+    .local int rx947_pos
+    .local int rx947_off
+    .local int rx947_eos
+    .local int rx947_rep
+    .local pmc rx947_cur
+    (rx947_cur, rx947_pos, rx947_tgt) = self."!cursor_start"()
+    rx947_cur."!cursor_debug"("START ", "prefix:sym<++>")
+    .lex unicode:"$\x{a2}", rx947_cur
+    .local pmc match
+    .lex "$/", match
+    length rx947_eos, rx947_tgt
+    set rx947_off, 0
+    lt rx947_pos, 2, rx947_start
+    sub rx947_off, rx947_pos, 1
+    substr rx947_tgt, rx947_tgt, rx947_off
+  rx947_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan951_done
+    goto rxscan951_scan
+  rxscan951_loop:
+    ($P10) = rx947_cur."from"()
+    inc $P10
+    set rx947_pos, $P10
+    ge rx947_pos, rx947_eos, rxscan951_done
+  rxscan951_scan:
+    set_addr $I10, rxscan951_loop
+    rx947_cur."!mark_push"(0, rx947_pos, $I10)
+  rxscan951_done:
+.annotate "line", 465
   # rx subcapture "sym"
-    set_addr $I10, rxcap_949_fail
-    rx944_cur."!mark_push"(0, rx944_pos, $I10)
+    set_addr $I10, rxcap_952_fail
+    rx947_cur."!mark_push"(0, rx947_pos, $I10)
   # rx literal  "++"
-    add $I11, rx944_pos, 2
-    gt $I11, rx944_eos, rx944_fail
-    sub $I11, rx944_pos, rx944_off
-    substr $S10, rx944_tgt, $I11, 2
-    ne $S10, "++", rx944_fail
-    add rx944_pos, 2
-    set_addr $I10, rxcap_949_fail
-    ($I12, $I11) = rx944_cur."!mark_peek"($I10)
-    rx944_cur."!cursor_pos"($I11)
-    ($P10) = rx944_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx944_pos, "")
-    rx944_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx947_pos, 2
+    gt $I11, rx947_eos, rx947_fail
+    sub $I11, rx947_pos, rx947_off
+    substr $S10, rx947_tgt, $I11, 2
+    ne $S10, "++", rx947_fail
+    add rx947_pos, 2
+    set_addr $I10, rxcap_952_fail
+    ($I12, $I11) = rx947_cur."!mark_peek"($I10)
+    rx947_cur."!cursor_pos"($I11)
+    ($P10) = rx947_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx947_pos, "")
+    rx947_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_949_done
-  rxcap_949_fail:
-    goto rx944_fail
-  rxcap_949_done:
+    goto rxcap_952_done
+  rxcap_952_fail:
+    goto rx947_fail
+  rxcap_952_done:
   # rx subrule "O" subtype=capture negate=
-    rx944_cur."!cursor_pos"(rx944_pos)
-    $P10 = rx944_cur."O"("%autoincrement, :pirop<inc>")
-    unless $P10, rx944_fail
-    rx944_cur."!mark_push"(0, -1, 0, $P10)
+    rx947_cur."!cursor_pos"(rx947_pos)
+    $P10 = rx947_cur."O"("%autoincrement, :pirop<inc>")
+    unless $P10, rx947_fail
+    rx947_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx944_pos = $P10."pos"()
+    rx947_pos = $P10."pos"()
   # rx pass
-    rx944_cur."!cursor_pass"(rx944_pos, "prefix:sym<++>")
-    rx944_cur."!cursor_debug"("PASS  ", "prefix:sym<++>", " at pos=", rx944_pos)
-    .return (rx944_cur)
-  rx944_fail:
-.annotate "line", 417
-    (rx944_rep, rx944_pos, $I10, $P10) = rx944_cur."!mark_fail"(0)
-    lt rx944_pos, -1, rx944_done
-    eq rx944_pos, -1, rx944_fail
+    rx947_cur."!cursor_pass"(rx947_pos, "prefix:sym<++>")
+    rx947_cur."!cursor_debug"("PASS  ", "prefix:sym<++>", " at pos=", rx947_pos)
+    .return (rx947_cur)
+  rx947_fail:
+.annotate "line", 421
+    (rx947_rep, rx947_pos, $I10, $P10) = rx947_cur."!mark_fail"(0)
+    lt rx947_pos, -1, rx947_done
+    eq rx947_pos, -1, rx947_fail
     jump $I10
-  rx944_done:
-    rx944_cur."!cursor_fail"()
-    rx944_cur."!cursor_debug"("FAIL  ", "prefix:sym<++>")
-    .return (rx944_cur)
+  rx947_done:
+    rx947_cur."!cursor_fail"()
+    rx947_cur."!cursor_debug"("FAIL  ", "prefix:sym<++>")
+    .return (rx947_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<++>"  :subid("236_1267204702.05125") :method
-.annotate "line", 417
-    $P946 = self."!PREFIX__!subrule"("O", "++")
-    new $P947, "ResizablePMCArray"
-    push $P947, $P946
-    .return ($P947)
+.sub "!PREFIX__prefix:sym<++>"  :subid("236_1271336396.90314") :method
+.annotate "line", 421
+    $P949 = self."!PREFIX__!subrule"("O", "++")
+    new $P950, "ResizablePMCArray"
+    push $P950, $P949
+    .return ($P950)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<-->"  :subid("237_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx951_tgt
-    .local int rx951_pos
-    .local int rx951_off
-    .local int rx951_eos
-    .local int rx951_rep
-    .local pmc rx951_cur
-    (rx951_cur, rx951_pos, rx951_tgt) = self."!cursor_start"()
-    rx951_cur."!cursor_debug"("START ", "prefix:sym<-->")
-    .lex unicode:"$\x{a2}", rx951_cur
-    .local pmc match
-    .lex "$/", match
-    length rx951_eos, rx951_tgt
-    set rx951_off, 0
-    lt rx951_pos, 2, rx951_start
-    sub rx951_off, rx951_pos, 1
-    substr rx951_tgt, rx951_tgt, rx951_off
-  rx951_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan955_done
-    goto rxscan955_scan
-  rxscan955_loop:
-    ($P10) = rx951_cur."from"()
-    inc $P10
-    set rx951_pos, $P10
-    ge rx951_pos, rx951_eos, rxscan955_done
-  rxscan955_scan:
-    set_addr $I10, rxscan955_loop
-    rx951_cur."!mark_push"(0, rx951_pos, $I10)
-  rxscan955_done:
-.annotate "line", 462
+.sub "prefix:sym<-->"  :subid("237_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx954_tgt
+    .local int rx954_pos
+    .local int rx954_off
+    .local int rx954_eos
+    .local int rx954_rep
+    .local pmc rx954_cur
+    (rx954_cur, rx954_pos, rx954_tgt) = self."!cursor_start"()
+    rx954_cur."!cursor_debug"("START ", "prefix:sym<-->")
+    .lex unicode:"$\x{a2}", rx954_cur
+    .local pmc match
+    .lex "$/", match
+    length rx954_eos, rx954_tgt
+    set rx954_off, 0
+    lt rx954_pos, 2, rx954_start
+    sub rx954_off, rx954_pos, 1
+    substr rx954_tgt, rx954_tgt, rx954_off
+  rx954_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan958_done
+    goto rxscan958_scan
+  rxscan958_loop:
+    ($P10) = rx954_cur."from"()
+    inc $P10
+    set rx954_pos, $P10
+    ge rx954_pos, rx954_eos, rxscan958_done
+  rxscan958_scan:
+    set_addr $I10, rxscan958_loop
+    rx954_cur."!mark_push"(0, rx954_pos, $I10)
+  rxscan958_done:
+.annotate "line", 466
   # rx subcapture "sym"
-    set_addr $I10, rxcap_956_fail
-    rx951_cur."!mark_push"(0, rx951_pos, $I10)
+    set_addr $I10, rxcap_959_fail
+    rx954_cur."!mark_push"(0, rx954_pos, $I10)
   # rx literal  "--"
-    add $I11, rx951_pos, 2
-    gt $I11, rx951_eos, rx951_fail
-    sub $I11, rx951_pos, rx951_off
-    substr $S10, rx951_tgt, $I11, 2
-    ne $S10, "--", rx951_fail
-    add rx951_pos, 2
-    set_addr $I10, rxcap_956_fail
-    ($I12, $I11) = rx951_cur."!mark_peek"($I10)
-    rx951_cur."!cursor_pos"($I11)
-    ($P10) = rx951_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx951_pos, "")
-    rx951_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx954_pos, 2
+    gt $I11, rx954_eos, rx954_fail
+    sub $I11, rx954_pos, rx954_off
+    substr $S10, rx954_tgt, $I11, 2
+    ne $S10, "--", rx954_fail
+    add rx954_pos, 2
+    set_addr $I10, rxcap_959_fail
+    ($I12, $I11) = rx954_cur."!mark_peek"($I10)
+    rx954_cur."!cursor_pos"($I11)
+    ($P10) = rx954_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx954_pos, "")
+    rx954_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_956_done
-  rxcap_956_fail:
-    goto rx951_fail
-  rxcap_956_done:
+    goto rxcap_959_done
+  rxcap_959_fail:
+    goto rx954_fail
+  rxcap_959_done:
   # rx subrule "O" subtype=capture negate=
-    rx951_cur."!cursor_pos"(rx951_pos)
-    $P10 = rx951_cur."O"("%autoincrement, :pirop<dec>")
-    unless $P10, rx951_fail
-    rx951_cur."!mark_push"(0, -1, 0, $P10)
+    rx954_cur."!cursor_pos"(rx954_pos)
+    $P10 = rx954_cur."O"("%autoincrement, :pirop<dec>")
+    unless $P10, rx954_fail
+    rx954_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx951_pos = $P10."pos"()
+    rx954_pos = $P10."pos"()
   # rx pass
-    rx951_cur."!cursor_pass"(rx951_pos, "prefix:sym<-->")
-    rx951_cur."!cursor_debug"("PASS  ", "prefix:sym<-->", " at pos=", rx951_pos)
-    .return (rx951_cur)
-  rx951_fail:
-.annotate "line", 417
-    (rx951_rep, rx951_pos, $I10, $P10) = rx951_cur."!mark_fail"(0)
-    lt rx951_pos, -1, rx951_done
-    eq rx951_pos, -1, rx951_fail
+    rx954_cur."!cursor_pass"(rx954_pos, "prefix:sym<-->")
+    rx954_cur."!cursor_debug"("PASS  ", "prefix:sym<-->", " at pos=", rx954_pos)
+    .return (rx954_cur)
+  rx954_fail:
+.annotate "line", 421
+    (rx954_rep, rx954_pos, $I10, $P10) = rx954_cur."!mark_fail"(0)
+    lt rx954_pos, -1, rx954_done
+    eq rx954_pos, -1, rx954_fail
     jump $I10
-  rx951_done:
-    rx951_cur."!cursor_fail"()
-    rx951_cur."!cursor_debug"("FAIL  ", "prefix:sym<-->")
-    .return (rx951_cur)
+  rx954_done:
+    rx954_cur."!cursor_fail"()
+    rx954_cur."!cursor_debug"("FAIL  ", "prefix:sym<-->")
+    .return (rx954_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<-->"  :subid("238_1267204702.05125") :method
-.annotate "line", 417
-    $P953 = self."!PREFIX__!subrule"("O", "--")
-    new $P954, "ResizablePMCArray"
-    push $P954, $P953
-    .return ($P954)
+.sub "!PREFIX__prefix:sym<-->"  :subid("238_1271336396.90314") :method
+.annotate "line", 421
+    $P956 = self."!PREFIX__!subrule"("O", "--")
+    new $P957, "ResizablePMCArray"
+    push $P957, $P956
+    .return ($P957)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<++>"  :subid("239_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx958_tgt
-    .local int rx958_pos
-    .local int rx958_off
-    .local int rx958_eos
-    .local int rx958_rep
-    .local pmc rx958_cur
-    (rx958_cur, rx958_pos, rx958_tgt) = self."!cursor_start"()
-    rx958_cur."!cursor_debug"("START ", "postfix:sym<++>")
-    .lex unicode:"$\x{a2}", rx958_cur
-    .local pmc match
-    .lex "$/", match
-    length rx958_eos, rx958_tgt
-    set rx958_off, 0
-    lt rx958_pos, 2, rx958_start
-    sub rx958_off, rx958_pos, 1
-    substr rx958_tgt, rx958_tgt, rx958_off
-  rx958_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan962_done
-    goto rxscan962_scan
-  rxscan962_loop:
-    ($P10) = rx958_cur."from"()
-    inc $P10
-    set rx958_pos, $P10
-    ge rx958_pos, rx958_eos, rxscan962_done
-  rxscan962_scan:
-    set_addr $I10, rxscan962_loop
-    rx958_cur."!mark_push"(0, rx958_pos, $I10)
-  rxscan962_done:
-.annotate "line", 465
+.sub "postfix:sym<++>"  :subid("239_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx961_tgt
+    .local int rx961_pos
+    .local int rx961_off
+    .local int rx961_eos
+    .local int rx961_rep
+    .local pmc rx961_cur
+    (rx961_cur, rx961_pos, rx961_tgt) = self."!cursor_start"()
+    rx961_cur."!cursor_debug"("START ", "postfix:sym<++>")
+    .lex unicode:"$\x{a2}", rx961_cur
+    .local pmc match
+    .lex "$/", match
+    length rx961_eos, rx961_tgt
+    set rx961_off, 0
+    lt rx961_pos, 2, rx961_start
+    sub rx961_off, rx961_pos, 1
+    substr rx961_tgt, rx961_tgt, rx961_off
+  rx961_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan965_done
+    goto rxscan965_scan
+  rxscan965_loop:
+    ($P10) = rx961_cur."from"()
+    inc $P10
+    set rx961_pos, $P10
+    ge rx961_pos, rx961_eos, rxscan965_done
+  rxscan965_scan:
+    set_addr $I10, rxscan965_loop
+    rx961_cur."!mark_push"(0, rx961_pos, $I10)
+  rxscan965_done:
+.annotate "line", 469
   # rx subcapture "sym"
-    set_addr $I10, rxcap_963_fail
-    rx958_cur."!mark_push"(0, rx958_pos, $I10)
+    set_addr $I10, rxcap_966_fail
+    rx961_cur."!mark_push"(0, rx961_pos, $I10)
   # rx literal  "++"
-    add $I11, rx958_pos, 2
-    gt $I11, rx958_eos, rx958_fail
-    sub $I11, rx958_pos, rx958_off
-    substr $S10, rx958_tgt, $I11, 2
-    ne $S10, "++", rx958_fail
-    add rx958_pos, 2
-    set_addr $I10, rxcap_963_fail
-    ($I12, $I11) = rx958_cur."!mark_peek"($I10)
-    rx958_cur."!cursor_pos"($I11)
-    ($P10) = rx958_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx958_pos, "")
-    rx958_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx961_pos, 2
+    gt $I11, rx961_eos, rx961_fail
+    sub $I11, rx961_pos, rx961_off
+    substr $S10, rx961_tgt, $I11, 2
+    ne $S10, "++", rx961_fail
+    add rx961_pos, 2
+    set_addr $I10, rxcap_966_fail
+    ($I12, $I11) = rx961_cur."!mark_peek"($I10)
+    rx961_cur."!cursor_pos"($I11)
+    ($P10) = rx961_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx961_pos, "")
+    rx961_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_963_done
-  rxcap_963_fail:
-    goto rx958_fail
-  rxcap_963_done:
+    goto rxcap_966_done
+  rxcap_966_fail:
+    goto rx961_fail
+  rxcap_966_done:
   # rx subrule "O" subtype=capture negate=
-    rx958_cur."!cursor_pos"(rx958_pos)
-    $P10 = rx958_cur."O"("%autoincrement")
-    unless $P10, rx958_fail
-    rx958_cur."!mark_push"(0, -1, 0, $P10)
+    rx961_cur."!cursor_pos"(rx961_pos)
+    $P10 = rx961_cur."O"("%autoincrement")
+    unless $P10, rx961_fail
+    rx961_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx958_pos = $P10."pos"()
+    rx961_pos = $P10."pos"()
   # rx pass
-    rx958_cur."!cursor_pass"(rx958_pos, "postfix:sym<++>")
-    rx958_cur."!cursor_debug"("PASS  ", "postfix:sym<++>", " at pos=", rx958_pos)
-    .return (rx958_cur)
-  rx958_fail:
-.annotate "line", 417
-    (rx958_rep, rx958_pos, $I10, $P10) = rx958_cur."!mark_fail"(0)
-    lt rx958_pos, -1, rx958_done
-    eq rx958_pos, -1, rx958_fail
+    rx961_cur."!cursor_pass"(rx961_pos, "postfix:sym<++>")
+    rx961_cur."!cursor_debug"("PASS  ", "postfix:sym<++>", " at pos=", rx961_pos)
+    .return (rx961_cur)
+  rx961_fail:
+.annotate "line", 421
+    (rx961_rep, rx961_pos, $I10, $P10) = rx961_cur."!mark_fail"(0)
+    lt rx961_pos, -1, rx961_done
+    eq rx961_pos, -1, rx961_fail
     jump $I10
-  rx958_done:
-    rx958_cur."!cursor_fail"()
-    rx958_cur."!cursor_debug"("FAIL  ", "postfix:sym<++>")
-    .return (rx958_cur)
+  rx961_done:
+    rx961_cur."!cursor_fail"()
+    rx961_cur."!cursor_debug"("FAIL  ", "postfix:sym<++>")
+    .return (rx961_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<++>"  :subid("240_1267204702.05125") :method
-.annotate "line", 417
-    $P960 = self."!PREFIX__!subrule"("O", "++")
-    new $P961, "ResizablePMCArray"
-    push $P961, $P960
-    .return ($P961)
+.sub "!PREFIX__postfix:sym<++>"  :subid("240_1271336396.90314") :method
+.annotate "line", 421
+    $P963 = self."!PREFIX__!subrule"("O", "++")
+    new $P964, "ResizablePMCArray"
+    push $P964, $P963
+    .return ($P964)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<-->"  :subid("241_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx965_tgt
-    .local int rx965_pos
-    .local int rx965_off
-    .local int rx965_eos
-    .local int rx965_rep
-    .local pmc rx965_cur
-    (rx965_cur, rx965_pos, rx965_tgt) = self."!cursor_start"()
-    rx965_cur."!cursor_debug"("START ", "postfix:sym<-->")
-    .lex unicode:"$\x{a2}", rx965_cur
-    .local pmc match
-    .lex "$/", match
-    length rx965_eos, rx965_tgt
-    set rx965_off, 0
-    lt rx965_pos, 2, rx965_start
-    sub rx965_off, rx965_pos, 1
-    substr rx965_tgt, rx965_tgt, rx965_off
-  rx965_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan969_done
-    goto rxscan969_scan
-  rxscan969_loop:
-    ($P10) = rx965_cur."from"()
-    inc $P10
-    set rx965_pos, $P10
-    ge rx965_pos, rx965_eos, rxscan969_done
-  rxscan969_scan:
-    set_addr $I10, rxscan969_loop
-    rx965_cur."!mark_push"(0, rx965_pos, $I10)
-  rxscan969_done:
-.annotate "line", 466
+.sub "postfix:sym<-->"  :subid("241_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx968_tgt
+    .local int rx968_pos
+    .local int rx968_off
+    .local int rx968_eos
+    .local int rx968_rep
+    .local pmc rx968_cur
+    (rx968_cur, rx968_pos, rx968_tgt) = self."!cursor_start"()
+    rx968_cur."!cursor_debug"("START ", "postfix:sym<-->")
+    .lex unicode:"$\x{a2}", rx968_cur
+    .local pmc match
+    .lex "$/", match
+    length rx968_eos, rx968_tgt
+    set rx968_off, 0
+    lt rx968_pos, 2, rx968_start
+    sub rx968_off, rx968_pos, 1
+    substr rx968_tgt, rx968_tgt, rx968_off
+  rx968_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan972_done
+    goto rxscan972_scan
+  rxscan972_loop:
+    ($P10) = rx968_cur."from"()
+    inc $P10
+    set rx968_pos, $P10
+    ge rx968_pos, rx968_eos, rxscan972_done
+  rxscan972_scan:
+    set_addr $I10, rxscan972_loop
+    rx968_cur."!mark_push"(0, rx968_pos, $I10)
+  rxscan972_done:
+.annotate "line", 470
   # rx subcapture "sym"
-    set_addr $I10, rxcap_970_fail
-    rx965_cur."!mark_push"(0, rx965_pos, $I10)
+    set_addr $I10, rxcap_973_fail
+    rx968_cur."!mark_push"(0, rx968_pos, $I10)
   # rx literal  "--"
-    add $I11, rx965_pos, 2
-    gt $I11, rx965_eos, rx965_fail
-    sub $I11, rx965_pos, rx965_off
-    substr $S10, rx965_tgt, $I11, 2
-    ne $S10, "--", rx965_fail
-    add rx965_pos, 2
-    set_addr $I10, rxcap_970_fail
-    ($I12, $I11) = rx965_cur."!mark_peek"($I10)
-    rx965_cur."!cursor_pos"($I11)
-    ($P10) = rx965_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx965_pos, "")
-    rx965_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx968_pos, 2
+    gt $I11, rx968_eos, rx968_fail
+    sub $I11, rx968_pos, rx968_off
+    substr $S10, rx968_tgt, $I11, 2
+    ne $S10, "--", rx968_fail
+    add rx968_pos, 2
+    set_addr $I10, rxcap_973_fail
+    ($I12, $I11) = rx968_cur."!mark_peek"($I10)
+    rx968_cur."!cursor_pos"($I11)
+    ($P10) = rx968_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx968_pos, "")
+    rx968_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_970_done
-  rxcap_970_fail:
-    goto rx965_fail
-  rxcap_970_done:
+    goto rxcap_973_done
+  rxcap_973_fail:
+    goto rx968_fail
+  rxcap_973_done:
   # rx subrule "O" subtype=capture negate=
-    rx965_cur."!cursor_pos"(rx965_pos)
-    $P10 = rx965_cur."O"("%autoincrement")
-    unless $P10, rx965_fail
-    rx965_cur."!mark_push"(0, -1, 0, $P10)
+    rx968_cur."!cursor_pos"(rx968_pos)
+    $P10 = rx968_cur."O"("%autoincrement")
+    unless $P10, rx968_fail
+    rx968_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx965_pos = $P10."pos"()
+    rx968_pos = $P10."pos"()
   # rx pass
-    rx965_cur."!cursor_pass"(rx965_pos, "postfix:sym<-->")
-    rx965_cur."!cursor_debug"("PASS  ", "postfix:sym<-->", " at pos=", rx965_pos)
-    .return (rx965_cur)
-  rx965_fail:
-.annotate "line", 417
-    (rx965_rep, rx965_pos, $I10, $P10) = rx965_cur."!mark_fail"(0)
-    lt rx965_pos, -1, rx965_done
-    eq rx965_pos, -1, rx965_fail
+    rx968_cur."!cursor_pass"(rx968_pos, "postfix:sym<-->")
+    rx968_cur."!cursor_debug"("PASS  ", "postfix:sym<-->", " at pos=", rx968_pos)
+    .return (rx968_cur)
+  rx968_fail:
+.annotate "line", 421
+    (rx968_rep, rx968_pos, $I10, $P10) = rx968_cur."!mark_fail"(0)
+    lt rx968_pos, -1, rx968_done
+    eq rx968_pos, -1, rx968_fail
     jump $I10
-  rx965_done:
-    rx965_cur."!cursor_fail"()
-    rx965_cur."!cursor_debug"("FAIL  ", "postfix:sym<-->")
-    .return (rx965_cur)
+  rx968_done:
+    rx968_cur."!cursor_fail"()
+    rx968_cur."!cursor_debug"("FAIL  ", "postfix:sym<-->")
+    .return (rx968_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<-->"  :subid("242_1267204702.05125") :method
-.annotate "line", 417
-    $P967 = self."!PREFIX__!subrule"("O", "--")
-    new $P968, "ResizablePMCArray"
-    push $P968, $P967
-    .return ($P968)
+.sub "!PREFIX__postfix:sym<-->"  :subid("242_1271336396.90314") :method
+.annotate "line", 421
+    $P970 = self."!PREFIX__!subrule"("O", "--")
+    new $P971, "ResizablePMCArray"
+    push $P971, $P970
+    .return ($P971)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<**>"  :subid("243_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx972_tgt
-    .local int rx972_pos
-    .local int rx972_off
-    .local int rx972_eos
-    .local int rx972_rep
-    .local pmc rx972_cur
-    (rx972_cur, rx972_pos, rx972_tgt) = self."!cursor_start"()
-    rx972_cur."!cursor_debug"("START ", "infix:sym<**>")
-    .lex unicode:"$\x{a2}", rx972_cur
-    .local pmc match
-    .lex "$/", match
-    length rx972_eos, rx972_tgt
-    set rx972_off, 0
-    lt rx972_pos, 2, rx972_start
-    sub rx972_off, rx972_pos, 1
-    substr rx972_tgt, rx972_tgt, rx972_off
-  rx972_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan976_done
-    goto rxscan976_scan
-  rxscan976_loop:
-    ($P10) = rx972_cur."from"()
-    inc $P10
-    set rx972_pos, $P10
-    ge rx972_pos, rx972_eos, rxscan976_done
-  rxscan976_scan:
-    set_addr $I10, rxscan976_loop
-    rx972_cur."!mark_push"(0, rx972_pos, $I10)
-  rxscan976_done:
-.annotate "line", 468
+.sub "infix:sym<**>"  :subid("243_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx975_tgt
+    .local int rx975_pos
+    .local int rx975_off
+    .local int rx975_eos
+    .local int rx975_rep
+    .local pmc rx975_cur
+    (rx975_cur, rx975_pos, rx975_tgt) = self."!cursor_start"()
+    rx975_cur."!cursor_debug"("START ", "infix:sym<**>")
+    .lex unicode:"$\x{a2}", rx975_cur
+    .local pmc match
+    .lex "$/", match
+    length rx975_eos, rx975_tgt
+    set rx975_off, 0
+    lt rx975_pos, 2, rx975_start
+    sub rx975_off, rx975_pos, 1
+    substr rx975_tgt, rx975_tgt, rx975_off
+  rx975_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan979_done
+    goto rxscan979_scan
+  rxscan979_loop:
+    ($P10) = rx975_cur."from"()
+    inc $P10
+    set rx975_pos, $P10
+    ge rx975_pos, rx975_eos, rxscan979_done
+  rxscan979_scan:
+    set_addr $I10, rxscan979_loop
+    rx975_cur."!mark_push"(0, rx975_pos, $I10)
+  rxscan979_done:
+.annotate "line", 472
   # rx subcapture "sym"
-    set_addr $I10, rxcap_977_fail
-    rx972_cur."!mark_push"(0, rx972_pos, $I10)
+    set_addr $I10, rxcap_980_fail
+    rx975_cur."!mark_push"(0, rx975_pos, $I10)
   # rx literal  "**"
-    add $I11, rx972_pos, 2
-    gt $I11, rx972_eos, rx972_fail
-    sub $I11, rx972_pos, rx972_off
-    substr $S10, rx972_tgt, $I11, 2
-    ne $S10, "**", rx972_fail
-    add rx972_pos, 2
-    set_addr $I10, rxcap_977_fail
-    ($I12, $I11) = rx972_cur."!mark_peek"($I10)
-    rx972_cur."!cursor_pos"($I11)
-    ($P10) = rx972_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx972_pos, "")
-    rx972_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx975_pos, 2
+    gt $I11, rx975_eos, rx975_fail
+    sub $I11, rx975_pos, rx975_off
+    substr $S10, rx975_tgt, $I11, 2
+    ne $S10, "**", rx975_fail
+    add rx975_pos, 2
+    set_addr $I10, rxcap_980_fail
+    ($I12, $I11) = rx975_cur."!mark_peek"($I10)
+    rx975_cur."!cursor_pos"($I11)
+    ($P10) = rx975_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx975_pos, "")
+    rx975_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_977_done
-  rxcap_977_fail:
-    goto rx972_fail
-  rxcap_977_done:
+    goto rxcap_980_done
+  rxcap_980_fail:
+    goto rx975_fail
+  rxcap_980_done:
   # rx subrule "O" subtype=capture negate=
-    rx972_cur."!cursor_pos"(rx972_pos)
-    $P10 = rx972_cur."O"("%exponentiation, :pirop<pow>")
-    unless $P10, rx972_fail
-    rx972_cur."!mark_push"(0, -1, 0, $P10)
+    rx975_cur."!cursor_pos"(rx975_pos)
+    $P10 = rx975_cur."O"("%exponentiation, :pirop<pow>")
+    unless $P10, rx975_fail
+    rx975_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx972_pos = $P10."pos"()
+    rx975_pos = $P10."pos"()
   # rx pass
-    rx972_cur."!cursor_pass"(rx972_pos, "infix:sym<**>")
-    rx972_cur."!cursor_debug"("PASS  ", "infix:sym<**>", " at pos=", rx972_pos)
-    .return (rx972_cur)
-  rx972_fail:
-.annotate "line", 417
-    (rx972_rep, rx972_pos, $I10, $P10) = rx972_cur."!mark_fail"(0)
-    lt rx972_pos, -1, rx972_done
-    eq rx972_pos, -1, rx972_fail
+    rx975_cur."!cursor_pass"(rx975_pos, "infix:sym<**>")
+    rx975_cur."!cursor_debug"("PASS  ", "infix:sym<**>", " at pos=", rx975_pos)
+    .return (rx975_cur)
+  rx975_fail:
+.annotate "line", 421
+    (rx975_rep, rx975_pos, $I10, $P10) = rx975_cur."!mark_fail"(0)
+    lt rx975_pos, -1, rx975_done
+    eq rx975_pos, -1, rx975_fail
     jump $I10
-  rx972_done:
-    rx972_cur."!cursor_fail"()
-    rx972_cur."!cursor_debug"("FAIL  ", "infix:sym<**>")
-    .return (rx972_cur)
+  rx975_done:
+    rx975_cur."!cursor_fail"()
+    rx975_cur."!cursor_debug"("FAIL  ", "infix:sym<**>")
+    .return (rx975_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<**>"  :subid("244_1267204702.05125") :method
-.annotate "line", 417
-    $P974 = self."!PREFIX__!subrule"("O", "**")
-    new $P975, "ResizablePMCArray"
-    push $P975, $P974
-    .return ($P975)
+.sub "!PREFIX__infix:sym<**>"  :subid("244_1271336396.90314") :method
+.annotate "line", 421
+    $P977 = self."!PREFIX__!subrule"("O", "**")
+    new $P978, "ResizablePMCArray"
+    push $P978, $P977
+    .return ($P978)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<+>"  :subid("245_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx979_tgt
-    .local int rx979_pos
-    .local int rx979_off
-    .local int rx979_eos
-    .local int rx979_rep
-    .local pmc rx979_cur
-    (rx979_cur, rx979_pos, rx979_tgt) = self."!cursor_start"()
-    rx979_cur."!cursor_debug"("START ", "prefix:sym<+>")
-    .lex unicode:"$\x{a2}", rx979_cur
-    .local pmc match
-    .lex "$/", match
-    length rx979_eos, rx979_tgt
-    set rx979_off, 0
-    lt rx979_pos, 2, rx979_start
-    sub rx979_off, rx979_pos, 1
-    substr rx979_tgt, rx979_tgt, rx979_off
-  rx979_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan983_done
-    goto rxscan983_scan
-  rxscan983_loop:
-    ($P10) = rx979_cur."from"()
-    inc $P10
-    set rx979_pos, $P10
-    ge rx979_pos, rx979_eos, rxscan983_done
-  rxscan983_scan:
-    set_addr $I10, rxscan983_loop
-    rx979_cur."!mark_push"(0, rx979_pos, $I10)
-  rxscan983_done:
-.annotate "line", 470
+.sub "prefix:sym<+>"  :subid("245_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx982_tgt
+    .local int rx982_pos
+    .local int rx982_off
+    .local int rx982_eos
+    .local int rx982_rep
+    .local pmc rx982_cur
+    (rx982_cur, rx982_pos, rx982_tgt) = self."!cursor_start"()
+    rx982_cur."!cursor_debug"("START ", "prefix:sym<+>")
+    .lex unicode:"$\x{a2}", rx982_cur
+    .local pmc match
+    .lex "$/", match
+    length rx982_eos, rx982_tgt
+    set rx982_off, 0
+    lt rx982_pos, 2, rx982_start
+    sub rx982_off, rx982_pos, 1
+    substr rx982_tgt, rx982_tgt, rx982_off
+  rx982_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan986_done
+    goto rxscan986_scan
+  rxscan986_loop:
+    ($P10) = rx982_cur."from"()
+    inc $P10
+    set rx982_pos, $P10
+    ge rx982_pos, rx982_eos, rxscan986_done
+  rxscan986_scan:
+    set_addr $I10, rxscan986_loop
+    rx982_cur."!mark_push"(0, rx982_pos, $I10)
+  rxscan986_done:
+.annotate "line", 474
   # rx subcapture "sym"
-    set_addr $I10, rxcap_984_fail
-    rx979_cur."!mark_push"(0, rx979_pos, $I10)
+    set_addr $I10, rxcap_987_fail
+    rx982_cur."!mark_push"(0, rx982_pos, $I10)
   # rx literal  "+"
-    add $I11, rx979_pos, 1
-    gt $I11, rx979_eos, rx979_fail
-    sub $I11, rx979_pos, rx979_off
-    substr $S10, rx979_tgt, $I11, 1
-    ne $S10, "+", rx979_fail
-    add rx979_pos, 1
-    set_addr $I10, rxcap_984_fail
-    ($I12, $I11) = rx979_cur."!mark_peek"($I10)
-    rx979_cur."!cursor_pos"($I11)
-    ($P10) = rx979_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx979_pos, "")
-    rx979_cur."!mark_push"(0, -1, 0, $P10)
+    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
+    add rx982_pos, 1
+    set_addr $I10, rxcap_987_fail
+    ($I12, $I11) = rx982_cur."!mark_peek"($I10)
+    rx982_cur."!cursor_pos"($I11)
+    ($P10) = rx982_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx982_pos, "")
+    rx982_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_984_done
-  rxcap_984_fail:
-    goto rx979_fail
-  rxcap_984_done:
+    goto rxcap_987_done
+  rxcap_987_fail:
+    goto rx982_fail
+  rxcap_987_done:
   # rx subrule "O" subtype=capture negate=
-    rx979_cur."!cursor_pos"(rx979_pos)
-    $P10 = rx979_cur."O"("%symbolic_unary, :pirop<set N*>")
-    unless $P10, rx979_fail
-    rx979_cur."!mark_push"(0, -1, 0, $P10)
+    rx982_cur."!cursor_pos"(rx982_pos)
+    $P10 = rx982_cur."O"("%symbolic_unary, :pirop<set N*>")
+    unless $P10, rx982_fail
+    rx982_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx979_pos = $P10."pos"()
+    rx982_pos = $P10."pos"()
   # rx pass
-    rx979_cur."!cursor_pass"(rx979_pos, "prefix:sym<+>")
-    rx979_cur."!cursor_debug"("PASS  ", "prefix:sym<+>", " at pos=", rx979_pos)
-    .return (rx979_cur)
-  rx979_fail:
-.annotate "line", 417
-    (rx979_rep, rx979_pos, $I10, $P10) = rx979_cur."!mark_fail"(0)
-    lt rx979_pos, -1, rx979_done
-    eq rx979_pos, -1, rx979_fail
+    rx982_cur."!cursor_pass"(rx982_pos, "prefix:sym<+>")
+    rx982_cur."!cursor_debug"("PASS  ", "prefix:sym<+>", " at pos=", rx982_pos)
+    .return (rx982_cur)
+  rx982_fail:
+.annotate "line", 421
+    (rx982_rep, rx982_pos, $I10, $P10) = rx982_cur."!mark_fail"(0)
+    lt rx982_pos, -1, rx982_done
+    eq rx982_pos, -1, rx982_fail
     jump $I10
-  rx979_done:
-    rx979_cur."!cursor_fail"()
-    rx979_cur."!cursor_debug"("FAIL  ", "prefix:sym<+>")
-    .return (rx979_cur)
+  rx982_done:
+    rx982_cur."!cursor_fail"()
+    rx982_cur."!cursor_debug"("FAIL  ", "prefix:sym<+>")
+    .return (rx982_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<+>"  :subid("246_1267204702.05125") :method
-.annotate "line", 417
-    $P981 = self."!PREFIX__!subrule"("O", "+")
-    new $P982, "ResizablePMCArray"
-    push $P982, $P981
-    .return ($P982)
+.sub "!PREFIX__prefix:sym<+>"  :subid("246_1271336396.90314") :method
+.annotate "line", 421
+    $P984 = self."!PREFIX__!subrule"("O", "+")
+    new $P985, "ResizablePMCArray"
+    push $P985, $P984
+    .return ($P985)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<~>"  :subid("247_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx986_tgt
-    .local int rx986_pos
-    .local int rx986_off
-    .local int rx986_eos
-    .local int rx986_rep
-    .local pmc rx986_cur
-    (rx986_cur, rx986_pos, rx986_tgt) = self."!cursor_start"()
-    rx986_cur."!cursor_debug"("START ", "prefix:sym<~>")
-    .lex unicode:"$\x{a2}", rx986_cur
-    .local pmc match
-    .lex "$/", match
-    length rx986_eos, rx986_tgt
-    set rx986_off, 0
-    lt rx986_pos, 2, rx986_start
-    sub rx986_off, rx986_pos, 1
-    substr rx986_tgt, rx986_tgt, rx986_off
-  rx986_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan990_done
-    goto rxscan990_scan
-  rxscan990_loop:
-    ($P10) = rx986_cur."from"()
-    inc $P10
-    set rx986_pos, $P10
-    ge rx986_pos, rx986_eos, rxscan990_done
-  rxscan990_scan:
-    set_addr $I10, rxscan990_loop
-    rx986_cur."!mark_push"(0, rx986_pos, $I10)
-  rxscan990_done:
-.annotate "line", 471
+.sub "prefix:sym<~>"  :subid("247_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx989_tgt
+    .local int rx989_pos
+    .local int rx989_off
+    .local int rx989_eos
+    .local int rx989_rep
+    .local pmc rx989_cur
+    (rx989_cur, rx989_pos, rx989_tgt) = self."!cursor_start"()
+    rx989_cur."!cursor_debug"("START ", "prefix:sym<~>")
+    .lex unicode:"$\x{a2}", rx989_cur
+    .local pmc match
+    .lex "$/", match
+    length rx989_eos, rx989_tgt
+    set rx989_off, 0
+    lt rx989_pos, 2, rx989_start
+    sub rx989_off, rx989_pos, 1
+    substr rx989_tgt, rx989_tgt, rx989_off
+  rx989_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan993_done
+    goto rxscan993_scan
+  rxscan993_loop:
+    ($P10) = rx989_cur."from"()
+    inc $P10
+    set rx989_pos, $P10
+    ge rx989_pos, rx989_eos, rxscan993_done
+  rxscan993_scan:
+    set_addr $I10, rxscan993_loop
+    rx989_cur."!mark_push"(0, rx989_pos, $I10)
+  rxscan993_done:
+.annotate "line", 475
   # rx subcapture "sym"
-    set_addr $I10, rxcap_991_fail
-    rx986_cur."!mark_push"(0, rx986_pos, $I10)
+    set_addr $I10, rxcap_994_fail
+    rx989_cur."!mark_push"(0, rx989_pos, $I10)
   # rx literal  "~"
-    add $I11, rx986_pos, 1
-    gt $I11, rx986_eos, rx986_fail
-    sub $I11, rx986_pos, rx986_off
-    substr $S10, rx986_tgt, $I11, 1
-    ne $S10, "~", rx986_fail
-    add rx986_pos, 1
-    set_addr $I10, rxcap_991_fail
-    ($I12, $I11) = rx986_cur."!mark_peek"($I10)
-    rx986_cur."!cursor_pos"($I11)
-    ($P10) = rx986_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx986_pos, "")
-    rx986_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx989_pos, 1
+    gt $I11, rx989_eos, rx989_fail
+    sub $I11, rx989_pos, rx989_off
+    substr $S10, rx989_tgt, $I11, 1
+    ne $S10, "~", rx989_fail
+    add rx989_pos, 1
+    set_addr $I10, rxcap_994_fail
+    ($I12, $I11) = rx989_cur."!mark_peek"($I10)
+    rx989_cur."!cursor_pos"($I11)
+    ($P10) = rx989_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx989_pos, "")
+    rx989_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_991_done
-  rxcap_991_fail:
-    goto rx986_fail
-  rxcap_991_done:
+    goto rxcap_994_done
+  rxcap_994_fail:
+    goto rx989_fail
+  rxcap_994_done:
   # rx subrule "O" subtype=capture negate=
-    rx986_cur."!cursor_pos"(rx986_pos)
-    $P10 = rx986_cur."O"("%symbolic_unary, :pirop<set S*>")
-    unless $P10, rx986_fail
-    rx986_cur."!mark_push"(0, -1, 0, $P10)
+    rx989_cur."!cursor_pos"(rx989_pos)
+    $P10 = rx989_cur."O"("%symbolic_unary, :pirop<set S*>")
+    unless $P10, rx989_fail
+    rx989_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx986_pos = $P10."pos"()
+    rx989_pos = $P10."pos"()
   # rx pass
-    rx986_cur."!cursor_pass"(rx986_pos, "prefix:sym<~>")
-    rx986_cur."!cursor_debug"("PASS  ", "prefix:sym<~>", " at pos=", rx986_pos)
-    .return (rx986_cur)
-  rx986_fail:
-.annotate "line", 417
-    (rx986_rep, rx986_pos, $I10, $P10) = rx986_cur."!mark_fail"(0)
-    lt rx986_pos, -1, rx986_done
-    eq rx986_pos, -1, rx986_fail
+    rx989_cur."!cursor_pass"(rx989_pos, "prefix:sym<~>")
+    rx989_cur."!cursor_debug"("PASS  ", "prefix:sym<~>", " at pos=", rx989_pos)
+    .return (rx989_cur)
+  rx989_fail:
+.annotate "line", 421
+    (rx989_rep, rx989_pos, $I10, $P10) = rx989_cur."!mark_fail"(0)
+    lt rx989_pos, -1, rx989_done
+    eq rx989_pos, -1, rx989_fail
     jump $I10
-  rx986_done:
-    rx986_cur."!cursor_fail"()
-    rx986_cur."!cursor_debug"("FAIL  ", "prefix:sym<~>")
-    .return (rx986_cur)
+  rx989_done:
+    rx989_cur."!cursor_fail"()
+    rx989_cur."!cursor_debug"("FAIL  ", "prefix:sym<~>")
+    .return (rx989_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<~>"  :subid("248_1267204702.05125") :method
-.annotate "line", 417
-    $P988 = self."!PREFIX__!subrule"("O", "~")
-    new $P989, "ResizablePMCArray"
-    push $P989, $P988
-    .return ($P989)
+.sub "!PREFIX__prefix:sym<~>"  :subid("248_1271336396.90314") :method
+.annotate "line", 421
+    $P991 = self."!PREFIX__!subrule"("O", "~")
+    new $P992, "ResizablePMCArray"
+    push $P992, $P991
+    .return ($P992)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<->"  :subid("249_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx993_tgt
-    .local int rx993_pos
-    .local int rx993_off
-    .local int rx993_eos
-    .local int rx993_rep
-    .local pmc rx993_cur
-    (rx993_cur, rx993_pos, rx993_tgt) = self."!cursor_start"()
-    rx993_cur."!cursor_debug"("START ", "prefix:sym<->")
-    .lex unicode:"$\x{a2}", rx993_cur
-    .local pmc match
-    .lex "$/", match
-    length rx993_eos, rx993_tgt
-    set rx993_off, 0
-    lt rx993_pos, 2, rx993_start
-    sub rx993_off, rx993_pos, 1
-    substr rx993_tgt, rx993_tgt, rx993_off
-  rx993_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan996_done
-    goto rxscan996_scan
-  rxscan996_loop:
-    ($P10) = rx993_cur."from"()
-    inc $P10
-    set rx993_pos, $P10
-    ge rx993_pos, rx993_eos, rxscan996_done
-  rxscan996_scan:
-    set_addr $I10, rxscan996_loop
-    rx993_cur."!mark_push"(0, rx993_pos, $I10)
-  rxscan996_done:
-.annotate "line", 472
+.sub "prefix:sym<->"  :subid("249_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx996_tgt
+    .local int rx996_pos
+    .local int rx996_off
+    .local int rx996_eos
+    .local int rx996_rep
+    .local pmc rx996_cur
+    (rx996_cur, rx996_pos, rx996_tgt) = self."!cursor_start"()
+    rx996_cur."!cursor_debug"("START ", "prefix:sym<->")
+    .lex unicode:"$\x{a2}", rx996_cur
+    .local pmc match
+    .lex "$/", match
+    length rx996_eos, rx996_tgt
+    set rx996_off, 0
+    lt rx996_pos, 2, rx996_start
+    sub rx996_off, rx996_pos, 1
+    substr rx996_tgt, rx996_tgt, rx996_off
+  rx996_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan999_done
+    goto rxscan999_scan
+  rxscan999_loop:
+    ($P10) = rx996_cur."from"()
+    inc $P10
+    set rx996_pos, $P10
+    ge rx996_pos, rx996_eos, rxscan999_done
+  rxscan999_scan:
+    set_addr $I10, rxscan999_loop
+    rx996_cur."!mark_push"(0, rx996_pos, $I10)
+  rxscan999_done:
+.annotate "line", 476
   # rx subcapture "sym"
-    set_addr $I10, rxcap_997_fail
-    rx993_cur."!mark_push"(0, rx993_pos, $I10)
+    set_addr $I10, rxcap_1000_fail
+    rx996_cur."!mark_push"(0, rx996_pos, $I10)
   # rx literal  "-"
-    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
-    add rx993_pos, 1
-    set_addr $I10, rxcap_997_fail
-    ($I12, $I11) = rx993_cur."!mark_peek"($I10)
-    rx993_cur."!cursor_pos"($I11)
-    ($P10) = rx993_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx993_pos, "")
-    rx993_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx996_pos, 1
+    gt $I11, rx996_eos, rx996_fail
+    sub $I11, rx996_pos, rx996_off
+    substr $S10, rx996_tgt, $I11, 1
+    ne $S10, "-", rx996_fail
+    add rx996_pos, 1
+    set_addr $I10, rxcap_1000_fail
+    ($I12, $I11) = rx996_cur."!mark_peek"($I10)
+    rx996_cur."!cursor_pos"($I11)
+    ($P10) = rx996_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx996_pos, "")
+    rx996_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_997_done
-  rxcap_997_fail:
-    goto rx993_fail
-  rxcap_997_done:
+    goto rxcap_1000_done
+  rxcap_1000_fail:
+    goto rx996_fail
+  rxcap_1000_done:
   # rx enumcharlist negate=1 zerowidth
-    ge rx993_pos, rx993_eos, rx993_fail
-    sub $I10, rx993_pos, rx993_off
-    substr $S10, rx993_tgt, $I10, 1
+    ge rx996_pos, rx996_eos, rx996_fail
+    sub $I10, rx996_pos, rx996_off
+    substr $S10, rx996_tgt, $I10, 1
     index $I11, ">", $S10
-    ge $I11, 0, rx993_fail
+    ge $I11, 0, rx996_fail
   # rx subrule "number" subtype=zerowidth negate=1
-    rx993_cur."!cursor_pos"(rx993_pos)
-    $P10 = rx993_cur."number"()
-    if $P10, rx993_fail
+    rx996_cur."!cursor_pos"(rx996_pos)
+    $P10 = rx996_cur."number"()
+    if $P10, rx996_fail
   # rx subrule "O" subtype=capture negate=
-    rx993_cur."!cursor_pos"(rx993_pos)
-    $P10 = rx993_cur."O"("%symbolic_unary, :pirop<neg>")
-    unless $P10, rx993_fail
-    rx993_cur."!mark_push"(0, -1, 0, $P10)
+    rx996_cur."!cursor_pos"(rx996_pos)
+    $P10 = rx996_cur."O"("%symbolic_unary, :pirop<neg>")
+    unless $P10, rx996_fail
+    rx996_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx993_pos = $P10."pos"()
+    rx996_pos = $P10."pos"()
   # rx pass
-    rx993_cur."!cursor_pass"(rx993_pos, "prefix:sym<->")
-    rx993_cur."!cursor_debug"("PASS  ", "prefix:sym<->", " at pos=", rx993_pos)
-    .return (rx993_cur)
-  rx993_fail:
-.annotate "line", 417
-    (rx993_rep, rx993_pos, $I10, $P10) = rx993_cur."!mark_fail"(0)
-    lt rx993_pos, -1, rx993_done
-    eq rx993_pos, -1, rx993_fail
+    rx996_cur."!cursor_pass"(rx996_pos, "prefix:sym<->")
+    rx996_cur."!cursor_debug"("PASS  ", "prefix:sym<->", " at pos=", rx996_pos)
+    .return (rx996_cur)
+  rx996_fail:
+.annotate "line", 421
+    (rx996_rep, rx996_pos, $I10, $P10) = rx996_cur."!mark_fail"(0)
+    lt rx996_pos, -1, rx996_done
+    eq rx996_pos, -1, rx996_fail
     jump $I10
-  rx993_done:
-    rx993_cur."!cursor_fail"()
-    rx993_cur."!cursor_debug"("FAIL  ", "prefix:sym<->")
-    .return (rx993_cur)
+  rx996_done:
+    rx996_cur."!cursor_fail"()
+    rx996_cur."!cursor_debug"("FAIL  ", "prefix:sym<->")
+    .return (rx996_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<->"  :subid("250_1267204702.05125") :method
-.annotate "line", 417
-    new $P995, "ResizablePMCArray"
-    push $P995, "-"
-    .return ($P995)
+.sub "!PREFIX__prefix:sym<->"  :subid("250_1271336396.90314") :method
+.annotate "line", 421
+    new $P998, "ResizablePMCArray"
+    push $P998, "-"
+    .return ($P998)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<?>"  :subid("251_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx999_tgt
-    .local int rx999_pos
-    .local int rx999_off
-    .local int rx999_eos
-    .local int rx999_rep
-    .local pmc rx999_cur
-    (rx999_cur, rx999_pos, rx999_tgt) = self."!cursor_start"()
-    rx999_cur."!cursor_debug"("START ", "prefix:sym<?>")
-    .lex unicode:"$\x{a2}", rx999_cur
-    .local pmc match
-    .lex "$/", match
-    length rx999_eos, rx999_tgt
-    set rx999_off, 0
-    lt rx999_pos, 2, rx999_start
-    sub rx999_off, rx999_pos, 1
-    substr rx999_tgt, rx999_tgt, rx999_off
-  rx999_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1003_done
-    goto rxscan1003_scan
-  rxscan1003_loop:
-    ($P10) = rx999_cur."from"()
-    inc $P10
-    set rx999_pos, $P10
-    ge rx999_pos, rx999_eos, rxscan1003_done
-  rxscan1003_scan:
-    set_addr $I10, rxscan1003_loop
-    rx999_cur."!mark_push"(0, rx999_pos, $I10)
-  rxscan1003_done:
-.annotate "line", 473
+.sub "prefix:sym<?>"  :subid("251_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1002_tgt
+    .local int rx1002_pos
+    .local int rx1002_off
+    .local int rx1002_eos
+    .local int rx1002_rep
+    .local pmc rx1002_cur
+    (rx1002_cur, rx1002_pos, rx1002_tgt) = self."!cursor_start"()
+    rx1002_cur."!cursor_debug"("START ", "prefix:sym<?>")
+    .lex unicode:"$\x{a2}", rx1002_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1002_eos, rx1002_tgt
+    set rx1002_off, 0
+    lt rx1002_pos, 2, rx1002_start
+    sub rx1002_off, rx1002_pos, 1
+    substr rx1002_tgt, rx1002_tgt, rx1002_off
+  rx1002_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1006_done
+    goto rxscan1006_scan
+  rxscan1006_loop:
+    ($P10) = rx1002_cur."from"()
+    inc $P10
+    set rx1002_pos, $P10
+    ge rx1002_pos, rx1002_eos, rxscan1006_done
+  rxscan1006_scan:
+    set_addr $I10, rxscan1006_loop
+    rx1002_cur."!mark_push"(0, rx1002_pos, $I10)
+  rxscan1006_done:
+.annotate "line", 477
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1004_fail
-    rx999_cur."!mark_push"(0, rx999_pos, $I10)
+    set_addr $I10, rxcap_1007_fail
+    rx1002_cur."!mark_push"(0, rx1002_pos, $I10)
   # rx literal  "?"
-    add $I11, rx999_pos, 1
-    gt $I11, rx999_eos, rx999_fail
-    sub $I11, rx999_pos, rx999_off
-    substr $S10, rx999_tgt, $I11, 1
-    ne $S10, "?", rx999_fail
-    add rx999_pos, 1
-    set_addr $I10, rxcap_1004_fail
-    ($I12, $I11) = rx999_cur."!mark_peek"($I10)
-    rx999_cur."!cursor_pos"($I11)
-    ($P10) = rx999_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx999_pos, "")
-    rx999_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1002_pos, 1
+    gt $I11, rx1002_eos, rx1002_fail
+    sub $I11, rx1002_pos, rx1002_off
+    substr $S10, rx1002_tgt, $I11, 1
+    ne $S10, "?", rx1002_fail
+    add rx1002_pos, 1
+    set_addr $I10, rxcap_1007_fail
+    ($I12, $I11) = rx1002_cur."!mark_peek"($I10)
+    rx1002_cur."!cursor_pos"($I11)
+    ($P10) = rx1002_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1002_pos, "")
+    rx1002_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1004_done
-  rxcap_1004_fail:
-    goto rx999_fail
-  rxcap_1004_done:
+    goto rxcap_1007_done
+  rxcap_1007_fail:
+    goto rx1002_fail
+  rxcap_1007_done:
   # rx subrule "O" subtype=capture negate=
-    rx999_cur."!cursor_pos"(rx999_pos)
-    $P10 = rx999_cur."O"("%symbolic_unary, :pirop<istrue>")
-    unless $P10, rx999_fail
-    rx999_cur."!mark_push"(0, -1, 0, $P10)
+    rx1002_cur."!cursor_pos"(rx1002_pos)
+    $P10 = rx1002_cur."O"("%symbolic_unary, :pirop<istrue>")
+    unless $P10, rx1002_fail
+    rx1002_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx999_pos = $P10."pos"()
+    rx1002_pos = $P10."pos"()
   # rx pass
-    rx999_cur."!cursor_pass"(rx999_pos, "prefix:sym<?>")
-    rx999_cur."!cursor_debug"("PASS  ", "prefix:sym<?>", " at pos=", rx999_pos)
-    .return (rx999_cur)
-  rx999_fail:
-.annotate "line", 417
-    (rx999_rep, rx999_pos, $I10, $P10) = rx999_cur."!mark_fail"(0)
-    lt rx999_pos, -1, rx999_done
-    eq rx999_pos, -1, rx999_fail
+    rx1002_cur."!cursor_pass"(rx1002_pos, "prefix:sym<?>")
+    rx1002_cur."!cursor_debug"("PASS  ", "prefix:sym<?>", " at pos=", rx1002_pos)
+    .return (rx1002_cur)
+  rx1002_fail:
+.annotate "line", 421
+    (rx1002_rep, rx1002_pos, $I10, $P10) = rx1002_cur."!mark_fail"(0)
+    lt rx1002_pos, -1, rx1002_done
+    eq rx1002_pos, -1, rx1002_fail
     jump $I10
-  rx999_done:
-    rx999_cur."!cursor_fail"()
-    rx999_cur."!cursor_debug"("FAIL  ", "prefix:sym<?>")
-    .return (rx999_cur)
+  rx1002_done:
+    rx1002_cur."!cursor_fail"()
+    rx1002_cur."!cursor_debug"("FAIL  ", "prefix:sym<?>")
+    .return (rx1002_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<?>"  :subid("252_1267204702.05125") :method
-.annotate "line", 417
-    $P1001 = self."!PREFIX__!subrule"("O", "?")
-    new $P1002, "ResizablePMCArray"
-    push $P1002, $P1001
-    .return ($P1002)
+.sub "!PREFIX__prefix:sym<?>"  :subid("252_1271336396.90314") :method
+.annotate "line", 421
+    $P1004 = self."!PREFIX__!subrule"("O", "?")
+    new $P1005, "ResizablePMCArray"
+    push $P1005, $P1004
+    .return ($P1005)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<!>"  :subid("253_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1006_tgt
-    .local int rx1006_pos
-    .local int rx1006_off
-    .local int rx1006_eos
-    .local int rx1006_rep
-    .local pmc rx1006_cur
-    (rx1006_cur, rx1006_pos, rx1006_tgt) = self."!cursor_start"()
-    rx1006_cur."!cursor_debug"("START ", "prefix:sym<!>")
-    .lex unicode:"$\x{a2}", rx1006_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1006_eos, rx1006_tgt
-    set rx1006_off, 0
-    lt rx1006_pos, 2, rx1006_start
-    sub rx1006_off, rx1006_pos, 1
-    substr rx1006_tgt, rx1006_tgt, rx1006_off
-  rx1006_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1010_done
-    goto rxscan1010_scan
-  rxscan1010_loop:
-    ($P10) = rx1006_cur."from"()
-    inc $P10
-    set rx1006_pos, $P10
-    ge rx1006_pos, rx1006_eos, rxscan1010_done
-  rxscan1010_scan:
-    set_addr $I10, rxscan1010_loop
-    rx1006_cur."!mark_push"(0, rx1006_pos, $I10)
-  rxscan1010_done:
-.annotate "line", 474
+.sub "prefix:sym<!>"  :subid("253_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1009_tgt
+    .local int rx1009_pos
+    .local int rx1009_off
+    .local int rx1009_eos
+    .local int rx1009_rep
+    .local pmc rx1009_cur
+    (rx1009_cur, rx1009_pos, rx1009_tgt) = self."!cursor_start"()
+    rx1009_cur."!cursor_debug"("START ", "prefix:sym<!>")
+    .lex unicode:"$\x{a2}", rx1009_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1009_eos, rx1009_tgt
+    set rx1009_off, 0
+    lt rx1009_pos, 2, rx1009_start
+    sub rx1009_off, rx1009_pos, 1
+    substr rx1009_tgt, rx1009_tgt, rx1009_off
+  rx1009_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1013_done
+    goto rxscan1013_scan
+  rxscan1013_loop:
+    ($P10) = rx1009_cur."from"()
+    inc $P10
+    set rx1009_pos, $P10
+    ge rx1009_pos, rx1009_eos, rxscan1013_done
+  rxscan1013_scan:
+    set_addr $I10, rxscan1013_loop
+    rx1009_cur."!mark_push"(0, rx1009_pos, $I10)
+  rxscan1013_done:
+.annotate "line", 478
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1011_fail
-    rx1006_cur."!mark_push"(0, rx1006_pos, $I10)
+    set_addr $I10, rxcap_1014_fail
+    rx1009_cur."!mark_push"(0, rx1009_pos, $I10)
   # rx literal  "!"
-    add $I11, rx1006_pos, 1
-    gt $I11, rx1006_eos, rx1006_fail
-    sub $I11, rx1006_pos, rx1006_off
-    substr $S10, rx1006_tgt, $I11, 1
-    ne $S10, "!", rx1006_fail
-    add rx1006_pos, 1
-    set_addr $I10, rxcap_1011_fail
-    ($I12, $I11) = rx1006_cur."!mark_peek"($I10)
-    rx1006_cur."!cursor_pos"($I11)
-    ($P10) = rx1006_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1006_pos, "")
-    rx1006_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1009_pos, 1
+    gt $I11, rx1009_eos, rx1009_fail
+    sub $I11, rx1009_pos, rx1009_off
+    substr $S10, rx1009_tgt, $I11, 1
+    ne $S10, "!", rx1009_fail
+    add rx1009_pos, 1
+    set_addr $I10, rxcap_1014_fail
+    ($I12, $I11) = rx1009_cur."!mark_peek"($I10)
+    rx1009_cur."!cursor_pos"($I11)
+    ($P10) = rx1009_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1009_pos, "")
+    rx1009_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1011_done
-  rxcap_1011_fail:
-    goto rx1006_fail
-  rxcap_1011_done:
+    goto rxcap_1014_done
+  rxcap_1014_fail:
+    goto rx1009_fail
+  rxcap_1014_done:
   # rx subrule "O" subtype=capture negate=
-    rx1006_cur."!cursor_pos"(rx1006_pos)
-    $P10 = rx1006_cur."O"("%symbolic_unary, :pirop<isfalse>")
-    unless $P10, rx1006_fail
-    rx1006_cur."!mark_push"(0, -1, 0, $P10)
+    rx1009_cur."!cursor_pos"(rx1009_pos)
+    $P10 = rx1009_cur."O"("%symbolic_unary, :pirop<isfalse>")
+    unless $P10, rx1009_fail
+    rx1009_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1006_pos = $P10."pos"()
+    rx1009_pos = $P10."pos"()
   # rx pass
-    rx1006_cur."!cursor_pass"(rx1006_pos, "prefix:sym<!>")
-    rx1006_cur."!cursor_debug"("PASS  ", "prefix:sym<!>", " at pos=", rx1006_pos)
-    .return (rx1006_cur)
-  rx1006_fail:
-.annotate "line", 417
-    (rx1006_rep, rx1006_pos, $I10, $P10) = rx1006_cur."!mark_fail"(0)
-    lt rx1006_pos, -1, rx1006_done
-    eq rx1006_pos, -1, rx1006_fail
+    rx1009_cur."!cursor_pass"(rx1009_pos, "prefix:sym<!>")
+    rx1009_cur."!cursor_debug"("PASS  ", "prefix:sym<!>", " at pos=", rx1009_pos)
+    .return (rx1009_cur)
+  rx1009_fail:
+.annotate "line", 421
+    (rx1009_rep, rx1009_pos, $I10, $P10) = rx1009_cur."!mark_fail"(0)
+    lt rx1009_pos, -1, rx1009_done
+    eq rx1009_pos, -1, rx1009_fail
     jump $I10
-  rx1006_done:
-    rx1006_cur."!cursor_fail"()
-    rx1006_cur."!cursor_debug"("FAIL  ", "prefix:sym<!>")
-    .return (rx1006_cur)
+  rx1009_done:
+    rx1009_cur."!cursor_fail"()
+    rx1009_cur."!cursor_debug"("FAIL  ", "prefix:sym<!>")
+    .return (rx1009_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<!>"  :subid("254_1267204702.05125") :method
-.annotate "line", 417
-    $P1008 = self."!PREFIX__!subrule"("O", "!")
-    new $P1009, "ResizablePMCArray"
-    push $P1009, $P1008
-    .return ($P1009)
+.sub "!PREFIX__prefix:sym<!>"  :subid("254_1271336396.90314") :method
+.annotate "line", 421
+    $P1011 = self."!PREFIX__!subrule"("O", "!")
+    new $P1012, "ResizablePMCArray"
+    push $P1012, $P1011
+    .return ($P1012)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<|>"  :subid("255_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1013_tgt
-    .local int rx1013_pos
-    .local int rx1013_off
-    .local int rx1013_eos
-    .local int rx1013_rep
-    .local pmc rx1013_cur
-    (rx1013_cur, rx1013_pos, rx1013_tgt) = self."!cursor_start"()
-    rx1013_cur."!cursor_debug"("START ", "prefix:sym<|>")
-    .lex unicode:"$\x{a2}", rx1013_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1013_eos, rx1013_tgt
-    set rx1013_off, 0
-    lt rx1013_pos, 2, rx1013_start
-    sub rx1013_off, rx1013_pos, 1
-    substr rx1013_tgt, rx1013_tgt, rx1013_off
-  rx1013_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1017_done
-    goto rxscan1017_scan
-  rxscan1017_loop:
-    ($P10) = rx1013_cur."from"()
-    inc $P10
-    set rx1013_pos, $P10
-    ge rx1013_pos, rx1013_eos, rxscan1017_done
-  rxscan1017_scan:
-    set_addr $I10, rxscan1017_loop
-    rx1013_cur."!mark_push"(0, rx1013_pos, $I10)
-  rxscan1017_done:
-.annotate "line", 475
+.sub "prefix:sym<|>"  :subid("255_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1016_tgt
+    .local int rx1016_pos
+    .local int rx1016_off
+    .local int rx1016_eos
+    .local int rx1016_rep
+    .local pmc rx1016_cur
+    (rx1016_cur, rx1016_pos, rx1016_tgt) = self."!cursor_start"()
+    rx1016_cur."!cursor_debug"("START ", "prefix:sym<|>")
+    .lex unicode:"$\x{a2}", rx1016_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1016_eos, rx1016_tgt
+    set rx1016_off, 0
+    lt rx1016_pos, 2, rx1016_start
+    sub rx1016_off, rx1016_pos, 1
+    substr rx1016_tgt, rx1016_tgt, rx1016_off
+  rx1016_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1020_done
+    goto rxscan1020_scan
+  rxscan1020_loop:
+    ($P10) = rx1016_cur."from"()
+    inc $P10
+    set rx1016_pos, $P10
+    ge rx1016_pos, rx1016_eos, rxscan1020_done
+  rxscan1020_scan:
+    set_addr $I10, rxscan1020_loop
+    rx1016_cur."!mark_push"(0, rx1016_pos, $I10)
+  rxscan1020_done:
+.annotate "line", 479
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1018_fail
-    rx1013_cur."!mark_push"(0, rx1013_pos, $I10)
+    set_addr $I10, rxcap_1021_fail
+    rx1016_cur."!mark_push"(0, rx1016_pos, $I10)
   # rx literal  "|"
-    add $I11, rx1013_pos, 1
-    gt $I11, rx1013_eos, rx1013_fail
-    sub $I11, rx1013_pos, rx1013_off
-    substr $S10, rx1013_tgt, $I11, 1
-    ne $S10, "|", rx1013_fail
-    add rx1013_pos, 1
-    set_addr $I10, rxcap_1018_fail
-    ($I12, $I11) = rx1013_cur."!mark_peek"($I10)
-    rx1013_cur."!cursor_pos"($I11)
-    ($P10) = rx1013_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1013_pos, "")
-    rx1013_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1016_pos, 1
+    gt $I11, rx1016_eos, rx1016_fail
+    sub $I11, rx1016_pos, rx1016_off
+    substr $S10, rx1016_tgt, $I11, 1
+    ne $S10, "|", rx1016_fail
+    add rx1016_pos, 1
+    set_addr $I10, rxcap_1021_fail
+    ($I12, $I11) = rx1016_cur."!mark_peek"($I10)
+    rx1016_cur."!cursor_pos"($I11)
+    ($P10) = rx1016_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1016_pos, "")
+    rx1016_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1018_done
-  rxcap_1018_fail:
-    goto rx1013_fail
-  rxcap_1018_done:
+    goto rxcap_1021_done
+  rxcap_1021_fail:
+    goto rx1016_fail
+  rxcap_1021_done:
   # rx subrule "O" subtype=capture negate=
-    rx1013_cur."!cursor_pos"(rx1013_pos)
-    $P10 = rx1013_cur."O"("%symbolic_unary")
-    unless $P10, rx1013_fail
-    rx1013_cur."!mark_push"(0, -1, 0, $P10)
+    rx1016_cur."!cursor_pos"(rx1016_pos)
+    $P10 = rx1016_cur."O"("%symbolic_unary")
+    unless $P10, rx1016_fail
+    rx1016_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1013_pos = $P10."pos"()
+    rx1016_pos = $P10."pos"()
   # rx pass
-    rx1013_cur."!cursor_pass"(rx1013_pos, "prefix:sym<|>")
-    rx1013_cur."!cursor_debug"("PASS  ", "prefix:sym<|>", " at pos=", rx1013_pos)
-    .return (rx1013_cur)
-  rx1013_fail:
-.annotate "line", 417
-    (rx1013_rep, rx1013_pos, $I10, $P10) = rx1013_cur."!mark_fail"(0)
-    lt rx1013_pos, -1, rx1013_done
-    eq rx1013_pos, -1, rx1013_fail
+    rx1016_cur."!cursor_pass"(rx1016_pos, "prefix:sym<|>")
+    rx1016_cur."!cursor_debug"("PASS  ", "prefix:sym<|>", " at pos=", rx1016_pos)
+    .return (rx1016_cur)
+  rx1016_fail:
+.annotate "line", 421
+    (rx1016_rep, rx1016_pos, $I10, $P10) = rx1016_cur."!mark_fail"(0)
+    lt rx1016_pos, -1, rx1016_done
+    eq rx1016_pos, -1, rx1016_fail
     jump $I10
-  rx1013_done:
-    rx1013_cur."!cursor_fail"()
-    rx1013_cur."!cursor_debug"("FAIL  ", "prefix:sym<|>")
-    .return (rx1013_cur)
+  rx1016_done:
+    rx1016_cur."!cursor_fail"()
+    rx1016_cur."!cursor_debug"("FAIL  ", "prefix:sym<|>")
+    .return (rx1016_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<|>"  :subid("256_1267204702.05125") :method
-.annotate "line", 417
-    $P1015 = self."!PREFIX__!subrule"("O", "|")
-    new $P1016, "ResizablePMCArray"
-    push $P1016, $P1015
-    .return ($P1016)
+.sub "!PREFIX__prefix:sym<|>"  :subid("256_1271336396.90314") :method
+.annotate "line", 421
+    $P1018 = self."!PREFIX__!subrule"("O", "|")
+    new $P1019, "ResizablePMCArray"
+    push $P1019, $P1018
+    .return ($P1019)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<*>"  :subid("257_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1020_tgt
-    .local int rx1020_pos
-    .local int rx1020_off
-    .local int rx1020_eos
-    .local int rx1020_rep
-    .local pmc rx1020_cur
-    (rx1020_cur, rx1020_pos, rx1020_tgt) = self."!cursor_start"()
-    rx1020_cur."!cursor_debug"("START ", "infix:sym<*>")
-    .lex unicode:"$\x{a2}", rx1020_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1020_eos, rx1020_tgt
-    set rx1020_off, 0
-    lt rx1020_pos, 2, rx1020_start
-    sub rx1020_off, rx1020_pos, 1
-    substr rx1020_tgt, rx1020_tgt, rx1020_off
-  rx1020_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1024_done
-    goto rxscan1024_scan
-  rxscan1024_loop:
-    ($P10) = rx1020_cur."from"()
-    inc $P10
-    set rx1020_pos, $P10
-    ge rx1020_pos, rx1020_eos, rxscan1024_done
-  rxscan1024_scan:
-    set_addr $I10, rxscan1024_loop
-    rx1020_cur."!mark_push"(0, rx1020_pos, $I10)
-  rxscan1024_done:
-.annotate "line", 477
+.sub "infix:sym<*>"  :subid("257_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1023_tgt
+    .local int rx1023_pos
+    .local int rx1023_off
+    .local int rx1023_eos
+    .local int rx1023_rep
+    .local pmc rx1023_cur
+    (rx1023_cur, rx1023_pos, rx1023_tgt) = self."!cursor_start"()
+    rx1023_cur."!cursor_debug"("START ", "infix:sym<*>")
+    .lex unicode:"$\x{a2}", rx1023_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1023_eos, rx1023_tgt
+    set rx1023_off, 0
+    lt rx1023_pos, 2, rx1023_start
+    sub rx1023_off, rx1023_pos, 1
+    substr rx1023_tgt, rx1023_tgt, rx1023_off
+  rx1023_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1027_done
+    goto rxscan1027_scan
+  rxscan1027_loop:
+    ($P10) = rx1023_cur."from"()
+    inc $P10
+    set rx1023_pos, $P10
+    ge rx1023_pos, rx1023_eos, rxscan1027_done
+  rxscan1027_scan:
+    set_addr $I10, rxscan1027_loop
+    rx1023_cur."!mark_push"(0, rx1023_pos, $I10)
+  rxscan1027_done:
+.annotate "line", 481
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1025_fail
-    rx1020_cur."!mark_push"(0, rx1020_pos, $I10)
+    set_addr $I10, rxcap_1028_fail
+    rx1023_cur."!mark_push"(0, rx1023_pos, $I10)
   # rx literal  "*"
-    add $I11, rx1020_pos, 1
-    gt $I11, rx1020_eos, rx1020_fail
-    sub $I11, rx1020_pos, rx1020_off
-    substr $S10, rx1020_tgt, $I11, 1
-    ne $S10, "*", rx1020_fail
-    add rx1020_pos, 1
-    set_addr $I10, rxcap_1025_fail
-    ($I12, $I11) = rx1020_cur."!mark_peek"($I10)
-    rx1020_cur."!cursor_pos"($I11)
-    ($P10) = rx1020_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1020_pos, "")
-    rx1020_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1023_pos, 1
+    gt $I11, rx1023_eos, rx1023_fail
+    sub $I11, rx1023_pos, rx1023_off
+    substr $S10, rx1023_tgt, $I11, 1
+    ne $S10, "*", rx1023_fail
+    add rx1023_pos, 1
+    set_addr $I10, rxcap_1028_fail
+    ($I12, $I11) = rx1023_cur."!mark_peek"($I10)
+    rx1023_cur."!cursor_pos"($I11)
+    ($P10) = rx1023_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1023_pos, "")
+    rx1023_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1025_done
-  rxcap_1025_fail:
-    goto rx1020_fail
-  rxcap_1025_done:
+    goto rxcap_1028_done
+  rxcap_1028_fail:
+    goto rx1023_fail
+  rxcap_1028_done:
   # rx subrule "O" subtype=capture negate=
-    rx1020_cur."!cursor_pos"(rx1020_pos)
-    $P10 = rx1020_cur."O"("%multiplicative, :pirop<mul>")
-    unless $P10, rx1020_fail
-    rx1020_cur."!mark_push"(0, -1, 0, $P10)
+    rx1023_cur."!cursor_pos"(rx1023_pos)
+    $P10 = rx1023_cur."O"("%multiplicative, :pirop<mul>")
+    unless $P10, rx1023_fail
+    rx1023_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1020_pos = $P10."pos"()
+    rx1023_pos = $P10."pos"()
   # rx pass
-    rx1020_cur."!cursor_pass"(rx1020_pos, "infix:sym<*>")
-    rx1020_cur."!cursor_debug"("PASS  ", "infix:sym<*>", " at pos=", rx1020_pos)
-    .return (rx1020_cur)
-  rx1020_fail:
-.annotate "line", 417
-    (rx1020_rep, rx1020_pos, $I10, $P10) = rx1020_cur."!mark_fail"(0)
-    lt rx1020_pos, -1, rx1020_done
-    eq rx1020_pos, -1, rx1020_fail
+    rx1023_cur."!cursor_pass"(rx1023_pos, "infix:sym<*>")
+    rx1023_cur."!cursor_debug"("PASS  ", "infix:sym<*>", " at pos=", rx1023_pos)
+    .return (rx1023_cur)
+  rx1023_fail:
+.annotate "line", 421
+    (rx1023_rep, rx1023_pos, $I10, $P10) = rx1023_cur."!mark_fail"(0)
+    lt rx1023_pos, -1, rx1023_done
+    eq rx1023_pos, -1, rx1023_fail
     jump $I10
-  rx1020_done:
-    rx1020_cur."!cursor_fail"()
-    rx1020_cur."!cursor_debug"("FAIL  ", "infix:sym<*>")
-    .return (rx1020_cur)
+  rx1023_done:
+    rx1023_cur."!cursor_fail"()
+    rx1023_cur."!cursor_debug"("FAIL  ", "infix:sym<*>")
+    .return (rx1023_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<*>"  :subid("258_1267204702.05125") :method
-.annotate "line", 417
-    $P1022 = self."!PREFIX__!subrule"("O", "*")
-    new $P1023, "ResizablePMCArray"
-    push $P1023, $P1022
-    .return ($P1023)
+.sub "!PREFIX__infix:sym<*>"  :subid("258_1271336396.90314") :method
+.annotate "line", 421
+    $P1025 = self."!PREFIX__!subrule"("O", "*")
+    new $P1026, "ResizablePMCArray"
+    push $P1026, $P1025
+    .return ($P1026)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym</>"  :subid("259_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1027_tgt
-    .local int rx1027_pos
-    .local int rx1027_off
-    .local int rx1027_eos
-    .local int rx1027_rep
-    .local pmc rx1027_cur
-    (rx1027_cur, rx1027_pos, rx1027_tgt) = self."!cursor_start"()
-    rx1027_cur."!cursor_debug"("START ", "infix:sym</>")
-    .lex unicode:"$\x{a2}", rx1027_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1027_eos, rx1027_tgt
-    set rx1027_off, 0
-    lt rx1027_pos, 2, rx1027_start
-    sub rx1027_off, rx1027_pos, 1
-    substr rx1027_tgt, rx1027_tgt, rx1027_off
-  rx1027_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1031_done
-    goto rxscan1031_scan
-  rxscan1031_loop:
-    ($P10) = rx1027_cur."from"()
-    inc $P10
-    set rx1027_pos, $P10
-    ge rx1027_pos, rx1027_eos, rxscan1031_done
-  rxscan1031_scan:
-    set_addr $I10, rxscan1031_loop
-    rx1027_cur."!mark_push"(0, rx1027_pos, $I10)
-  rxscan1031_done:
-.annotate "line", 478
+.sub "infix:sym</>"  :subid("259_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1030_tgt
+    .local int rx1030_pos
+    .local int rx1030_off
+    .local int rx1030_eos
+    .local int rx1030_rep
+    .local pmc rx1030_cur
+    (rx1030_cur, rx1030_pos, rx1030_tgt) = self."!cursor_start"()
+    rx1030_cur."!cursor_debug"("START ", "infix:sym</>")
+    .lex unicode:"$\x{a2}", rx1030_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1030_eos, rx1030_tgt
+    set rx1030_off, 0
+    lt rx1030_pos, 2, rx1030_start
+    sub rx1030_off, rx1030_pos, 1
+    substr rx1030_tgt, rx1030_tgt, rx1030_off
+  rx1030_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1034_done
+    goto rxscan1034_scan
+  rxscan1034_loop:
+    ($P10) = rx1030_cur."from"()
+    inc $P10
+    set rx1030_pos, $P10
+    ge rx1030_pos, rx1030_eos, rxscan1034_done
+  rxscan1034_scan:
+    set_addr $I10, rxscan1034_loop
+    rx1030_cur."!mark_push"(0, rx1030_pos, $I10)
+  rxscan1034_done:
+.annotate "line", 482
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1032_fail
-    rx1027_cur."!mark_push"(0, rx1027_pos, $I10)
+    set_addr $I10, rxcap_1035_fail
+    rx1030_cur."!mark_push"(0, rx1030_pos, $I10)
   # rx literal  "/"
-    add $I11, rx1027_pos, 1
-    gt $I11, rx1027_eos, rx1027_fail
-    sub $I11, rx1027_pos, rx1027_off
-    substr $S10, rx1027_tgt, $I11, 1
-    ne $S10, "/", rx1027_fail
-    add rx1027_pos, 1
-    set_addr $I10, rxcap_1032_fail
-    ($I12, $I11) = rx1027_cur."!mark_peek"($I10)
-    rx1027_cur."!cursor_pos"($I11)
-    ($P10) = rx1027_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1027_pos, "")
-    rx1027_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1030_pos, 1
+    gt $I11, rx1030_eos, rx1030_fail
+    sub $I11, rx1030_pos, rx1030_off
+    substr $S10, rx1030_tgt, $I11, 1
+    ne $S10, "/", rx1030_fail
+    add rx1030_pos, 1
+    set_addr $I10, rxcap_1035_fail
+    ($I12, $I11) = rx1030_cur."!mark_peek"($I10)
+    rx1030_cur."!cursor_pos"($I11)
+    ($P10) = rx1030_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1030_pos, "")
+    rx1030_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1032_done
-  rxcap_1032_fail:
-    goto rx1027_fail
-  rxcap_1032_done:
+    goto rxcap_1035_done
+  rxcap_1035_fail:
+    goto rx1030_fail
+  rxcap_1035_done:
   # rx subrule "O" subtype=capture negate=
-    rx1027_cur."!cursor_pos"(rx1027_pos)
-    $P10 = rx1027_cur."O"("%multiplicative, :pirop<div>")
-    unless $P10, rx1027_fail
-    rx1027_cur."!mark_push"(0, -1, 0, $P10)
+    rx1030_cur."!cursor_pos"(rx1030_pos)
+    $P10 = rx1030_cur."O"("%multiplicative, :pirop<div>")
+    unless $P10, rx1030_fail
+    rx1030_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1027_pos = $P10."pos"()
+    rx1030_pos = $P10."pos"()
   # rx pass
-    rx1027_cur."!cursor_pass"(rx1027_pos, "infix:sym</>")
-    rx1027_cur."!cursor_debug"("PASS  ", "infix:sym</>", " at pos=", rx1027_pos)
-    .return (rx1027_cur)
-  rx1027_fail:
-.annotate "line", 417
-    (rx1027_rep, rx1027_pos, $I10, $P10) = rx1027_cur."!mark_fail"(0)
-    lt rx1027_pos, -1, rx1027_done
-    eq rx1027_pos, -1, rx1027_fail
+    rx1030_cur."!cursor_pass"(rx1030_pos, "infix:sym</>")
+    rx1030_cur."!cursor_debug"("PASS  ", "infix:sym</>", " at pos=", rx1030_pos)
+    .return (rx1030_cur)
+  rx1030_fail:
+.annotate "line", 421
+    (rx1030_rep, rx1030_pos, $I10, $P10) = rx1030_cur."!mark_fail"(0)
+    lt rx1030_pos, -1, rx1030_done
+    eq rx1030_pos, -1, rx1030_fail
     jump $I10
-  rx1027_done:
-    rx1027_cur."!cursor_fail"()
-    rx1027_cur."!cursor_debug"("FAIL  ", "infix:sym</>")
-    .return (rx1027_cur)
+  rx1030_done:
+    rx1030_cur."!cursor_fail"()
+    rx1030_cur."!cursor_debug"("FAIL  ", "infix:sym</>")
+    .return (rx1030_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym</>"  :subid("260_1267204702.05125") :method
-.annotate "line", 417
-    $P1029 = self."!PREFIX__!subrule"("O", "/")
-    new $P1030, "ResizablePMCArray"
-    push $P1030, $P1029
-    .return ($P1030)
+.sub "!PREFIX__infix:sym</>"  :subid("260_1271336396.90314") :method
+.annotate "line", 421
+    $P1032 = self."!PREFIX__!subrule"("O", "/")
+    new $P1033, "ResizablePMCArray"
+    push $P1033, $P1032
+    .return ($P1033)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<%>"  :subid("261_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1034_tgt
-    .local int rx1034_pos
-    .local int rx1034_off
-    .local int rx1034_eos
-    .local int rx1034_rep
-    .local pmc rx1034_cur
-    (rx1034_cur, rx1034_pos, rx1034_tgt) = self."!cursor_start"()
-    rx1034_cur."!cursor_debug"("START ", "infix:sym<%>")
-    .lex unicode:"$\x{a2}", rx1034_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1034_eos, rx1034_tgt
-    set rx1034_off, 0
-    lt rx1034_pos, 2, rx1034_start
-    sub rx1034_off, rx1034_pos, 1
-    substr rx1034_tgt, rx1034_tgt, rx1034_off
-  rx1034_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1038_done
-    goto rxscan1038_scan
-  rxscan1038_loop:
-    ($P10) = rx1034_cur."from"()
-    inc $P10
-    set rx1034_pos, $P10
-    ge rx1034_pos, rx1034_eos, rxscan1038_done
-  rxscan1038_scan:
-    set_addr $I10, rxscan1038_loop
-    rx1034_cur."!mark_push"(0, rx1034_pos, $I10)
-  rxscan1038_done:
-.annotate "line", 479
+.sub "infix:sym<%>"  :subid("261_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1037_tgt
+    .local int rx1037_pos
+    .local int rx1037_off
+    .local int rx1037_eos
+    .local int rx1037_rep
+    .local pmc rx1037_cur
+    (rx1037_cur, rx1037_pos, rx1037_tgt) = self."!cursor_start"()
+    rx1037_cur."!cursor_debug"("START ", "infix:sym<%>")
+    .lex unicode:"$\x{a2}", rx1037_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1037_eos, rx1037_tgt
+    set rx1037_off, 0
+    lt rx1037_pos, 2, rx1037_start
+    sub rx1037_off, rx1037_pos, 1
+    substr rx1037_tgt, rx1037_tgt, rx1037_off
+  rx1037_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1041_done
+    goto rxscan1041_scan
+  rxscan1041_loop:
+    ($P10) = rx1037_cur."from"()
+    inc $P10
+    set rx1037_pos, $P10
+    ge rx1037_pos, rx1037_eos, rxscan1041_done
+  rxscan1041_scan:
+    set_addr $I10, rxscan1041_loop
+    rx1037_cur."!mark_push"(0, rx1037_pos, $I10)
+  rxscan1041_done:
+.annotate "line", 483
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1039_fail
-    rx1034_cur."!mark_push"(0, rx1034_pos, $I10)
+    set_addr $I10, rxcap_1042_fail
+    rx1037_cur."!mark_push"(0, rx1037_pos, $I10)
   # rx literal  "%"
-    add $I11, rx1034_pos, 1
-    gt $I11, rx1034_eos, rx1034_fail
-    sub $I11, rx1034_pos, rx1034_off
-    substr $S10, rx1034_tgt, $I11, 1
-    ne $S10, "%", rx1034_fail
-    add rx1034_pos, 1
-    set_addr $I10, rxcap_1039_fail
-    ($I12, $I11) = rx1034_cur."!mark_peek"($I10)
-    rx1034_cur."!cursor_pos"($I11)
-    ($P10) = rx1034_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1034_pos, "")
-    rx1034_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1037_pos, 1
+    gt $I11, rx1037_eos, rx1037_fail
+    sub $I11, rx1037_pos, rx1037_off
+    substr $S10, rx1037_tgt, $I11, 1
+    ne $S10, "%", rx1037_fail
+    add rx1037_pos, 1
+    set_addr $I10, rxcap_1042_fail
+    ($I12, $I11) = rx1037_cur."!mark_peek"($I10)
+    rx1037_cur."!cursor_pos"($I11)
+    ($P10) = rx1037_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1037_pos, "")
+    rx1037_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1039_done
-  rxcap_1039_fail:
-    goto rx1034_fail
-  rxcap_1039_done:
+    goto rxcap_1042_done
+  rxcap_1042_fail:
+    goto rx1037_fail
+  rxcap_1042_done:
   # rx subrule "O" subtype=capture negate=
-    rx1034_cur."!cursor_pos"(rx1034_pos)
-    $P10 = rx1034_cur."O"("%multiplicative, :pirop<mod>")
-    unless $P10, rx1034_fail
-    rx1034_cur."!mark_push"(0, -1, 0, $P10)
+    rx1037_cur."!cursor_pos"(rx1037_pos)
+    $P10 = rx1037_cur."O"("%multiplicative, :pirop<mod>")
+    unless $P10, rx1037_fail
+    rx1037_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1034_pos = $P10."pos"()
+    rx1037_pos = $P10."pos"()
   # rx pass
-    rx1034_cur."!cursor_pass"(rx1034_pos, "infix:sym<%>")
-    rx1034_cur."!cursor_debug"("PASS  ", "infix:sym<%>", " at pos=", rx1034_pos)
-    .return (rx1034_cur)
-  rx1034_fail:
-.annotate "line", 417
-    (rx1034_rep, rx1034_pos, $I10, $P10) = rx1034_cur."!mark_fail"(0)
-    lt rx1034_pos, -1, rx1034_done
-    eq rx1034_pos, -1, rx1034_fail
+    rx1037_cur."!cursor_pass"(rx1037_pos, "infix:sym<%>")
+    rx1037_cur."!cursor_debug"("PASS  ", "infix:sym<%>", " at pos=", rx1037_pos)
+    .return (rx1037_cur)
+  rx1037_fail:
+.annotate "line", 421
+    (rx1037_rep, rx1037_pos, $I10, $P10) = rx1037_cur."!mark_fail"(0)
+    lt rx1037_pos, -1, rx1037_done
+    eq rx1037_pos, -1, rx1037_fail
     jump $I10
-  rx1034_done:
-    rx1034_cur."!cursor_fail"()
-    rx1034_cur."!cursor_debug"("FAIL  ", "infix:sym<%>")
-    .return (rx1034_cur)
+  rx1037_done:
+    rx1037_cur."!cursor_fail"()
+    rx1037_cur."!cursor_debug"("FAIL  ", "infix:sym<%>")
+    .return (rx1037_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<%>"  :subid("262_1267204702.05125") :method
-.annotate "line", 417
-    $P1036 = self."!PREFIX__!subrule"("O", "%")
-    new $P1037, "ResizablePMCArray"
-    push $P1037, $P1036
-    .return ($P1037)
+.sub "!PREFIX__infix:sym<%>"  :subid("262_1271336396.90314") :method
+.annotate "line", 421
+    $P1039 = self."!PREFIX__!subrule"("O", "%")
+    new $P1040, "ResizablePMCArray"
+    push $P1040, $P1039
+    .return ($P1040)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+>"  :subid("263_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1041_tgt
-    .local int rx1041_pos
-    .local int rx1041_off
-    .local int rx1041_eos
-    .local int rx1041_rep
-    .local pmc rx1041_cur
-    (rx1041_cur, rx1041_pos, rx1041_tgt) = self."!cursor_start"()
-    rx1041_cur."!cursor_debug"("START ", "infix:sym<+>")
-    .lex unicode:"$\x{a2}", rx1041_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1041_eos, rx1041_tgt
-    set rx1041_off, 0
-    lt rx1041_pos, 2, rx1041_start
-    sub rx1041_off, rx1041_pos, 1
-    substr rx1041_tgt, rx1041_tgt, rx1041_off
-  rx1041_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1045_done
-    goto rxscan1045_scan
-  rxscan1045_loop:
-    ($P10) = rx1041_cur."from"()
-    inc $P10
-    set rx1041_pos, $P10
-    ge rx1041_pos, rx1041_eos, rxscan1045_done
-  rxscan1045_scan:
-    set_addr $I10, rxscan1045_loop
-    rx1041_cur."!mark_push"(0, rx1041_pos, $I10)
-  rxscan1045_done:
-.annotate "line", 481
+.sub "infix:sym<+>"  :subid("263_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1044_tgt
+    .local int rx1044_pos
+    .local int rx1044_off
+    .local int rx1044_eos
+    .local int rx1044_rep
+    .local pmc rx1044_cur
+    (rx1044_cur, rx1044_pos, rx1044_tgt) = self."!cursor_start"()
+    rx1044_cur."!cursor_debug"("START ", "infix:sym<+>")
+    .lex unicode:"$\x{a2}", rx1044_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1044_eos, rx1044_tgt
+    set rx1044_off, 0
+    lt rx1044_pos, 2, rx1044_start
+    sub rx1044_off, rx1044_pos, 1
+    substr rx1044_tgt, rx1044_tgt, rx1044_off
+  rx1044_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1048_done
+    goto rxscan1048_scan
+  rxscan1048_loop:
+    ($P10) = rx1044_cur."from"()
+    inc $P10
+    set rx1044_pos, $P10
+    ge rx1044_pos, rx1044_eos, rxscan1048_done
+  rxscan1048_scan:
+    set_addr $I10, rxscan1048_loop
+    rx1044_cur."!mark_push"(0, rx1044_pos, $I10)
+  rxscan1048_done:
+.annotate "line", 485
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1046_fail
-    rx1041_cur."!mark_push"(0, rx1041_pos, $I10)
+    set_addr $I10, rxcap_1049_fail
+    rx1044_cur."!mark_push"(0, rx1044_pos, $I10)
   # rx literal  "+"
-    add $I11, rx1041_pos, 1
-    gt $I11, rx1041_eos, rx1041_fail
-    sub $I11, rx1041_pos, rx1041_off
-    substr $S10, rx1041_tgt, $I11, 1
-    ne $S10, "+", rx1041_fail
-    add rx1041_pos, 1
-    set_addr $I10, rxcap_1046_fail
-    ($I12, $I11) = rx1041_cur."!mark_peek"($I10)
-    rx1041_cur."!cursor_pos"($I11)
-    ($P10) = rx1041_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1041_pos, "")
-    rx1041_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1044_pos, 1
+    gt $I11, rx1044_eos, rx1044_fail
+    sub $I11, rx1044_pos, rx1044_off
+    substr $S10, rx1044_tgt, $I11, 1
+    ne $S10, "+", rx1044_fail
+    add rx1044_pos, 1
+    set_addr $I10, rxcap_1049_fail
+    ($I12, $I11) = rx1044_cur."!mark_peek"($I10)
+    rx1044_cur."!cursor_pos"($I11)
+    ($P10) = rx1044_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1044_pos, "")
+    rx1044_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1046_done
-  rxcap_1046_fail:
-    goto rx1041_fail
-  rxcap_1046_done:
+    goto rxcap_1049_done
+  rxcap_1049_fail:
+    goto rx1044_fail
+  rxcap_1049_done:
   # rx subrule "O" subtype=capture negate=
-    rx1041_cur."!cursor_pos"(rx1041_pos)
-    $P10 = rx1041_cur."O"("%additive, :pirop<add>")
-    unless $P10, rx1041_fail
-    rx1041_cur."!mark_push"(0, -1, 0, $P10)
+    rx1044_cur."!cursor_pos"(rx1044_pos)
+    $P10 = rx1044_cur."O"("%additive, :pirop<add>")
+    unless $P10, rx1044_fail
+    rx1044_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1041_pos = $P10."pos"()
+    rx1044_pos = $P10."pos"()
   # rx pass
-    rx1041_cur."!cursor_pass"(rx1041_pos, "infix:sym<+>")
-    rx1041_cur."!cursor_debug"("PASS  ", "infix:sym<+>", " at pos=", rx1041_pos)
-    .return (rx1041_cur)
-  rx1041_fail:
-.annotate "line", 417
-    (rx1041_rep, rx1041_pos, $I10, $P10) = rx1041_cur."!mark_fail"(0)
-    lt rx1041_pos, -1, rx1041_done
-    eq rx1041_pos, -1, rx1041_fail
+    rx1044_cur."!cursor_pass"(rx1044_pos, "infix:sym<+>")
+    rx1044_cur."!cursor_debug"("PASS  ", "infix:sym<+>", " at pos=", rx1044_pos)
+    .return (rx1044_cur)
+  rx1044_fail:
+.annotate "line", 421
+    (rx1044_rep, rx1044_pos, $I10, $P10) = rx1044_cur."!mark_fail"(0)
+    lt rx1044_pos, -1, rx1044_done
+    eq rx1044_pos, -1, rx1044_fail
     jump $I10
-  rx1041_done:
-    rx1041_cur."!cursor_fail"()
-    rx1041_cur."!cursor_debug"("FAIL  ", "infix:sym<+>")
-    .return (rx1041_cur)
+  rx1044_done:
+    rx1044_cur."!cursor_fail"()
+    rx1044_cur."!cursor_debug"("FAIL  ", "infix:sym<+>")
+    .return (rx1044_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+>"  :subid("264_1267204702.05125") :method
-.annotate "line", 417
-    $P1043 = self."!PREFIX__!subrule"("O", "+")
-    new $P1044, "ResizablePMCArray"
-    push $P1044, $P1043
-    .return ($P1044)
+.sub "!PREFIX__infix:sym<+>"  :subid("264_1271336396.90314") :method
+.annotate "line", 421
+    $P1046 = self."!PREFIX__!subrule"("O", "+")
+    new $P1047, "ResizablePMCArray"
+    push $P1047, $P1046
+    .return ($P1047)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<->"  :subid("265_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1048_tgt
-    .local int rx1048_pos
-    .local int rx1048_off
-    .local int rx1048_eos
-    .local int rx1048_rep
-    .local pmc rx1048_cur
-    (rx1048_cur, rx1048_pos, rx1048_tgt) = self."!cursor_start"()
-    rx1048_cur."!cursor_debug"("START ", "infix:sym<->")
-    .lex unicode:"$\x{a2}", rx1048_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1048_eos, rx1048_tgt
-    set rx1048_off, 0
-    lt rx1048_pos, 2, rx1048_start
-    sub rx1048_off, rx1048_pos, 1
-    substr rx1048_tgt, rx1048_tgt, rx1048_off
-  rx1048_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1052_done
-    goto rxscan1052_scan
-  rxscan1052_loop:
-    ($P10) = rx1048_cur."from"()
-    inc $P10
-    set rx1048_pos, $P10
-    ge rx1048_pos, rx1048_eos, rxscan1052_done
-  rxscan1052_scan:
-    set_addr $I10, rxscan1052_loop
-    rx1048_cur."!mark_push"(0, rx1048_pos, $I10)
-  rxscan1052_done:
-.annotate "line", 482
+.sub "infix:sym<->"  :subid("265_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1051_tgt
+    .local int rx1051_pos
+    .local int rx1051_off
+    .local int rx1051_eos
+    .local int rx1051_rep
+    .local pmc rx1051_cur
+    (rx1051_cur, rx1051_pos, rx1051_tgt) = self."!cursor_start"()
+    rx1051_cur."!cursor_debug"("START ", "infix:sym<->")
+    .lex unicode:"$\x{a2}", rx1051_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1051_eos, rx1051_tgt
+    set rx1051_off, 0
+    lt rx1051_pos, 2, rx1051_start
+    sub rx1051_off, rx1051_pos, 1
+    substr rx1051_tgt, rx1051_tgt, rx1051_off
+  rx1051_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1055_done
+    goto rxscan1055_scan
+  rxscan1055_loop:
+    ($P10) = rx1051_cur."from"()
+    inc $P10
+    set rx1051_pos, $P10
+    ge rx1051_pos, rx1051_eos, rxscan1055_done
+  rxscan1055_scan:
+    set_addr $I10, rxscan1055_loop
+    rx1051_cur."!mark_push"(0, rx1051_pos, $I10)
+  rxscan1055_done:
+.annotate "line", 486
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1053_fail
-    rx1048_cur."!mark_push"(0, rx1048_pos, $I10)
+    set_addr $I10, rxcap_1056_fail
+    rx1051_cur."!mark_push"(0, rx1051_pos, $I10)
   # rx literal  "-"
-    add $I11, rx1048_pos, 1
-    gt $I11, rx1048_eos, rx1048_fail
-    sub $I11, rx1048_pos, rx1048_off
-    substr $S10, rx1048_tgt, $I11, 1
-    ne $S10, "-", rx1048_fail
-    add rx1048_pos, 1
-    set_addr $I10, rxcap_1053_fail
-    ($I12, $I11) = rx1048_cur."!mark_peek"($I10)
-    rx1048_cur."!cursor_pos"($I11)
-    ($P10) = rx1048_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1048_pos, "")
-    rx1048_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1051_pos, 1
+    gt $I11, rx1051_eos, rx1051_fail
+    sub $I11, rx1051_pos, rx1051_off
+    substr $S10, rx1051_tgt, $I11, 1
+    ne $S10, "-", rx1051_fail
+    add rx1051_pos, 1
+    set_addr $I10, rxcap_1056_fail
+    ($I12, $I11) = rx1051_cur."!mark_peek"($I10)
+    rx1051_cur."!cursor_pos"($I11)
+    ($P10) = rx1051_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1051_pos, "")
+    rx1051_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1053_done
-  rxcap_1053_fail:
-    goto rx1048_fail
-  rxcap_1053_done:
+    goto rxcap_1056_done
+  rxcap_1056_fail:
+    goto rx1051_fail
+  rxcap_1056_done:
   # rx subrule "O" subtype=capture negate=
-    rx1048_cur."!cursor_pos"(rx1048_pos)
-    $P10 = rx1048_cur."O"("%additive, :pirop<sub>")
-    unless $P10, rx1048_fail
-    rx1048_cur."!mark_push"(0, -1, 0, $P10)
+    rx1051_cur."!cursor_pos"(rx1051_pos)
+    $P10 = rx1051_cur."O"("%additive, :pirop<sub>")
+    unless $P10, rx1051_fail
+    rx1051_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1048_pos = $P10."pos"()
+    rx1051_pos = $P10."pos"()
   # rx pass
-    rx1048_cur."!cursor_pass"(rx1048_pos, "infix:sym<->")
-    rx1048_cur."!cursor_debug"("PASS  ", "infix:sym<->", " at pos=", rx1048_pos)
-    .return (rx1048_cur)
-  rx1048_fail:
-.annotate "line", 417
-    (rx1048_rep, rx1048_pos, $I10, $P10) = rx1048_cur."!mark_fail"(0)
-    lt rx1048_pos, -1, rx1048_done
-    eq rx1048_pos, -1, rx1048_fail
+    rx1051_cur."!cursor_pass"(rx1051_pos, "infix:sym<->")
+    rx1051_cur."!cursor_debug"("PASS  ", "infix:sym<->", " at pos=", rx1051_pos)
+    .return (rx1051_cur)
+  rx1051_fail:
+.annotate "line", 421
+    (rx1051_rep, rx1051_pos, $I10, $P10) = rx1051_cur."!mark_fail"(0)
+    lt rx1051_pos, -1, rx1051_done
+    eq rx1051_pos, -1, rx1051_fail
     jump $I10
-  rx1048_done:
-    rx1048_cur."!cursor_fail"()
-    rx1048_cur."!cursor_debug"("FAIL  ", "infix:sym<->")
-    .return (rx1048_cur)
+  rx1051_done:
+    rx1051_cur."!cursor_fail"()
+    rx1051_cur."!cursor_debug"("FAIL  ", "infix:sym<->")
+    .return (rx1051_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<->"  :subid("266_1267204702.05125") :method
-.annotate "line", 417
-    $P1050 = self."!PREFIX__!subrule"("O", "-")
-    new $P1051, "ResizablePMCArray"
-    push $P1051, $P1050
-    .return ($P1051)
+.sub "!PREFIX__infix:sym<->"  :subid("266_1271336396.90314") :method
+.annotate "line", 421
+    $P1053 = self."!PREFIX__!subrule"("O", "-")
+    new $P1054, "ResizablePMCArray"
+    push $P1054, $P1053
+    .return ($P1054)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~>"  :subid("267_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1055_tgt
-    .local int rx1055_pos
-    .local int rx1055_off
-    .local int rx1055_eos
-    .local int rx1055_rep
-    .local pmc rx1055_cur
-    (rx1055_cur, rx1055_pos, rx1055_tgt) = self."!cursor_start"()
-    rx1055_cur."!cursor_debug"("START ", "infix:sym<~>")
-    .lex unicode:"$\x{a2}", rx1055_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1055_eos, rx1055_tgt
-    set rx1055_off, 0
-    lt rx1055_pos, 2, rx1055_start
-    sub rx1055_off, rx1055_pos, 1
-    substr rx1055_tgt, rx1055_tgt, rx1055_off
-  rx1055_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1059_done
-    goto rxscan1059_scan
-  rxscan1059_loop:
-    ($P10) = rx1055_cur."from"()
-    inc $P10
-    set rx1055_pos, $P10
-    ge rx1055_pos, rx1055_eos, rxscan1059_done
-  rxscan1059_scan:
-    set_addr $I10, rxscan1059_loop
-    rx1055_cur."!mark_push"(0, rx1055_pos, $I10)
-  rxscan1059_done:
-.annotate "line", 484
+.sub "infix:sym<~>"  :subid("267_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1058_tgt
+    .local int rx1058_pos
+    .local int rx1058_off
+    .local int rx1058_eos
+    .local int rx1058_rep
+    .local pmc rx1058_cur
+    (rx1058_cur, rx1058_pos, rx1058_tgt) = self."!cursor_start"()
+    rx1058_cur."!cursor_debug"("START ", "infix:sym<~>")
+    .lex unicode:"$\x{a2}", rx1058_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1058_eos, rx1058_tgt
+    set rx1058_off, 0
+    lt rx1058_pos, 2, rx1058_start
+    sub rx1058_off, rx1058_pos, 1
+    substr rx1058_tgt, rx1058_tgt, rx1058_off
+  rx1058_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1062_done
+    goto rxscan1062_scan
+  rxscan1062_loop:
+    ($P10) = rx1058_cur."from"()
+    inc $P10
+    set rx1058_pos, $P10
+    ge rx1058_pos, rx1058_eos, rxscan1062_done
+  rxscan1062_scan:
+    set_addr $I10, rxscan1062_loop
+    rx1058_cur."!mark_push"(0, rx1058_pos, $I10)
+  rxscan1062_done:
+.annotate "line", 488
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1060_fail
-    rx1055_cur."!mark_push"(0, rx1055_pos, $I10)
+    set_addr $I10, rxcap_1063_fail
+    rx1058_cur."!mark_push"(0, rx1058_pos, $I10)
   # rx literal  "~"
-    add $I11, rx1055_pos, 1
-    gt $I11, rx1055_eos, rx1055_fail
-    sub $I11, rx1055_pos, rx1055_off
-    substr $S10, rx1055_tgt, $I11, 1
-    ne $S10, "~", rx1055_fail
-    add rx1055_pos, 1
-    set_addr $I10, rxcap_1060_fail
-    ($I12, $I11) = rx1055_cur."!mark_peek"($I10)
-    rx1055_cur."!cursor_pos"($I11)
-    ($P10) = rx1055_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1055_pos, "")
-    rx1055_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1058_pos, 1
+    gt $I11, rx1058_eos, rx1058_fail
+    sub $I11, rx1058_pos, rx1058_off
+    substr $S10, rx1058_tgt, $I11, 1
+    ne $S10, "~", rx1058_fail
+    add rx1058_pos, 1
+    set_addr $I10, rxcap_1063_fail
+    ($I12, $I11) = rx1058_cur."!mark_peek"($I10)
+    rx1058_cur."!cursor_pos"($I11)
+    ($P10) = rx1058_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1058_pos, "")
+    rx1058_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1060_done
-  rxcap_1060_fail:
-    goto rx1055_fail
-  rxcap_1060_done:
+    goto rxcap_1063_done
+  rxcap_1063_fail:
+    goto rx1058_fail
+  rxcap_1063_done:
   # rx subrule "O" subtype=capture negate=
-    rx1055_cur."!cursor_pos"(rx1055_pos)
-    $P10 = rx1055_cur."O"("%concatenation , :pirop<concat>")
-    unless $P10, rx1055_fail
-    rx1055_cur."!mark_push"(0, -1, 0, $P10)
+    rx1058_cur."!cursor_pos"(rx1058_pos)
+    $P10 = rx1058_cur."O"("%concatenation , :pirop<concat>")
+    unless $P10, rx1058_fail
+    rx1058_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1055_pos = $P10."pos"()
+    rx1058_pos = $P10."pos"()
   # rx pass
-    rx1055_cur."!cursor_pass"(rx1055_pos, "infix:sym<~>")
-    rx1055_cur."!cursor_debug"("PASS  ", "infix:sym<~>", " at pos=", rx1055_pos)
-    .return (rx1055_cur)
-  rx1055_fail:
-.annotate "line", 417
-    (rx1055_rep, rx1055_pos, $I10, $P10) = rx1055_cur."!mark_fail"(0)
-    lt rx1055_pos, -1, rx1055_done
-    eq rx1055_pos, -1, rx1055_fail
+    rx1058_cur."!cursor_pass"(rx1058_pos, "infix:sym<~>")
+    rx1058_cur."!cursor_debug"("PASS  ", "infix:sym<~>", " at pos=", rx1058_pos)
+    .return (rx1058_cur)
+  rx1058_fail:
+.annotate "line", 421
+    (rx1058_rep, rx1058_pos, $I10, $P10) = rx1058_cur."!mark_fail"(0)
+    lt rx1058_pos, -1, rx1058_done
+    eq rx1058_pos, -1, rx1058_fail
     jump $I10
-  rx1055_done:
-    rx1055_cur."!cursor_fail"()
-    rx1055_cur."!cursor_debug"("FAIL  ", "infix:sym<~>")
-    .return (rx1055_cur)
+  rx1058_done:
+    rx1058_cur."!cursor_fail"()
+    rx1058_cur."!cursor_debug"("FAIL  ", "infix:sym<~>")
+    .return (rx1058_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~>"  :subid("268_1267204702.05125") :method
-.annotate "line", 417
-    $P1057 = self."!PREFIX__!subrule"("O", "~")
-    new $P1058, "ResizablePMCArray"
-    push $P1058, $P1057
-    .return ($P1058)
+.sub "!PREFIX__infix:sym<~>"  :subid("268_1271336396.90314") :method
+.annotate "line", 421
+    $P1060 = self."!PREFIX__!subrule"("O", "~")
+    new $P1061, "ResizablePMCArray"
+    push $P1061, $P1060
+    .return ($P1061)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<==>"  :subid("269_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1062_tgt
-    .local int rx1062_pos
-    .local int rx1062_off
-    .local int rx1062_eos
-    .local int rx1062_rep
-    .local pmc rx1062_cur
-    (rx1062_cur, rx1062_pos, rx1062_tgt) = self."!cursor_start"()
-    rx1062_cur."!cursor_debug"("START ", "infix:sym<==>")
-    .lex unicode:"$\x{a2}", rx1062_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1062_eos, rx1062_tgt
-    set rx1062_off, 0
-    lt rx1062_pos, 2, rx1062_start
-    sub rx1062_off, rx1062_pos, 1
-    substr rx1062_tgt, rx1062_tgt, rx1062_off
-  rx1062_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1066_done
-    goto rxscan1066_scan
-  rxscan1066_loop:
-    ($P10) = rx1062_cur."from"()
-    inc $P10
-    set rx1062_pos, $P10
-    ge rx1062_pos, rx1062_eos, rxscan1066_done
-  rxscan1066_scan:
-    set_addr $I10, rxscan1066_loop
-    rx1062_cur."!mark_push"(0, rx1062_pos, $I10)
-  rxscan1066_done:
-.annotate "line", 486
+.sub "infix:sym<==>"  :subid("269_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1065_tgt
+    .local int rx1065_pos
+    .local int rx1065_off
+    .local int rx1065_eos
+    .local int rx1065_rep
+    .local pmc rx1065_cur
+    (rx1065_cur, rx1065_pos, rx1065_tgt) = self."!cursor_start"()
+    rx1065_cur."!cursor_debug"("START ", "infix:sym<==>")
+    .lex unicode:"$\x{a2}", rx1065_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1065_eos, rx1065_tgt
+    set rx1065_off, 0
+    lt rx1065_pos, 2, rx1065_start
+    sub rx1065_off, rx1065_pos, 1
+    substr rx1065_tgt, rx1065_tgt, rx1065_off
+  rx1065_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1069_done
+    goto rxscan1069_scan
+  rxscan1069_loop:
+    ($P10) = rx1065_cur."from"()
+    inc $P10
+    set rx1065_pos, $P10
+    ge rx1065_pos, rx1065_eos, rxscan1069_done
+  rxscan1069_scan:
+    set_addr $I10, rxscan1069_loop
+    rx1065_cur."!mark_push"(0, rx1065_pos, $I10)
+  rxscan1069_done:
+.annotate "line", 490
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1067_fail
-    rx1062_cur."!mark_push"(0, rx1062_pos, $I10)
+    set_addr $I10, rxcap_1070_fail
+    rx1065_cur."!mark_push"(0, rx1065_pos, $I10)
   # rx literal  "=="
-    add $I11, rx1062_pos, 2
-    gt $I11, rx1062_eos, rx1062_fail
-    sub $I11, rx1062_pos, rx1062_off
-    substr $S10, rx1062_tgt, $I11, 2
-    ne $S10, "==", rx1062_fail
-    add rx1062_pos, 2
-    set_addr $I10, rxcap_1067_fail
-    ($I12, $I11) = rx1062_cur."!mark_peek"($I10)
-    rx1062_cur."!cursor_pos"($I11)
-    ($P10) = rx1062_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1062_pos, "")
-    rx1062_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1065_pos, 2
+    gt $I11, rx1065_eos, rx1065_fail
+    sub $I11, rx1065_pos, rx1065_off
+    substr $S10, rx1065_tgt, $I11, 2
+    ne $S10, "==", rx1065_fail
+    add rx1065_pos, 2
+    set_addr $I10, rxcap_1070_fail
+    ($I12, $I11) = rx1065_cur."!mark_peek"($I10)
+    rx1065_cur."!cursor_pos"($I11)
+    ($P10) = rx1065_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1065_pos, "")
+    rx1065_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1067_done
-  rxcap_1067_fail:
-    goto rx1062_fail
-  rxcap_1067_done:
+    goto rxcap_1070_done
+  rxcap_1070_fail:
+    goto rx1065_fail
+  rxcap_1070_done:
   # rx subrule "O" subtype=capture negate=
-    rx1062_cur."!cursor_pos"(rx1062_pos)
-    $P10 = rx1062_cur."O"("%relational, :pirop<iseq INn>")
-    unless $P10, rx1062_fail
-    rx1062_cur."!mark_push"(0, -1, 0, $P10)
+    rx1065_cur."!cursor_pos"(rx1065_pos)
+    $P10 = rx1065_cur."O"("%relational, :pirop<iseq INn>")
+    unless $P10, rx1065_fail
+    rx1065_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1062_pos = $P10."pos"()
+    rx1065_pos = $P10."pos"()
   # rx pass
-    rx1062_cur."!cursor_pass"(rx1062_pos, "infix:sym<==>")
-    rx1062_cur."!cursor_debug"("PASS  ", "infix:sym<==>", " at pos=", rx1062_pos)
-    .return (rx1062_cur)
-  rx1062_fail:
-.annotate "line", 417
-    (rx1062_rep, rx1062_pos, $I10, $P10) = rx1062_cur."!mark_fail"(0)
-    lt rx1062_pos, -1, rx1062_done
-    eq rx1062_pos, -1, rx1062_fail
+    rx1065_cur."!cursor_pass"(rx1065_pos, "infix:sym<==>")
+    rx1065_cur."!cursor_debug"("PASS  ", "infix:sym<==>", " at pos=", rx1065_pos)
+    .return (rx1065_cur)
+  rx1065_fail:
+.annotate "line", 421
+    (rx1065_rep, rx1065_pos, $I10, $P10) = rx1065_cur."!mark_fail"(0)
+    lt rx1065_pos, -1, rx1065_done
+    eq rx1065_pos, -1, rx1065_fail
     jump $I10
-  rx1062_done:
-    rx1062_cur."!cursor_fail"()
-    rx1062_cur."!cursor_debug"("FAIL  ", "infix:sym<==>")
-    .return (rx1062_cur)
+  rx1065_done:
+    rx1065_cur."!cursor_fail"()
+    rx1065_cur."!cursor_debug"("FAIL  ", "infix:sym<==>")
+    .return (rx1065_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<==>"  :subid("270_1267204702.05125") :method
-.annotate "line", 417
-    $P1064 = self."!PREFIX__!subrule"("O", "==")
-    new $P1065, "ResizablePMCArray"
-    push $P1065, $P1064
-    .return ($P1065)
+.sub "!PREFIX__infix:sym<==>"  :subid("270_1271336396.90314") :method
+.annotate "line", 421
+    $P1067 = self."!PREFIX__!subrule"("O", "==")
+    new $P1068, "ResizablePMCArray"
+    push $P1068, $P1067
+    .return ($P1068)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<!=>"  :subid("271_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1069_tgt
-    .local int rx1069_pos
-    .local int rx1069_off
-    .local int rx1069_eos
-    .local int rx1069_rep
-    .local pmc rx1069_cur
-    (rx1069_cur, rx1069_pos, rx1069_tgt) = self."!cursor_start"()
-    rx1069_cur."!cursor_debug"("START ", "infix:sym<!=>")
-    .lex unicode:"$\x{a2}", rx1069_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1069_eos, rx1069_tgt
-    set rx1069_off, 0
-    lt rx1069_pos, 2, rx1069_start
-    sub rx1069_off, rx1069_pos, 1
-    substr rx1069_tgt, rx1069_tgt, rx1069_off
-  rx1069_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1073_done
-    goto rxscan1073_scan
-  rxscan1073_loop:
-    ($P10) = rx1069_cur."from"()
-    inc $P10
-    set rx1069_pos, $P10
-    ge rx1069_pos, rx1069_eos, rxscan1073_done
-  rxscan1073_scan:
-    set_addr $I10, rxscan1073_loop
-    rx1069_cur."!mark_push"(0, rx1069_pos, $I10)
-  rxscan1073_done:
-.annotate "line", 487
+.sub "infix:sym<!=>"  :subid("271_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1072_tgt
+    .local int rx1072_pos
+    .local int rx1072_off
+    .local int rx1072_eos
+    .local int rx1072_rep
+    .local pmc rx1072_cur
+    (rx1072_cur, rx1072_pos, rx1072_tgt) = self."!cursor_start"()
+    rx1072_cur."!cursor_debug"("START ", "infix:sym<!=>")
+    .lex unicode:"$\x{a2}", rx1072_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1072_eos, rx1072_tgt
+    set rx1072_off, 0
+    lt rx1072_pos, 2, rx1072_start
+    sub rx1072_off, rx1072_pos, 1
+    substr rx1072_tgt, rx1072_tgt, rx1072_off
+  rx1072_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1076_done
+    goto rxscan1076_scan
+  rxscan1076_loop:
+    ($P10) = rx1072_cur."from"()
+    inc $P10
+    set rx1072_pos, $P10
+    ge rx1072_pos, rx1072_eos, rxscan1076_done
+  rxscan1076_scan:
+    set_addr $I10, rxscan1076_loop
+    rx1072_cur."!mark_push"(0, rx1072_pos, $I10)
+  rxscan1076_done:
+.annotate "line", 491
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1074_fail
-    rx1069_cur."!mark_push"(0, rx1069_pos, $I10)
+    set_addr $I10, rxcap_1077_fail
+    rx1072_cur."!mark_push"(0, rx1072_pos, $I10)
   # rx literal  "!="
-    add $I11, rx1069_pos, 2
-    gt $I11, rx1069_eos, rx1069_fail
-    sub $I11, rx1069_pos, rx1069_off
-    substr $S10, rx1069_tgt, $I11, 2
-    ne $S10, "!=", rx1069_fail
-    add rx1069_pos, 2
-    set_addr $I10, rxcap_1074_fail
-    ($I12, $I11) = rx1069_cur."!mark_peek"($I10)
-    rx1069_cur."!cursor_pos"($I11)
-    ($P10) = rx1069_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1069_pos, "")
-    rx1069_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1072_pos, 2
+    gt $I11, rx1072_eos, rx1072_fail
+    sub $I11, rx1072_pos, rx1072_off
+    substr $S10, rx1072_tgt, $I11, 2
+    ne $S10, "!=", rx1072_fail
+    add rx1072_pos, 2
+    set_addr $I10, rxcap_1077_fail
+    ($I12, $I11) = rx1072_cur."!mark_peek"($I10)
+    rx1072_cur."!cursor_pos"($I11)
+    ($P10) = rx1072_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1072_pos, "")
+    rx1072_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1074_done
-  rxcap_1074_fail:
-    goto rx1069_fail
-  rxcap_1074_done:
+    goto rxcap_1077_done
+  rxcap_1077_fail:
+    goto rx1072_fail
+  rxcap_1077_done:
   # rx subrule "O" subtype=capture negate=
-    rx1069_cur."!cursor_pos"(rx1069_pos)
-    $P10 = rx1069_cur."O"("%relational, :pirop<isne INn>")
-    unless $P10, rx1069_fail
-    rx1069_cur."!mark_push"(0, -1, 0, $P10)
+    rx1072_cur."!cursor_pos"(rx1072_pos)
+    $P10 = rx1072_cur."O"("%relational, :pirop<isne INn>")
+    unless $P10, rx1072_fail
+    rx1072_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1069_pos = $P10."pos"()
+    rx1072_pos = $P10."pos"()
   # rx pass
-    rx1069_cur."!cursor_pass"(rx1069_pos, "infix:sym<!=>")
-    rx1069_cur."!cursor_debug"("PASS  ", "infix:sym<!=>", " at pos=", rx1069_pos)
-    .return (rx1069_cur)
-  rx1069_fail:
-.annotate "line", 417
-    (rx1069_rep, rx1069_pos, $I10, $P10) = rx1069_cur."!mark_fail"(0)
-    lt rx1069_pos, -1, rx1069_done
-    eq rx1069_pos, -1, rx1069_fail
+    rx1072_cur."!cursor_pass"(rx1072_pos, "infix:sym<!=>")
+    rx1072_cur."!cursor_debug"("PASS  ", "infix:sym<!=>", " at pos=", rx1072_pos)
+    .return (rx1072_cur)
+  rx1072_fail:
+.annotate "line", 421
+    (rx1072_rep, rx1072_pos, $I10, $P10) = rx1072_cur."!mark_fail"(0)
+    lt rx1072_pos, -1, rx1072_done
+    eq rx1072_pos, -1, rx1072_fail
     jump $I10
-  rx1069_done:
-    rx1069_cur."!cursor_fail"()
-    rx1069_cur."!cursor_debug"("FAIL  ", "infix:sym<!=>")
-    .return (rx1069_cur)
+  rx1072_done:
+    rx1072_cur."!cursor_fail"()
+    rx1072_cur."!cursor_debug"("FAIL  ", "infix:sym<!=>")
+    .return (rx1072_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<!=>"  :subid("272_1267204702.05125") :method
-.annotate "line", 417
-    $P1071 = self."!PREFIX__!subrule"("O", "!=")
-    new $P1072, "ResizablePMCArray"
-    push $P1072, $P1071
-    .return ($P1072)
+.sub "!PREFIX__infix:sym<!=>"  :subid("272_1271336396.90314") :method
+.annotate "line", 421
+    $P1074 = self."!PREFIX__!subrule"("O", "!=")
+    new $P1075, "ResizablePMCArray"
+    push $P1075, $P1074
+    .return ($P1075)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<=>"  :subid("273_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1076_tgt
-    .local int rx1076_pos
-    .local int rx1076_off
-    .local int rx1076_eos
-    .local int rx1076_rep
-    .local pmc rx1076_cur
-    (rx1076_cur, rx1076_pos, rx1076_tgt) = self."!cursor_start"()
-    rx1076_cur."!cursor_debug"("START ", "infix:sym<<=>")
-    .lex unicode:"$\x{a2}", rx1076_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1076_eos, rx1076_tgt
-    set rx1076_off, 0
-    lt rx1076_pos, 2, rx1076_start
-    sub rx1076_off, rx1076_pos, 1
-    substr rx1076_tgt, rx1076_tgt, rx1076_off
-  rx1076_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1080_done
-    goto rxscan1080_scan
-  rxscan1080_loop:
-    ($P10) = rx1076_cur."from"()
-    inc $P10
-    set rx1076_pos, $P10
-    ge rx1076_pos, rx1076_eos, rxscan1080_done
-  rxscan1080_scan:
-    set_addr $I10, rxscan1080_loop
-    rx1076_cur."!mark_push"(0, rx1076_pos, $I10)
-  rxscan1080_done:
-.annotate "line", 488
+.sub "infix:sym<<=>"  :subid("273_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1079_tgt
+    .local int rx1079_pos
+    .local int rx1079_off
+    .local int rx1079_eos
+    .local int rx1079_rep
+    .local pmc rx1079_cur
+    (rx1079_cur, rx1079_pos, rx1079_tgt) = self."!cursor_start"()
+    rx1079_cur."!cursor_debug"("START ", "infix:sym<<=>")
+    .lex unicode:"$\x{a2}", rx1079_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1079_eos, rx1079_tgt
+    set rx1079_off, 0
+    lt rx1079_pos, 2, rx1079_start
+    sub rx1079_off, rx1079_pos, 1
+    substr rx1079_tgt, rx1079_tgt, rx1079_off
+  rx1079_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1083_done
+    goto rxscan1083_scan
+  rxscan1083_loop:
+    ($P10) = rx1079_cur."from"()
+    inc $P10
+    set rx1079_pos, $P10
+    ge rx1079_pos, rx1079_eos, rxscan1083_done
+  rxscan1083_scan:
+    set_addr $I10, rxscan1083_loop
+    rx1079_cur."!mark_push"(0, rx1079_pos, $I10)
+  rxscan1083_done:
+.annotate "line", 492
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1081_fail
-    rx1076_cur."!mark_push"(0, rx1076_pos, $I10)
+    set_addr $I10, rxcap_1084_fail
+    rx1079_cur."!mark_push"(0, rx1079_pos, $I10)
   # rx literal  "<="
-    add $I11, rx1076_pos, 2
-    gt $I11, rx1076_eos, rx1076_fail
-    sub $I11, rx1076_pos, rx1076_off
-    substr $S10, rx1076_tgt, $I11, 2
-    ne $S10, "<=", rx1076_fail
-    add rx1076_pos, 2
-    set_addr $I10, rxcap_1081_fail
-    ($I12, $I11) = rx1076_cur."!mark_peek"($I10)
-    rx1076_cur."!cursor_pos"($I11)
-    ($P10) = rx1076_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1076_pos, "")
-    rx1076_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1079_pos, 2
+    gt $I11, rx1079_eos, rx1079_fail
+    sub $I11, rx1079_pos, rx1079_off
+    substr $S10, rx1079_tgt, $I11, 2
+    ne $S10, "<=", rx1079_fail
+    add rx1079_pos, 2
+    set_addr $I10, rxcap_1084_fail
+    ($I12, $I11) = rx1079_cur."!mark_peek"($I10)
+    rx1079_cur."!cursor_pos"($I11)
+    ($P10) = rx1079_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1079_pos, "")
+    rx1079_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1081_done
-  rxcap_1081_fail:
-    goto rx1076_fail
-  rxcap_1081_done:
+    goto rxcap_1084_done
+  rxcap_1084_fail:
+    goto rx1079_fail
+  rxcap_1084_done:
   # rx subrule "O" subtype=capture negate=
-    rx1076_cur."!cursor_pos"(rx1076_pos)
-    $P10 = rx1076_cur."O"("%relational, :pirop<isle INn>")
-    unless $P10, rx1076_fail
-    rx1076_cur."!mark_push"(0, -1, 0, $P10)
+    rx1079_cur."!cursor_pos"(rx1079_pos)
+    $P10 = rx1079_cur."O"("%relational, :pirop<isle INn>")
+    unless $P10, rx1079_fail
+    rx1079_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1076_pos = $P10."pos"()
+    rx1079_pos = $P10."pos"()
   # rx pass
-    rx1076_cur."!cursor_pass"(rx1076_pos, "infix:sym<<=>")
-    rx1076_cur."!cursor_debug"("PASS  ", "infix:sym<<=>", " at pos=", rx1076_pos)
-    .return (rx1076_cur)
-  rx1076_fail:
-.annotate "line", 417
-    (rx1076_rep, rx1076_pos, $I10, $P10) = rx1076_cur."!mark_fail"(0)
-    lt rx1076_pos, -1, rx1076_done
-    eq rx1076_pos, -1, rx1076_fail
+    rx1079_cur."!cursor_pass"(rx1079_pos, "infix:sym<<=>")
+    rx1079_cur."!cursor_debug"("PASS  ", "infix:sym<<=>", " at pos=", rx1079_pos)
+    .return (rx1079_cur)
+  rx1079_fail:
+.annotate "line", 421
+    (rx1079_rep, rx1079_pos, $I10, $P10) = rx1079_cur."!mark_fail"(0)
+    lt rx1079_pos, -1, rx1079_done
+    eq rx1079_pos, -1, rx1079_fail
     jump $I10
-  rx1076_done:
-    rx1076_cur."!cursor_fail"()
-    rx1076_cur."!cursor_debug"("FAIL  ", "infix:sym<<=>")
-    .return (rx1076_cur)
+  rx1079_done:
+    rx1079_cur."!cursor_fail"()
+    rx1079_cur."!cursor_debug"("FAIL  ", "infix:sym<<=>")
+    .return (rx1079_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<=>"  :subid("274_1267204702.05125") :method
-.annotate "line", 417
-    $P1078 = self."!PREFIX__!subrule"("O", "<=")
-    new $P1079, "ResizablePMCArray"
-    push $P1079, $P1078
-    .return ($P1079)
+.sub "!PREFIX__infix:sym<<=>"  :subid("274_1271336396.90314") :method
+.annotate "line", 421
+    $P1081 = self."!PREFIX__!subrule"("O", "<=")
+    new $P1082, "ResizablePMCArray"
+    push $P1082, $P1081
+    .return ($P1082)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>=>"  :subid("275_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1083_tgt
-    .local int rx1083_pos
-    .local int rx1083_off
-    .local int rx1083_eos
-    .local int rx1083_rep
-    .local pmc rx1083_cur
-    (rx1083_cur, rx1083_pos, rx1083_tgt) = self."!cursor_start"()
-    rx1083_cur."!cursor_debug"("START ", "infix:sym<>=>")
-    .lex unicode:"$\x{a2}", rx1083_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1083_eos, rx1083_tgt
-    set rx1083_off, 0
-    lt rx1083_pos, 2, rx1083_start
-    sub rx1083_off, rx1083_pos, 1
-    substr rx1083_tgt, rx1083_tgt, rx1083_off
-  rx1083_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1087_done
-    goto rxscan1087_scan
-  rxscan1087_loop:
-    ($P10) = rx1083_cur."from"()
-    inc $P10
-    set rx1083_pos, $P10
-    ge rx1083_pos, rx1083_eos, rxscan1087_done
-  rxscan1087_scan:
-    set_addr $I10, rxscan1087_loop
-    rx1083_cur."!mark_push"(0, rx1083_pos, $I10)
-  rxscan1087_done:
-.annotate "line", 489
+.sub "infix:sym<>=>"  :subid("275_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1086_tgt
+    .local int rx1086_pos
+    .local int rx1086_off
+    .local int rx1086_eos
+    .local int rx1086_rep
+    .local pmc rx1086_cur
+    (rx1086_cur, rx1086_pos, rx1086_tgt) = self."!cursor_start"()
+    rx1086_cur."!cursor_debug"("START ", "infix:sym<>=>")
+    .lex unicode:"$\x{a2}", rx1086_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1086_eos, rx1086_tgt
+    set rx1086_off, 0
+    lt rx1086_pos, 2, rx1086_start
+    sub rx1086_off, rx1086_pos, 1
+    substr rx1086_tgt, rx1086_tgt, rx1086_off
+  rx1086_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1090_done
+    goto rxscan1090_scan
+  rxscan1090_loop:
+    ($P10) = rx1086_cur."from"()
+    inc $P10
+    set rx1086_pos, $P10
+    ge rx1086_pos, rx1086_eos, rxscan1090_done
+  rxscan1090_scan:
+    set_addr $I10, rxscan1090_loop
+    rx1086_cur."!mark_push"(0, rx1086_pos, $I10)
+  rxscan1090_done:
+.annotate "line", 493
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1088_fail
-    rx1083_cur."!mark_push"(0, rx1083_pos, $I10)
+    set_addr $I10, rxcap_1091_fail
+    rx1086_cur."!mark_push"(0, rx1086_pos, $I10)
   # rx literal  ">="
-    add $I11, rx1083_pos, 2
-    gt $I11, rx1083_eos, rx1083_fail
-    sub $I11, rx1083_pos, rx1083_off
-    substr $S10, rx1083_tgt, $I11, 2
-    ne $S10, ">=", rx1083_fail
-    add rx1083_pos, 2
-    set_addr $I10, rxcap_1088_fail
-    ($I12, $I11) = rx1083_cur."!mark_peek"($I10)
-    rx1083_cur."!cursor_pos"($I11)
-    ($P10) = rx1083_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1083_pos, "")
-    rx1083_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1086_pos, 2
+    gt $I11, rx1086_eos, rx1086_fail
+    sub $I11, rx1086_pos, rx1086_off
+    substr $S10, rx1086_tgt, $I11, 2
+    ne $S10, ">=", rx1086_fail
+    add rx1086_pos, 2
+    set_addr $I10, rxcap_1091_fail
+    ($I12, $I11) = rx1086_cur."!mark_peek"($I10)
+    rx1086_cur."!cursor_pos"($I11)
+    ($P10) = rx1086_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1086_pos, "")
+    rx1086_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1088_done
-  rxcap_1088_fail:
-    goto rx1083_fail
-  rxcap_1088_done:
+    goto rxcap_1091_done
+  rxcap_1091_fail:
+    goto rx1086_fail
+  rxcap_1091_done:
   # rx subrule "O" subtype=capture negate=
-    rx1083_cur."!cursor_pos"(rx1083_pos)
-    $P10 = rx1083_cur."O"("%relational, :pirop<isge INn>")
-    unless $P10, rx1083_fail
-    rx1083_cur."!mark_push"(0, -1, 0, $P10)
+    rx1086_cur."!cursor_pos"(rx1086_pos)
+    $P10 = rx1086_cur."O"("%relational, :pirop<isge INn>")
+    unless $P10, rx1086_fail
+    rx1086_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1083_pos = $P10."pos"()
+    rx1086_pos = $P10."pos"()
   # rx pass
-    rx1083_cur."!cursor_pass"(rx1083_pos, "infix:sym<>=>")
-    rx1083_cur."!cursor_debug"("PASS  ", "infix:sym<>=>", " at pos=", rx1083_pos)
-    .return (rx1083_cur)
-  rx1083_fail:
-.annotate "line", 417
-    (rx1083_rep, rx1083_pos, $I10, $P10) = rx1083_cur."!mark_fail"(0)
-    lt rx1083_pos, -1, rx1083_done
-    eq rx1083_pos, -1, rx1083_fail
+    rx1086_cur."!cursor_pass"(rx1086_pos, "infix:sym<>=>")
+    rx1086_cur."!cursor_debug"("PASS  ", "infix:sym<>=>", " at pos=", rx1086_pos)
+    .return (rx1086_cur)
+  rx1086_fail:
+.annotate "line", 421
+    (rx1086_rep, rx1086_pos, $I10, $P10) = rx1086_cur."!mark_fail"(0)
+    lt rx1086_pos, -1, rx1086_done
+    eq rx1086_pos, -1, rx1086_fail
     jump $I10
-  rx1083_done:
-    rx1083_cur."!cursor_fail"()
-    rx1083_cur."!cursor_debug"("FAIL  ", "infix:sym<>=>")
-    .return (rx1083_cur)
+  rx1086_done:
+    rx1086_cur."!cursor_fail"()
+    rx1086_cur."!cursor_debug"("FAIL  ", "infix:sym<>=>")
+    .return (rx1086_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>=>"  :subid("276_1267204702.05125") :method
-.annotate "line", 417
-    $P1085 = self."!PREFIX__!subrule"("O", ">=")
-    new $P1086, "ResizablePMCArray"
-    push $P1086, $P1085
-    .return ($P1086)
+.sub "!PREFIX__infix:sym<>=>"  :subid("276_1271336396.90314") :method
+.annotate "line", 421
+    $P1088 = self."!PREFIX__!subrule"("O", ">=")
+    new $P1089, "ResizablePMCArray"
+    push $P1089, $P1088
+    .return ($P1089)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<>"  :subid("277_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1090_tgt
-    .local int rx1090_pos
-    .local int rx1090_off
-    .local int rx1090_eos
-    .local int rx1090_rep
-    .local pmc rx1090_cur
-    (rx1090_cur, rx1090_pos, rx1090_tgt) = self."!cursor_start"()
-    rx1090_cur."!cursor_debug"("START ", "infix:sym<<>")
-    .lex unicode:"$\x{a2}", rx1090_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1090_eos, rx1090_tgt
-    set rx1090_off, 0
-    lt rx1090_pos, 2, rx1090_start
-    sub rx1090_off, rx1090_pos, 1
-    substr rx1090_tgt, rx1090_tgt, rx1090_off
-  rx1090_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1094_done
-    goto rxscan1094_scan
-  rxscan1094_loop:
-    ($P10) = rx1090_cur."from"()
-    inc $P10
-    set rx1090_pos, $P10
-    ge rx1090_pos, rx1090_eos, rxscan1094_done
-  rxscan1094_scan:
-    set_addr $I10, rxscan1094_loop
-    rx1090_cur."!mark_push"(0, rx1090_pos, $I10)
-  rxscan1094_done:
-.annotate "line", 490
+.sub "infix:sym<<>"  :subid("277_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1093_tgt
+    .local int rx1093_pos
+    .local int rx1093_off
+    .local int rx1093_eos
+    .local int rx1093_rep
+    .local pmc rx1093_cur
+    (rx1093_cur, rx1093_pos, rx1093_tgt) = self."!cursor_start"()
+    rx1093_cur."!cursor_debug"("START ", "infix:sym<<>")
+    .lex unicode:"$\x{a2}", rx1093_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1093_eos, rx1093_tgt
+    set rx1093_off, 0
+    lt rx1093_pos, 2, rx1093_start
+    sub rx1093_off, rx1093_pos, 1
+    substr rx1093_tgt, rx1093_tgt, rx1093_off
+  rx1093_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1097_done
+    goto rxscan1097_scan
+  rxscan1097_loop:
+    ($P10) = rx1093_cur."from"()
+    inc $P10
+    set rx1093_pos, $P10
+    ge rx1093_pos, rx1093_eos, rxscan1097_done
+  rxscan1097_scan:
+    set_addr $I10, rxscan1097_loop
+    rx1093_cur."!mark_push"(0, rx1093_pos, $I10)
+  rxscan1097_done:
+.annotate "line", 494
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1095_fail
-    rx1090_cur."!mark_push"(0, rx1090_pos, $I10)
+    set_addr $I10, rxcap_1098_fail
+    rx1093_cur."!mark_push"(0, rx1093_pos, $I10)
   # rx literal  "<"
-    add $I11, rx1090_pos, 1
-    gt $I11, rx1090_eos, rx1090_fail
-    sub $I11, rx1090_pos, rx1090_off
-    substr $S10, rx1090_tgt, $I11, 1
-    ne $S10, "<", rx1090_fail
-    add rx1090_pos, 1
-    set_addr $I10, rxcap_1095_fail
-    ($I12, $I11) = rx1090_cur."!mark_peek"($I10)
-    rx1090_cur."!cursor_pos"($I11)
-    ($P10) = rx1090_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1090_pos, "")
-    rx1090_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1093_pos, 1
+    gt $I11, rx1093_eos, rx1093_fail
+    sub $I11, rx1093_pos, rx1093_off
+    substr $S10, rx1093_tgt, $I11, 1
+    ne $S10, "<", rx1093_fail
+    add rx1093_pos, 1
+    set_addr $I10, rxcap_1098_fail
+    ($I12, $I11) = rx1093_cur."!mark_peek"($I10)
+    rx1093_cur."!cursor_pos"($I11)
+    ($P10) = rx1093_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1093_pos, "")
+    rx1093_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1095_done
-  rxcap_1095_fail:
-    goto rx1090_fail
-  rxcap_1095_done:
+    goto rxcap_1098_done
+  rxcap_1098_fail:
+    goto rx1093_fail
+  rxcap_1098_done:
   # rx subrule "O" subtype=capture negate=
-    rx1090_cur."!cursor_pos"(rx1090_pos)
-    $P10 = rx1090_cur."O"("%relational, :pirop<islt INn>")
-    unless $P10, rx1090_fail
-    rx1090_cur."!mark_push"(0, -1, 0, $P10)
+    rx1093_cur."!cursor_pos"(rx1093_pos)
+    $P10 = rx1093_cur."O"("%relational, :pirop<islt INn>")
+    unless $P10, rx1093_fail
+    rx1093_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1090_pos = $P10."pos"()
+    rx1093_pos = $P10."pos"()
   # rx pass
-    rx1090_cur."!cursor_pass"(rx1090_pos, "infix:sym<<>")
-    rx1090_cur."!cursor_debug"("PASS  ", "infix:sym<<>", " at pos=", rx1090_pos)
-    .return (rx1090_cur)
-  rx1090_fail:
-.annotate "line", 417
-    (rx1090_rep, rx1090_pos, $I10, $P10) = rx1090_cur."!mark_fail"(0)
-    lt rx1090_pos, -1, rx1090_done
-    eq rx1090_pos, -1, rx1090_fail
+    rx1093_cur."!cursor_pass"(rx1093_pos, "infix:sym<<>")
+    rx1093_cur."!cursor_debug"("PASS  ", "infix:sym<<>", " at pos=", rx1093_pos)
+    .return (rx1093_cur)
+  rx1093_fail:
+.annotate "line", 421
+    (rx1093_rep, rx1093_pos, $I10, $P10) = rx1093_cur."!mark_fail"(0)
+    lt rx1093_pos, -1, rx1093_done
+    eq rx1093_pos, -1, rx1093_fail
     jump $I10
-  rx1090_done:
-    rx1090_cur."!cursor_fail"()
-    rx1090_cur."!cursor_debug"("FAIL  ", "infix:sym<<>")
-    .return (rx1090_cur)
+  rx1093_done:
+    rx1093_cur."!cursor_fail"()
+    rx1093_cur."!cursor_debug"("FAIL  ", "infix:sym<<>")
+    .return (rx1093_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<>"  :subid("278_1267204702.05125") :method
-.annotate "line", 417
-    $P1092 = self."!PREFIX__!subrule"("O", "<")
-    new $P1093, "ResizablePMCArray"
-    push $P1093, $P1092
-    .return ($P1093)
+.sub "!PREFIX__infix:sym<<>"  :subid("278_1271336396.90314") :method
+.annotate "line", 421
+    $P1095 = self."!PREFIX__!subrule"("O", "<")
+    new $P1096, "ResizablePMCArray"
+    push $P1096, $P1095
+    .return ($P1096)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>>"  :subid("279_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1097_tgt
-    .local int rx1097_pos
-    .local int rx1097_off
-    .local int rx1097_eos
-    .local int rx1097_rep
-    .local pmc rx1097_cur
-    (rx1097_cur, rx1097_pos, rx1097_tgt) = self."!cursor_start"()
-    rx1097_cur."!cursor_debug"("START ", "infix:sym<>>")
-    .lex unicode:"$\x{a2}", rx1097_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1097_eos, rx1097_tgt
-    set rx1097_off, 0
-    lt rx1097_pos, 2, rx1097_start
-    sub rx1097_off, rx1097_pos, 1
-    substr rx1097_tgt, rx1097_tgt, rx1097_off
-  rx1097_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1101_done
-    goto rxscan1101_scan
-  rxscan1101_loop:
-    ($P10) = rx1097_cur."from"()
-    inc $P10
-    set rx1097_pos, $P10
-    ge rx1097_pos, rx1097_eos, rxscan1101_done
-  rxscan1101_scan:
-    set_addr $I10, rxscan1101_loop
-    rx1097_cur."!mark_push"(0, rx1097_pos, $I10)
-  rxscan1101_done:
-.annotate "line", 491
+.sub "infix:sym<>>"  :subid("279_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1100_tgt
+    .local int rx1100_pos
+    .local int rx1100_off
+    .local int rx1100_eos
+    .local int rx1100_rep
+    .local pmc rx1100_cur
+    (rx1100_cur, rx1100_pos, rx1100_tgt) = self."!cursor_start"()
+    rx1100_cur."!cursor_debug"("START ", "infix:sym<>>")
+    .lex unicode:"$\x{a2}", rx1100_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1100_eos, rx1100_tgt
+    set rx1100_off, 0
+    lt rx1100_pos, 2, rx1100_start
+    sub rx1100_off, rx1100_pos, 1
+    substr rx1100_tgt, rx1100_tgt, rx1100_off
+  rx1100_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1104_done
+    goto rxscan1104_scan
+  rxscan1104_loop:
+    ($P10) = rx1100_cur."from"()
+    inc $P10
+    set rx1100_pos, $P10
+    ge rx1100_pos, rx1100_eos, rxscan1104_done
+  rxscan1104_scan:
+    set_addr $I10, rxscan1104_loop
+    rx1100_cur."!mark_push"(0, rx1100_pos, $I10)
+  rxscan1104_done:
+.annotate "line", 495
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1102_fail
-    rx1097_cur."!mark_push"(0, rx1097_pos, $I10)
+    set_addr $I10, rxcap_1105_fail
+    rx1100_cur."!mark_push"(0, rx1100_pos, $I10)
   # rx literal  ">"
-    add $I11, rx1097_pos, 1
-    gt $I11, rx1097_eos, rx1097_fail
-    sub $I11, rx1097_pos, rx1097_off
-    substr $S10, rx1097_tgt, $I11, 1
-    ne $S10, ">", rx1097_fail
-    add rx1097_pos, 1
-    set_addr $I10, rxcap_1102_fail
-    ($I12, $I11) = rx1097_cur."!mark_peek"($I10)
-    rx1097_cur."!cursor_pos"($I11)
-    ($P10) = rx1097_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1097_pos, "")
-    rx1097_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1100_pos, 1
+    gt $I11, rx1100_eos, rx1100_fail
+    sub $I11, rx1100_pos, rx1100_off
+    substr $S10, rx1100_tgt, $I11, 1
+    ne $S10, ">", rx1100_fail
+    add rx1100_pos, 1
+    set_addr $I10, rxcap_1105_fail
+    ($I12, $I11) = rx1100_cur."!mark_peek"($I10)
+    rx1100_cur."!cursor_pos"($I11)
+    ($P10) = rx1100_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1100_pos, "")
+    rx1100_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1102_done
-  rxcap_1102_fail:
-    goto rx1097_fail
-  rxcap_1102_done:
+    goto rxcap_1105_done
+  rxcap_1105_fail:
+    goto rx1100_fail
+  rxcap_1105_done:
   # rx subrule "O" subtype=capture negate=
-    rx1097_cur."!cursor_pos"(rx1097_pos)
-    $P10 = rx1097_cur."O"("%relational, :pirop<isgt INn>")
-    unless $P10, rx1097_fail
-    rx1097_cur."!mark_push"(0, -1, 0, $P10)
+    rx1100_cur."!cursor_pos"(rx1100_pos)
+    $P10 = rx1100_cur."O"("%relational, :pirop<isgt INn>")
+    unless $P10, rx1100_fail
+    rx1100_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1097_pos = $P10."pos"()
+    rx1100_pos = $P10."pos"()
   # rx pass
-    rx1097_cur."!cursor_pass"(rx1097_pos, "infix:sym<>>")
-    rx1097_cur."!cursor_debug"("PASS  ", "infix:sym<>>", " at pos=", rx1097_pos)
-    .return (rx1097_cur)
-  rx1097_fail:
-.annotate "line", 417
-    (rx1097_rep, rx1097_pos, $I10, $P10) = rx1097_cur."!mark_fail"(0)
-    lt rx1097_pos, -1, rx1097_done
-    eq rx1097_pos, -1, rx1097_fail
+    rx1100_cur."!cursor_pass"(rx1100_pos, "infix:sym<>>")
+    rx1100_cur."!cursor_debug"("PASS  ", "infix:sym<>>", " at pos=", rx1100_pos)
+    .return (rx1100_cur)
+  rx1100_fail:
+.annotate "line", 421
+    (rx1100_rep, rx1100_pos, $I10, $P10) = rx1100_cur."!mark_fail"(0)
+    lt rx1100_pos, -1, rx1100_done
+    eq rx1100_pos, -1, rx1100_fail
     jump $I10
-  rx1097_done:
-    rx1097_cur."!cursor_fail"()
-    rx1097_cur."!cursor_debug"("FAIL  ", "infix:sym<>>")
-    .return (rx1097_cur)
+  rx1100_done:
+    rx1100_cur."!cursor_fail"()
+    rx1100_cur."!cursor_debug"("FAIL  ", "infix:sym<>>")
+    .return (rx1100_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>>"  :subid("280_1267204702.05125") :method
-.annotate "line", 417
-    $P1099 = self."!PREFIX__!subrule"("O", ">")
-    new $P1100, "ResizablePMCArray"
-    push $P1100, $P1099
-    .return ($P1100)
+.sub "!PREFIX__infix:sym<>>"  :subid("280_1271336396.90314") :method
+.annotate "line", 421
+    $P1102 = self."!PREFIX__!subrule"("O", ">")
+    new $P1103, "ResizablePMCArray"
+    push $P1103, $P1102
+    .return ($P1103)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<eq>"  :subid("281_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1104_tgt
-    .local int rx1104_pos
-    .local int rx1104_off
-    .local int rx1104_eos
-    .local int rx1104_rep
-    .local pmc rx1104_cur
-    (rx1104_cur, rx1104_pos, rx1104_tgt) = self."!cursor_start"()
-    rx1104_cur."!cursor_debug"("START ", "infix:sym<eq>")
-    .lex unicode:"$\x{a2}", rx1104_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1104_eos, rx1104_tgt
-    set rx1104_off, 0
-    lt rx1104_pos, 2, rx1104_start
-    sub rx1104_off, rx1104_pos, 1
-    substr rx1104_tgt, rx1104_tgt, rx1104_off
-  rx1104_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1108_done
-    goto rxscan1108_scan
-  rxscan1108_loop:
-    ($P10) = rx1104_cur."from"()
-    inc $P10
-    set rx1104_pos, $P10
-    ge rx1104_pos, rx1104_eos, rxscan1108_done
-  rxscan1108_scan:
-    set_addr $I10, rxscan1108_loop
-    rx1104_cur."!mark_push"(0, rx1104_pos, $I10)
-  rxscan1108_done:
-.annotate "line", 492
+.sub "infix:sym<eq>"  :subid("281_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1107_tgt
+    .local int rx1107_pos
+    .local int rx1107_off
+    .local int rx1107_eos
+    .local int rx1107_rep
+    .local pmc rx1107_cur
+    (rx1107_cur, rx1107_pos, rx1107_tgt) = self."!cursor_start"()
+    rx1107_cur."!cursor_debug"("START ", "infix:sym<eq>")
+    .lex unicode:"$\x{a2}", rx1107_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1107_eos, rx1107_tgt
+    set rx1107_off, 0
+    lt rx1107_pos, 2, rx1107_start
+    sub rx1107_off, rx1107_pos, 1
+    substr rx1107_tgt, rx1107_tgt, rx1107_off
+  rx1107_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1111_done
+    goto rxscan1111_scan
+  rxscan1111_loop:
+    ($P10) = rx1107_cur."from"()
+    inc $P10
+    set rx1107_pos, $P10
+    ge rx1107_pos, rx1107_eos, rxscan1111_done
+  rxscan1111_scan:
+    set_addr $I10, rxscan1111_loop
+    rx1107_cur."!mark_push"(0, rx1107_pos, $I10)
+  rxscan1111_done:
+.annotate "line", 496
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1109_fail
-    rx1104_cur."!mark_push"(0, rx1104_pos, $I10)
+    set_addr $I10, rxcap_1112_fail
+    rx1107_cur."!mark_push"(0, rx1107_pos, $I10)
   # rx literal  "eq"
-    add $I11, rx1104_pos, 2
-    gt $I11, rx1104_eos, rx1104_fail
-    sub $I11, rx1104_pos, rx1104_off
-    substr $S10, rx1104_tgt, $I11, 2
-    ne $S10, "eq", rx1104_fail
-    add rx1104_pos, 2
-    set_addr $I10, rxcap_1109_fail
-    ($I12, $I11) = rx1104_cur."!mark_peek"($I10)
-    rx1104_cur."!cursor_pos"($I11)
-    ($P10) = rx1104_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1104_pos, "")
-    rx1104_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1107_pos, 2
+    gt $I11, rx1107_eos, rx1107_fail
+    sub $I11, rx1107_pos, rx1107_off
+    substr $S10, rx1107_tgt, $I11, 2
+    ne $S10, "eq", rx1107_fail
+    add rx1107_pos, 2
+    set_addr $I10, rxcap_1112_fail
+    ($I12, $I11) = rx1107_cur."!mark_peek"($I10)
+    rx1107_cur."!cursor_pos"($I11)
+    ($P10) = rx1107_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1107_pos, "")
+    rx1107_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1109_done
-  rxcap_1109_fail:
-    goto rx1104_fail
-  rxcap_1109_done:
+    goto rxcap_1112_done
+  rxcap_1112_fail:
+    goto rx1107_fail
+  rxcap_1112_done:
   # rx subrule "O" subtype=capture negate=
-    rx1104_cur."!cursor_pos"(rx1104_pos)
-    $P10 = rx1104_cur."O"("%relational, :pirop<iseq ISs>")
-    unless $P10, rx1104_fail
-    rx1104_cur."!mark_push"(0, -1, 0, $P10)
+    rx1107_cur."!cursor_pos"(rx1107_pos)
+    $P10 = rx1107_cur."O"("%relational, :pirop<iseq ISs>")
+    unless $P10, rx1107_fail
+    rx1107_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1104_pos = $P10."pos"()
+    rx1107_pos = $P10."pos"()
   # rx pass
-    rx1104_cur."!cursor_pass"(rx1104_pos, "infix:sym<eq>")
-    rx1104_cur."!cursor_debug"("PASS  ", "infix:sym<eq>", " at pos=", rx1104_pos)
-    .return (rx1104_cur)
-  rx1104_fail:
-.annotate "line", 417
-    (rx1104_rep, rx1104_pos, $I10, $P10) = rx1104_cur."!mark_fail"(0)
-    lt rx1104_pos, -1, rx1104_done
-    eq rx1104_pos, -1, rx1104_fail
+    rx1107_cur."!cursor_pass"(rx1107_pos, "infix:sym<eq>")
+    rx1107_cur."!cursor_debug"("PASS  ", "infix:sym<eq>", " at pos=", rx1107_pos)
+    .return (rx1107_cur)
+  rx1107_fail:
+.annotate "line", 421
+    (rx1107_rep, rx1107_pos, $I10, $P10) = rx1107_cur."!mark_fail"(0)
+    lt rx1107_pos, -1, rx1107_done
+    eq rx1107_pos, -1, rx1107_fail
     jump $I10
-  rx1104_done:
-    rx1104_cur."!cursor_fail"()
-    rx1104_cur."!cursor_debug"("FAIL  ", "infix:sym<eq>")
-    .return (rx1104_cur)
+  rx1107_done:
+    rx1107_cur."!cursor_fail"()
+    rx1107_cur."!cursor_debug"("FAIL  ", "infix:sym<eq>")
+    .return (rx1107_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<eq>"  :subid("282_1267204702.05125") :method
-.annotate "line", 417
-    $P1106 = self."!PREFIX__!subrule"("O", "eq")
-    new $P1107, "ResizablePMCArray"
-    push $P1107, $P1106
-    .return ($P1107)
+.sub "!PREFIX__infix:sym<eq>"  :subid("282_1271336396.90314") :method
+.annotate "line", 421
+    $P1109 = self."!PREFIX__!subrule"("O", "eq")
+    new $P1110, "ResizablePMCArray"
+    push $P1110, $P1109
+    .return ($P1110)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ne>"  :subid("283_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1111_tgt
-    .local int rx1111_pos
-    .local int rx1111_off
-    .local int rx1111_eos
-    .local int rx1111_rep
-    .local pmc rx1111_cur
-    (rx1111_cur, rx1111_pos, rx1111_tgt) = self."!cursor_start"()
-    rx1111_cur."!cursor_debug"("START ", "infix:sym<ne>")
-    .lex unicode:"$\x{a2}", rx1111_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1111_eos, rx1111_tgt
-    set rx1111_off, 0
-    lt rx1111_pos, 2, rx1111_start
-    sub rx1111_off, rx1111_pos, 1
-    substr rx1111_tgt, rx1111_tgt, rx1111_off
-  rx1111_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1115_done
-    goto rxscan1115_scan
-  rxscan1115_loop:
-    ($P10) = rx1111_cur."from"()
-    inc $P10
-    set rx1111_pos, $P10
-    ge rx1111_pos, rx1111_eos, rxscan1115_done
-  rxscan1115_scan:
-    set_addr $I10, rxscan1115_loop
-    rx1111_cur."!mark_push"(0, rx1111_pos, $I10)
-  rxscan1115_done:
-.annotate "line", 493
+.sub "infix:sym<ne>"  :subid("283_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1114_tgt
+    .local int rx1114_pos
+    .local int rx1114_off
+    .local int rx1114_eos
+    .local int rx1114_rep
+    .local pmc rx1114_cur
+    (rx1114_cur, rx1114_pos, rx1114_tgt) = self."!cursor_start"()
+    rx1114_cur."!cursor_debug"("START ", "infix:sym<ne>")
+    .lex unicode:"$\x{a2}", rx1114_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1114_eos, rx1114_tgt
+    set rx1114_off, 0
+    lt rx1114_pos, 2, rx1114_start
+    sub rx1114_off, rx1114_pos, 1
+    substr rx1114_tgt, rx1114_tgt, rx1114_off
+  rx1114_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1118_done
+    goto rxscan1118_scan
+  rxscan1118_loop:
+    ($P10) = rx1114_cur."from"()
+    inc $P10
+    set rx1114_pos, $P10
+    ge rx1114_pos, rx1114_eos, rxscan1118_done
+  rxscan1118_scan:
+    set_addr $I10, rxscan1118_loop
+    rx1114_cur."!mark_push"(0, rx1114_pos, $I10)
+  rxscan1118_done:
+.annotate "line", 497
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1116_fail
-    rx1111_cur."!mark_push"(0, rx1111_pos, $I10)
+    set_addr $I10, rxcap_1119_fail
+    rx1114_cur."!mark_push"(0, rx1114_pos, $I10)
   # rx literal  "ne"
-    add $I11, rx1111_pos, 2
-    gt $I11, rx1111_eos, rx1111_fail
-    sub $I11, rx1111_pos, rx1111_off
-    substr $S10, rx1111_tgt, $I11, 2
-    ne $S10, "ne", rx1111_fail
-    add rx1111_pos, 2
-    set_addr $I10, rxcap_1116_fail
-    ($I12, $I11) = rx1111_cur."!mark_peek"($I10)
-    rx1111_cur."!cursor_pos"($I11)
-    ($P10) = rx1111_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1111_pos, "")
-    rx1111_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1114_pos, 2
+    gt $I11, rx1114_eos, rx1114_fail
+    sub $I11, rx1114_pos, rx1114_off
+    substr $S10, rx1114_tgt, $I11, 2
+    ne $S10, "ne", rx1114_fail
+    add rx1114_pos, 2
+    set_addr $I10, rxcap_1119_fail
+    ($I12, $I11) = rx1114_cur."!mark_peek"($I10)
+    rx1114_cur."!cursor_pos"($I11)
+    ($P10) = rx1114_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1114_pos, "")
+    rx1114_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1116_done
-  rxcap_1116_fail:
-    goto rx1111_fail
-  rxcap_1116_done:
+    goto rxcap_1119_done
+  rxcap_1119_fail:
+    goto rx1114_fail
+  rxcap_1119_done:
   # rx subrule "O" subtype=capture negate=
-    rx1111_cur."!cursor_pos"(rx1111_pos)
-    $P10 = rx1111_cur."O"("%relational, :pirop<isne ISs>")
-    unless $P10, rx1111_fail
-    rx1111_cur."!mark_push"(0, -1, 0, $P10)
+    rx1114_cur."!cursor_pos"(rx1114_pos)
+    $P10 = rx1114_cur."O"("%relational, :pirop<isne ISs>")
+    unless $P10, rx1114_fail
+    rx1114_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1111_pos = $P10."pos"()
+    rx1114_pos = $P10."pos"()
   # rx pass
-    rx1111_cur."!cursor_pass"(rx1111_pos, "infix:sym<ne>")
-    rx1111_cur."!cursor_debug"("PASS  ", "infix:sym<ne>", " at pos=", rx1111_pos)
-    .return (rx1111_cur)
-  rx1111_fail:
-.annotate "line", 417
-    (rx1111_rep, rx1111_pos, $I10, $P10) = rx1111_cur."!mark_fail"(0)
-    lt rx1111_pos, -1, rx1111_done
-    eq rx1111_pos, -1, rx1111_fail
+    rx1114_cur."!cursor_pass"(rx1114_pos, "infix:sym<ne>")
+    rx1114_cur."!cursor_debug"("PASS  ", "infix:sym<ne>", " at pos=", rx1114_pos)
+    .return (rx1114_cur)
+  rx1114_fail:
+.annotate "line", 421
+    (rx1114_rep, rx1114_pos, $I10, $P10) = rx1114_cur."!mark_fail"(0)
+    lt rx1114_pos, -1, rx1114_done
+    eq rx1114_pos, -1, rx1114_fail
     jump $I10
-  rx1111_done:
-    rx1111_cur."!cursor_fail"()
-    rx1111_cur."!cursor_debug"("FAIL  ", "infix:sym<ne>")
-    .return (rx1111_cur)
+  rx1114_done:
+    rx1114_cur."!cursor_fail"()
+    rx1114_cur."!cursor_debug"("FAIL  ", "infix:sym<ne>")
+    .return (rx1114_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ne>"  :subid("284_1267204702.05125") :method
-.annotate "line", 417
-    $P1113 = self."!PREFIX__!subrule"("O", "ne")
-    new $P1114, "ResizablePMCArray"
-    push $P1114, $P1113
-    .return ($P1114)
+.sub "!PREFIX__infix:sym<ne>"  :subid("284_1271336396.90314") :method
+.annotate "line", 421
+    $P1116 = self."!PREFIX__!subrule"("O", "ne")
+    new $P1117, "ResizablePMCArray"
+    push $P1117, $P1116
+    .return ($P1117)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<le>"  :subid("285_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1118_tgt
-    .local int rx1118_pos
-    .local int rx1118_off
-    .local int rx1118_eos
-    .local int rx1118_rep
-    .local pmc rx1118_cur
-    (rx1118_cur, rx1118_pos, rx1118_tgt) = self."!cursor_start"()
-    rx1118_cur."!cursor_debug"("START ", "infix:sym<le>")
-    .lex unicode:"$\x{a2}", rx1118_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1118_eos, rx1118_tgt
-    set rx1118_off, 0
-    lt rx1118_pos, 2, rx1118_start
-    sub rx1118_off, rx1118_pos, 1
-    substr rx1118_tgt, rx1118_tgt, rx1118_off
-  rx1118_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1122_done
-    goto rxscan1122_scan
-  rxscan1122_loop:
-    ($P10) = rx1118_cur."from"()
-    inc $P10
-    set rx1118_pos, $P10
-    ge rx1118_pos, rx1118_eos, rxscan1122_done
-  rxscan1122_scan:
-    set_addr $I10, rxscan1122_loop
-    rx1118_cur."!mark_push"(0, rx1118_pos, $I10)
-  rxscan1122_done:
-.annotate "line", 494
+.sub "infix:sym<le>"  :subid("285_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1121_tgt
+    .local int rx1121_pos
+    .local int rx1121_off
+    .local int rx1121_eos
+    .local int rx1121_rep
+    .local pmc rx1121_cur
+    (rx1121_cur, rx1121_pos, rx1121_tgt) = self."!cursor_start"()
+    rx1121_cur."!cursor_debug"("START ", "infix:sym<le>")
+    .lex unicode:"$\x{a2}", rx1121_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1121_eos, rx1121_tgt
+    set rx1121_off, 0
+    lt rx1121_pos, 2, rx1121_start
+    sub rx1121_off, rx1121_pos, 1
+    substr rx1121_tgt, rx1121_tgt, rx1121_off
+  rx1121_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1125_done
+    goto rxscan1125_scan
+  rxscan1125_loop:
+    ($P10) = rx1121_cur."from"()
+    inc $P10
+    set rx1121_pos, $P10
+    ge rx1121_pos, rx1121_eos, rxscan1125_done
+  rxscan1125_scan:
+    set_addr $I10, rxscan1125_loop
+    rx1121_cur."!mark_push"(0, rx1121_pos, $I10)
+  rxscan1125_done:
+.annotate "line", 498
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1123_fail
-    rx1118_cur."!mark_push"(0, rx1118_pos, $I10)
+    set_addr $I10, rxcap_1126_fail
+    rx1121_cur."!mark_push"(0, rx1121_pos, $I10)
   # rx literal  "le"
-    add $I11, rx1118_pos, 2
-    gt $I11, rx1118_eos, rx1118_fail
-    sub $I11, rx1118_pos, rx1118_off
-    substr $S10, rx1118_tgt, $I11, 2
-    ne $S10, "le", rx1118_fail
-    add rx1118_pos, 2
-    set_addr $I10, rxcap_1123_fail
-    ($I12, $I11) = rx1118_cur."!mark_peek"($I10)
-    rx1118_cur."!cursor_pos"($I11)
-    ($P10) = rx1118_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1118_pos, "")
-    rx1118_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1121_pos, 2
+    gt $I11, rx1121_eos, rx1121_fail
+    sub $I11, rx1121_pos, rx1121_off
+    substr $S10, rx1121_tgt, $I11, 2
+    ne $S10, "le", rx1121_fail
+    add rx1121_pos, 2
+    set_addr $I10, rxcap_1126_fail
+    ($I12, $I11) = rx1121_cur."!mark_peek"($I10)
+    rx1121_cur."!cursor_pos"($I11)
+    ($P10) = rx1121_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1121_pos, "")
+    rx1121_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1123_done
-  rxcap_1123_fail:
-    goto rx1118_fail
-  rxcap_1123_done:
+    goto rxcap_1126_done
+  rxcap_1126_fail:
+    goto rx1121_fail
+  rxcap_1126_done:
   # rx subrule "O" subtype=capture negate=
-    rx1118_cur."!cursor_pos"(rx1118_pos)
-    $P10 = rx1118_cur."O"("%relational, :pirop<isle ISs>")
-    unless $P10, rx1118_fail
-    rx1118_cur."!mark_push"(0, -1, 0, $P10)
+    rx1121_cur."!cursor_pos"(rx1121_pos)
+    $P10 = rx1121_cur."O"("%relational, :pirop<isle ISs>")
+    unless $P10, rx1121_fail
+    rx1121_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1118_pos = $P10."pos"()
+    rx1121_pos = $P10."pos"()
   # rx pass
-    rx1118_cur."!cursor_pass"(rx1118_pos, "infix:sym<le>")
-    rx1118_cur."!cursor_debug"("PASS  ", "infix:sym<le>", " at pos=", rx1118_pos)
-    .return (rx1118_cur)
-  rx1118_fail:
-.annotate "line", 417
-    (rx1118_rep, rx1118_pos, $I10, $P10) = rx1118_cur."!mark_fail"(0)
-    lt rx1118_pos, -1, rx1118_done
-    eq rx1118_pos, -1, rx1118_fail
+    rx1121_cur."!cursor_pass"(rx1121_pos, "infix:sym<le>")
+    rx1121_cur."!cursor_debug"("PASS  ", "infix:sym<le>", " at pos=", rx1121_pos)
+    .return (rx1121_cur)
+  rx1121_fail:
+.annotate "line", 421
+    (rx1121_rep, rx1121_pos, $I10, $P10) = rx1121_cur."!mark_fail"(0)
+    lt rx1121_pos, -1, rx1121_done
+    eq rx1121_pos, -1, rx1121_fail
     jump $I10
-  rx1118_done:
-    rx1118_cur."!cursor_fail"()
-    rx1118_cur."!cursor_debug"("FAIL  ", "infix:sym<le>")
-    .return (rx1118_cur)
+  rx1121_done:
+    rx1121_cur."!cursor_fail"()
+    rx1121_cur."!cursor_debug"("FAIL  ", "infix:sym<le>")
+    .return (rx1121_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<le>"  :subid("286_1267204702.05125") :method
-.annotate "line", 417
-    $P1120 = self."!PREFIX__!subrule"("O", "le")
-    new $P1121, "ResizablePMCArray"
-    push $P1121, $P1120
-    .return ($P1121)
+.sub "!PREFIX__infix:sym<le>"  :subid("286_1271336396.90314") :method
+.annotate "line", 421
+    $P1123 = self."!PREFIX__!subrule"("O", "le")
+    new $P1124, "ResizablePMCArray"
+    push $P1124, $P1123
+    .return ($P1124)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ge>"  :subid("287_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1125_tgt
-    .local int rx1125_pos
-    .local int rx1125_off
-    .local int rx1125_eos
-    .local int rx1125_rep
-    .local pmc rx1125_cur
-    (rx1125_cur, rx1125_pos, rx1125_tgt) = self."!cursor_start"()
-    rx1125_cur."!cursor_debug"("START ", "infix:sym<ge>")
-    .lex unicode:"$\x{a2}", rx1125_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1125_eos, rx1125_tgt
-    set rx1125_off, 0
-    lt rx1125_pos, 2, rx1125_start
-    sub rx1125_off, rx1125_pos, 1
-    substr rx1125_tgt, rx1125_tgt, rx1125_off
-  rx1125_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1129_done
-    goto rxscan1129_scan
-  rxscan1129_loop:
-    ($P10) = rx1125_cur."from"()
-    inc $P10
-    set rx1125_pos, $P10
-    ge rx1125_pos, rx1125_eos, rxscan1129_done
-  rxscan1129_scan:
-    set_addr $I10, rxscan1129_loop
-    rx1125_cur."!mark_push"(0, rx1125_pos, $I10)
-  rxscan1129_done:
-.annotate "line", 495
+.sub "infix:sym<ge>"  :subid("287_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1128_tgt
+    .local int rx1128_pos
+    .local int rx1128_off
+    .local int rx1128_eos
+    .local int rx1128_rep
+    .local pmc rx1128_cur
+    (rx1128_cur, rx1128_pos, rx1128_tgt) = self."!cursor_start"()
+    rx1128_cur."!cursor_debug"("START ", "infix:sym<ge>")
+    .lex unicode:"$\x{a2}", rx1128_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1128_eos, rx1128_tgt
+    set rx1128_off, 0
+    lt rx1128_pos, 2, rx1128_start
+    sub rx1128_off, rx1128_pos, 1
+    substr rx1128_tgt, rx1128_tgt, rx1128_off
+  rx1128_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1132_done
+    goto rxscan1132_scan
+  rxscan1132_loop:
+    ($P10) = rx1128_cur."from"()
+    inc $P10
+    set rx1128_pos, $P10
+    ge rx1128_pos, rx1128_eos, rxscan1132_done
+  rxscan1132_scan:
+    set_addr $I10, rxscan1132_loop
+    rx1128_cur."!mark_push"(0, rx1128_pos, $I10)
+  rxscan1132_done:
+.annotate "line", 499
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1130_fail
-    rx1125_cur."!mark_push"(0, rx1125_pos, $I10)
+    set_addr $I10, rxcap_1133_fail
+    rx1128_cur."!mark_push"(0, rx1128_pos, $I10)
   # rx literal  "ge"
-    add $I11, rx1125_pos, 2
-    gt $I11, rx1125_eos, rx1125_fail
-    sub $I11, rx1125_pos, rx1125_off
-    substr $S10, rx1125_tgt, $I11, 2
-    ne $S10, "ge", rx1125_fail
-    add rx1125_pos, 2
-    set_addr $I10, rxcap_1130_fail
-    ($I12, $I11) = rx1125_cur."!mark_peek"($I10)
-    rx1125_cur."!cursor_pos"($I11)
-    ($P10) = rx1125_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1125_pos, "")
-    rx1125_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1128_pos, 2
+    gt $I11, rx1128_eos, rx1128_fail
+    sub $I11, rx1128_pos, rx1128_off
+    substr $S10, rx1128_tgt, $I11, 2
+    ne $S10, "ge", rx1128_fail
+    add rx1128_pos, 2
+    set_addr $I10, rxcap_1133_fail
+    ($I12, $I11) = rx1128_cur."!mark_peek"($I10)
+    rx1128_cur."!cursor_pos"($I11)
+    ($P10) = rx1128_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1128_pos, "")
+    rx1128_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1130_done
-  rxcap_1130_fail:
-    goto rx1125_fail
-  rxcap_1130_done:
+    goto rxcap_1133_done
+  rxcap_1133_fail:
+    goto rx1128_fail
+  rxcap_1133_done:
   # rx subrule "O" subtype=capture negate=
-    rx1125_cur."!cursor_pos"(rx1125_pos)
-    $P10 = rx1125_cur."O"("%relational, :pirop<isge ISs>")
-    unless $P10, rx1125_fail
-    rx1125_cur."!mark_push"(0, -1, 0, $P10)
+    rx1128_cur."!cursor_pos"(rx1128_pos)
+    $P10 = rx1128_cur."O"("%relational, :pirop<isge ISs>")
+    unless $P10, rx1128_fail
+    rx1128_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1125_pos = $P10."pos"()
+    rx1128_pos = $P10."pos"()
   # rx pass
-    rx1125_cur."!cursor_pass"(rx1125_pos, "infix:sym<ge>")
-    rx1125_cur."!cursor_debug"("PASS  ", "infix:sym<ge>", " at pos=", rx1125_pos)
-    .return (rx1125_cur)
-  rx1125_fail:
-.annotate "line", 417
-    (rx1125_rep, rx1125_pos, $I10, $P10) = rx1125_cur."!mark_fail"(0)
-    lt rx1125_pos, -1, rx1125_done
-    eq rx1125_pos, -1, rx1125_fail
+    rx1128_cur."!cursor_pass"(rx1128_pos, "infix:sym<ge>")
+    rx1128_cur."!cursor_debug"("PASS  ", "infix:sym<ge>", " at pos=", rx1128_pos)
+    .return (rx1128_cur)
+  rx1128_fail:
+.annotate "line", 421
+    (rx1128_rep, rx1128_pos, $I10, $P10) = rx1128_cur."!mark_fail"(0)
+    lt rx1128_pos, -1, rx1128_done
+    eq rx1128_pos, -1, rx1128_fail
     jump $I10
-  rx1125_done:
-    rx1125_cur."!cursor_fail"()
-    rx1125_cur."!cursor_debug"("FAIL  ", "infix:sym<ge>")
-    .return (rx1125_cur)
+  rx1128_done:
+    rx1128_cur."!cursor_fail"()
+    rx1128_cur."!cursor_debug"("FAIL  ", "infix:sym<ge>")
+    .return (rx1128_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ge>"  :subid("288_1267204702.05125") :method
-.annotate "line", 417
-    $P1127 = self."!PREFIX__!subrule"("O", "ge")
-    new $P1128, "ResizablePMCArray"
-    push $P1128, $P1127
-    .return ($P1128)
+.sub "!PREFIX__infix:sym<ge>"  :subid("288_1271336396.90314") :method
+.annotate "line", 421
+    $P1130 = self."!PREFIX__!subrule"("O", "ge")
+    new $P1131, "ResizablePMCArray"
+    push $P1131, $P1130
+    .return ($P1131)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<lt>"  :subid("289_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1132_tgt
-    .local int rx1132_pos
-    .local int rx1132_off
-    .local int rx1132_eos
-    .local int rx1132_rep
-    .local pmc rx1132_cur
-    (rx1132_cur, rx1132_pos, rx1132_tgt) = self."!cursor_start"()
-    rx1132_cur."!cursor_debug"("START ", "infix:sym<lt>")
-    .lex unicode:"$\x{a2}", rx1132_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1132_eos, rx1132_tgt
-    set rx1132_off, 0
-    lt rx1132_pos, 2, rx1132_start
-    sub rx1132_off, rx1132_pos, 1
-    substr rx1132_tgt, rx1132_tgt, rx1132_off
-  rx1132_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1136_done
-    goto rxscan1136_scan
-  rxscan1136_loop:
-    ($P10) = rx1132_cur."from"()
-    inc $P10
-    set rx1132_pos, $P10
-    ge rx1132_pos, rx1132_eos, rxscan1136_done
-  rxscan1136_scan:
-    set_addr $I10, rxscan1136_loop
-    rx1132_cur."!mark_push"(0, rx1132_pos, $I10)
-  rxscan1136_done:
-.annotate "line", 496
+.sub "infix:sym<lt>"  :subid("289_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1135_tgt
+    .local int rx1135_pos
+    .local int rx1135_off
+    .local int rx1135_eos
+    .local int rx1135_rep
+    .local pmc rx1135_cur
+    (rx1135_cur, rx1135_pos, rx1135_tgt) = self."!cursor_start"()
+    rx1135_cur."!cursor_debug"("START ", "infix:sym<lt>")
+    .lex unicode:"$\x{a2}", rx1135_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1135_eos, rx1135_tgt
+    set rx1135_off, 0
+    lt rx1135_pos, 2, rx1135_start
+    sub rx1135_off, rx1135_pos, 1
+    substr rx1135_tgt, rx1135_tgt, rx1135_off
+  rx1135_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1139_done
+    goto rxscan1139_scan
+  rxscan1139_loop:
+    ($P10) = rx1135_cur."from"()
+    inc $P10
+    set rx1135_pos, $P10
+    ge rx1135_pos, rx1135_eos, rxscan1139_done
+  rxscan1139_scan:
+    set_addr $I10, rxscan1139_loop
+    rx1135_cur."!mark_push"(0, rx1135_pos, $I10)
+  rxscan1139_done:
+.annotate "line", 500
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1137_fail
-    rx1132_cur."!mark_push"(0, rx1132_pos, $I10)
+    set_addr $I10, rxcap_1140_fail
+    rx1135_cur."!mark_push"(0, rx1135_pos, $I10)
   # rx literal  "lt"
-    add $I11, rx1132_pos, 2
-    gt $I11, rx1132_eos, rx1132_fail
-    sub $I11, rx1132_pos, rx1132_off
-    substr $S10, rx1132_tgt, $I11, 2
-    ne $S10, "lt", rx1132_fail
-    add rx1132_pos, 2
-    set_addr $I10, rxcap_1137_fail
-    ($I12, $I11) = rx1132_cur."!mark_peek"($I10)
-    rx1132_cur."!cursor_pos"($I11)
-    ($P10) = rx1132_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1132_pos, "")
-    rx1132_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1135_pos, 2
+    gt $I11, rx1135_eos, rx1135_fail
+    sub $I11, rx1135_pos, rx1135_off
+    substr $S10, rx1135_tgt, $I11, 2
+    ne $S10, "lt", rx1135_fail
+    add rx1135_pos, 2
+    set_addr $I10, rxcap_1140_fail
+    ($I12, $I11) = rx1135_cur."!mark_peek"($I10)
+    rx1135_cur."!cursor_pos"($I11)
+    ($P10) = rx1135_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1135_pos, "")
+    rx1135_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1137_done
-  rxcap_1137_fail:
-    goto rx1132_fail
-  rxcap_1137_done:
+    goto rxcap_1140_done
+  rxcap_1140_fail:
+    goto rx1135_fail
+  rxcap_1140_done:
   # rx subrule "O" subtype=capture negate=
-    rx1132_cur."!cursor_pos"(rx1132_pos)
-    $P10 = rx1132_cur."O"("%relational, :pirop<islt ISs>")
-    unless $P10, rx1132_fail
-    rx1132_cur."!mark_push"(0, -1, 0, $P10)
+    rx1135_cur."!cursor_pos"(rx1135_pos)
+    $P10 = rx1135_cur."O"("%relational, :pirop<islt ISs>")
+    unless $P10, rx1135_fail
+    rx1135_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1132_pos = $P10."pos"()
+    rx1135_pos = $P10."pos"()
   # rx pass
-    rx1132_cur."!cursor_pass"(rx1132_pos, "infix:sym<lt>")
-    rx1132_cur."!cursor_debug"("PASS  ", "infix:sym<lt>", " at pos=", rx1132_pos)
-    .return (rx1132_cur)
-  rx1132_fail:
-.annotate "line", 417
-    (rx1132_rep, rx1132_pos, $I10, $P10) = rx1132_cur."!mark_fail"(0)
-    lt rx1132_pos, -1, rx1132_done
-    eq rx1132_pos, -1, rx1132_fail
+    rx1135_cur."!cursor_pass"(rx1135_pos, "infix:sym<lt>")
+    rx1135_cur."!cursor_debug"("PASS  ", "infix:sym<lt>", " at pos=", rx1135_pos)
+    .return (rx1135_cur)
+  rx1135_fail:
+.annotate "line", 421
+    (rx1135_rep, rx1135_pos, $I10, $P10) = rx1135_cur."!mark_fail"(0)
+    lt rx1135_pos, -1, rx1135_done
+    eq rx1135_pos, -1, rx1135_fail
     jump $I10
-  rx1132_done:
-    rx1132_cur."!cursor_fail"()
-    rx1132_cur."!cursor_debug"("FAIL  ", "infix:sym<lt>")
-    .return (rx1132_cur)
+  rx1135_done:
+    rx1135_cur."!cursor_fail"()
+    rx1135_cur."!cursor_debug"("FAIL  ", "infix:sym<lt>")
+    .return (rx1135_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<lt>"  :subid("290_1267204702.05125") :method
-.annotate "line", 417
-    $P1134 = self."!PREFIX__!subrule"("O", "lt")
-    new $P1135, "ResizablePMCArray"
-    push $P1135, $P1134
-    .return ($P1135)
+.sub "!PREFIX__infix:sym<lt>"  :subid("290_1271336396.90314") :method
+.annotate "line", 421
+    $P1137 = self."!PREFIX__!subrule"("O", "lt")
+    new $P1138, "ResizablePMCArray"
+    push $P1138, $P1137
+    .return ($P1138)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<gt>"  :subid("291_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1139_tgt
-    .local int rx1139_pos
-    .local int rx1139_off
-    .local int rx1139_eos
-    .local int rx1139_rep
-    .local pmc rx1139_cur
-    (rx1139_cur, rx1139_pos, rx1139_tgt) = self."!cursor_start"()
-    rx1139_cur."!cursor_debug"("START ", "infix:sym<gt>")
-    .lex unicode:"$\x{a2}", rx1139_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1139_eos, rx1139_tgt
-    set rx1139_off, 0
-    lt rx1139_pos, 2, rx1139_start
-    sub rx1139_off, rx1139_pos, 1
-    substr rx1139_tgt, rx1139_tgt, rx1139_off
-  rx1139_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1143_done
-    goto rxscan1143_scan
-  rxscan1143_loop:
-    ($P10) = rx1139_cur."from"()
-    inc $P10
-    set rx1139_pos, $P10
-    ge rx1139_pos, rx1139_eos, rxscan1143_done
-  rxscan1143_scan:
-    set_addr $I10, rxscan1143_loop
-    rx1139_cur."!mark_push"(0, rx1139_pos, $I10)
-  rxscan1143_done:
-.annotate "line", 497
+.sub "infix:sym<gt>"  :subid("291_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1142_tgt
+    .local int rx1142_pos
+    .local int rx1142_off
+    .local int rx1142_eos
+    .local int rx1142_rep
+    .local pmc rx1142_cur
+    (rx1142_cur, rx1142_pos, rx1142_tgt) = self."!cursor_start"()
+    rx1142_cur."!cursor_debug"("START ", "infix:sym<gt>")
+    .lex unicode:"$\x{a2}", rx1142_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1142_eos, rx1142_tgt
+    set rx1142_off, 0
+    lt rx1142_pos, 2, rx1142_start
+    sub rx1142_off, rx1142_pos, 1
+    substr rx1142_tgt, rx1142_tgt, rx1142_off
+  rx1142_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1146_done
+    goto rxscan1146_scan
+  rxscan1146_loop:
+    ($P10) = rx1142_cur."from"()
+    inc $P10
+    set rx1142_pos, $P10
+    ge rx1142_pos, rx1142_eos, rxscan1146_done
+  rxscan1146_scan:
+    set_addr $I10, rxscan1146_loop
+    rx1142_cur."!mark_push"(0, rx1142_pos, $I10)
+  rxscan1146_done:
+.annotate "line", 501
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1144_fail
-    rx1139_cur."!mark_push"(0, rx1139_pos, $I10)
+    set_addr $I10, rxcap_1147_fail
+    rx1142_cur."!mark_push"(0, rx1142_pos, $I10)
   # rx literal  "gt"
-    add $I11, rx1139_pos, 2
-    gt $I11, rx1139_eos, rx1139_fail
-    sub $I11, rx1139_pos, rx1139_off
-    substr $S10, rx1139_tgt, $I11, 2
-    ne $S10, "gt", rx1139_fail
-    add rx1139_pos, 2
-    set_addr $I10, rxcap_1144_fail
-    ($I12, $I11) = rx1139_cur."!mark_peek"($I10)
-    rx1139_cur."!cursor_pos"($I11)
-    ($P10) = rx1139_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1139_pos, "")
-    rx1139_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1142_pos, 2
+    gt $I11, rx1142_eos, rx1142_fail
+    sub $I11, rx1142_pos, rx1142_off
+    substr $S10, rx1142_tgt, $I11, 2
+    ne $S10, "gt", rx1142_fail
+    add rx1142_pos, 2
+    set_addr $I10, rxcap_1147_fail
+    ($I12, $I11) = rx1142_cur."!mark_peek"($I10)
+    rx1142_cur."!cursor_pos"($I11)
+    ($P10) = rx1142_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1142_pos, "")
+    rx1142_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1144_done
-  rxcap_1144_fail:
-    goto rx1139_fail
-  rxcap_1144_done:
+    goto rxcap_1147_done
+  rxcap_1147_fail:
+    goto rx1142_fail
+  rxcap_1147_done:
   # rx subrule "O" subtype=capture negate=
-    rx1139_cur."!cursor_pos"(rx1139_pos)
-    $P10 = rx1139_cur."O"("%relational, :pirop<isgt ISs>")
-    unless $P10, rx1139_fail
-    rx1139_cur."!mark_push"(0, -1, 0, $P10)
+    rx1142_cur."!cursor_pos"(rx1142_pos)
+    $P10 = rx1142_cur."O"("%relational, :pirop<isgt ISs>")
+    unless $P10, rx1142_fail
+    rx1142_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1139_pos = $P10."pos"()
+    rx1142_pos = $P10."pos"()
   # rx pass
-    rx1139_cur."!cursor_pass"(rx1139_pos, "infix:sym<gt>")
-    rx1139_cur."!cursor_debug"("PASS  ", "infix:sym<gt>", " at pos=", rx1139_pos)
-    .return (rx1139_cur)
-  rx1139_fail:
-.annotate "line", 417
-    (rx1139_rep, rx1139_pos, $I10, $P10) = rx1139_cur."!mark_fail"(0)
-    lt rx1139_pos, -1, rx1139_done
-    eq rx1139_pos, -1, rx1139_fail
+    rx1142_cur."!cursor_pass"(rx1142_pos, "infix:sym<gt>")
+    rx1142_cur."!cursor_debug"("PASS  ", "infix:sym<gt>", " at pos=", rx1142_pos)
+    .return (rx1142_cur)
+  rx1142_fail:
+.annotate "line", 421
+    (rx1142_rep, rx1142_pos, $I10, $P10) = rx1142_cur."!mark_fail"(0)
+    lt rx1142_pos, -1, rx1142_done
+    eq rx1142_pos, -1, rx1142_fail
     jump $I10
-  rx1139_done:
-    rx1139_cur."!cursor_fail"()
-    rx1139_cur."!cursor_debug"("FAIL  ", "infix:sym<gt>")
-    .return (rx1139_cur)
+  rx1142_done:
+    rx1142_cur."!cursor_fail"()
+    rx1142_cur."!cursor_debug"("FAIL  ", "infix:sym<gt>")
+    .return (rx1142_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<gt>"  :subid("292_1267204702.05125") :method
-.annotate "line", 417
-    $P1141 = self."!PREFIX__!subrule"("O", "gt")
-    new $P1142, "ResizablePMCArray"
-    push $P1142, $P1141
-    .return ($P1142)
+.sub "!PREFIX__infix:sym<gt>"  :subid("292_1271336396.90314") :method
+.annotate "line", 421
+    $P1144 = self."!PREFIX__!subrule"("O", "gt")
+    new $P1145, "ResizablePMCArray"
+    push $P1145, $P1144
+    .return ($P1145)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=:=>"  :subid("293_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1146_tgt
-    .local int rx1146_pos
-    .local int rx1146_off
-    .local int rx1146_eos
-    .local int rx1146_rep
-    .local pmc rx1146_cur
-    (rx1146_cur, rx1146_pos, rx1146_tgt) = self."!cursor_start"()
-    rx1146_cur."!cursor_debug"("START ", "infix:sym<=:=>")
-    .lex unicode:"$\x{a2}", rx1146_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1146_eos, rx1146_tgt
-    set rx1146_off, 0
-    lt rx1146_pos, 2, rx1146_start
-    sub rx1146_off, rx1146_pos, 1
-    substr rx1146_tgt, rx1146_tgt, rx1146_off
-  rx1146_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1150_done
-    goto rxscan1150_scan
-  rxscan1150_loop:
-    ($P10) = rx1146_cur."from"()
-    inc $P10
-    set rx1146_pos, $P10
-    ge rx1146_pos, rx1146_eos, rxscan1150_done
-  rxscan1150_scan:
-    set_addr $I10, rxscan1150_loop
-    rx1146_cur."!mark_push"(0, rx1146_pos, $I10)
-  rxscan1150_done:
-.annotate "line", 498
+.sub "infix:sym<=:=>"  :subid("293_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1149_tgt
+    .local int rx1149_pos
+    .local int rx1149_off
+    .local int rx1149_eos
+    .local int rx1149_rep
+    .local pmc rx1149_cur
+    (rx1149_cur, rx1149_pos, rx1149_tgt) = self."!cursor_start"()
+    rx1149_cur."!cursor_debug"("START ", "infix:sym<=:=>")
+    .lex unicode:"$\x{a2}", rx1149_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1149_eos, rx1149_tgt
+    set rx1149_off, 0
+    lt rx1149_pos, 2, rx1149_start
+    sub rx1149_off, rx1149_pos, 1
+    substr rx1149_tgt, rx1149_tgt, rx1149_off
+  rx1149_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1153_done
+    goto rxscan1153_scan
+  rxscan1153_loop:
+    ($P10) = rx1149_cur."from"()
+    inc $P10
+    set rx1149_pos, $P10
+    ge rx1149_pos, rx1149_eos, rxscan1153_done
+  rxscan1153_scan:
+    set_addr $I10, rxscan1153_loop
+    rx1149_cur."!mark_push"(0, rx1149_pos, $I10)
+  rxscan1153_done:
+.annotate "line", 502
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1151_fail
-    rx1146_cur."!mark_push"(0, rx1146_pos, $I10)
+    set_addr $I10, rxcap_1154_fail
+    rx1149_cur."!mark_push"(0, rx1149_pos, $I10)
   # rx literal  "=:="
-    add $I11, rx1146_pos, 3
-    gt $I11, rx1146_eos, rx1146_fail
-    sub $I11, rx1146_pos, rx1146_off
-    substr $S10, rx1146_tgt, $I11, 3
-    ne $S10, "=:=", rx1146_fail
-    add rx1146_pos, 3
-    set_addr $I10, rxcap_1151_fail
-    ($I12, $I11) = rx1146_cur."!mark_peek"($I10)
-    rx1146_cur."!cursor_pos"($I11)
-    ($P10) = rx1146_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1146_pos, "")
-    rx1146_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1149_pos, 3
+    gt $I11, rx1149_eos, rx1149_fail
+    sub $I11, rx1149_pos, rx1149_off
+    substr $S10, rx1149_tgt, $I11, 3
+    ne $S10, "=:=", rx1149_fail
+    add rx1149_pos, 3
+    set_addr $I10, rxcap_1154_fail
+    ($I12, $I11) = rx1149_cur."!mark_peek"($I10)
+    rx1149_cur."!cursor_pos"($I11)
+    ($P10) = rx1149_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1149_pos, "")
+    rx1149_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1151_done
-  rxcap_1151_fail:
-    goto rx1146_fail
-  rxcap_1151_done:
+    goto rxcap_1154_done
+  rxcap_1154_fail:
+    goto rx1149_fail
+  rxcap_1154_done:
   # rx subrule "O" subtype=capture negate=
-    rx1146_cur."!cursor_pos"(rx1146_pos)
-    $P10 = rx1146_cur."O"("%relational, :pirop<issame>")
-    unless $P10, rx1146_fail
-    rx1146_cur."!mark_push"(0, -1, 0, $P10)
+    rx1149_cur."!cursor_pos"(rx1149_pos)
+    $P10 = rx1149_cur."O"("%relational, :pirop<issame>")
+    unless $P10, rx1149_fail
+    rx1149_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1146_pos = $P10."pos"()
+    rx1149_pos = $P10."pos"()
   # rx pass
-    rx1146_cur."!cursor_pass"(rx1146_pos, "infix:sym<=:=>")
-    rx1146_cur."!cursor_debug"("PASS  ", "infix:sym<=:=>", " at pos=", rx1146_pos)
-    .return (rx1146_cur)
-  rx1146_fail:
-.annotate "line", 417
-    (rx1146_rep, rx1146_pos, $I10, $P10) = rx1146_cur."!mark_fail"(0)
-    lt rx1146_pos, -1, rx1146_done
-    eq rx1146_pos, -1, rx1146_fail
+    rx1149_cur."!cursor_pass"(rx1149_pos, "infix:sym<=:=>")
+    rx1149_cur."!cursor_debug"("PASS  ", "infix:sym<=:=>", " at pos=", rx1149_pos)
+    .return (rx1149_cur)
+  rx1149_fail:
+.annotate "line", 421
+    (rx1149_rep, rx1149_pos, $I10, $P10) = rx1149_cur."!mark_fail"(0)
+    lt rx1149_pos, -1, rx1149_done
+    eq rx1149_pos, -1, rx1149_fail
     jump $I10
-  rx1146_done:
-    rx1146_cur."!cursor_fail"()
-    rx1146_cur."!cursor_debug"("FAIL  ", "infix:sym<=:=>")
-    .return (rx1146_cur)
+  rx1149_done:
+    rx1149_cur."!cursor_fail"()
+    rx1149_cur."!cursor_debug"("FAIL  ", "infix:sym<=:=>")
+    .return (rx1149_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=:=>"  :subid("294_1267204702.05125") :method
-.annotate "line", 417
-    $P1148 = self."!PREFIX__!subrule"("O", "=:=")
-    new $P1149, "ResizablePMCArray"
-    push $P1149, $P1148
-    .return ($P1149)
+.sub "!PREFIX__infix:sym<=:=>"  :subid("294_1271336396.90314") :method
+.annotate "line", 421
+    $P1151 = self."!PREFIX__!subrule"("O", "=:=")
+    new $P1152, "ResizablePMCArray"
+    push $P1152, $P1151
+    .return ($P1152)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~~>"  :subid("295_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1153_tgt
-    .local int rx1153_pos
-    .local int rx1153_off
-    .local int rx1153_eos
-    .local int rx1153_rep
-    .local pmc rx1153_cur
-    (rx1153_cur, rx1153_pos, rx1153_tgt) = self."!cursor_start"()
-    rx1153_cur."!cursor_debug"("START ", "infix:sym<~~>")
-    .lex unicode:"$\x{a2}", rx1153_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1153_eos, rx1153_tgt
-    set rx1153_off, 0
-    lt rx1153_pos, 2, rx1153_start
-    sub rx1153_off, rx1153_pos, 1
-    substr rx1153_tgt, rx1153_tgt, rx1153_off
-  rx1153_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1157_done
-    goto rxscan1157_scan
-  rxscan1157_loop:
-    ($P10) = rx1153_cur."from"()
-    inc $P10
-    set rx1153_pos, $P10
-    ge rx1153_pos, rx1153_eos, rxscan1157_done
-  rxscan1157_scan:
-    set_addr $I10, rxscan1157_loop
-    rx1153_cur."!mark_push"(0, rx1153_pos, $I10)
-  rxscan1157_done:
-.annotate "line", 499
+.sub "infix:sym<~~>"  :subid("295_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1156_tgt
+    .local int rx1156_pos
+    .local int rx1156_off
+    .local int rx1156_eos
+    .local int rx1156_rep
+    .local pmc rx1156_cur
+    (rx1156_cur, rx1156_pos, rx1156_tgt) = self."!cursor_start"()
+    rx1156_cur."!cursor_debug"("START ", "infix:sym<~~>")
+    .lex unicode:"$\x{a2}", rx1156_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1156_eos, rx1156_tgt
+    set rx1156_off, 0
+    lt rx1156_pos, 2, rx1156_start
+    sub rx1156_off, rx1156_pos, 1
+    substr rx1156_tgt, rx1156_tgt, rx1156_off
+  rx1156_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1160_done
+    goto rxscan1160_scan
+  rxscan1160_loop:
+    ($P10) = rx1156_cur."from"()
+    inc $P10
+    set rx1156_pos, $P10
+    ge rx1156_pos, rx1156_eos, rxscan1160_done
+  rxscan1160_scan:
+    set_addr $I10, rxscan1160_loop
+    rx1156_cur."!mark_push"(0, rx1156_pos, $I10)
+  rxscan1160_done:
+.annotate "line", 503
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1158_fail
-    rx1153_cur."!mark_push"(0, rx1153_pos, $I10)
+    set_addr $I10, rxcap_1161_fail
+    rx1156_cur."!mark_push"(0, rx1156_pos, $I10)
   # rx literal  "~~"
-    add $I11, rx1153_pos, 2
-    gt $I11, rx1153_eos, rx1153_fail
-    sub $I11, rx1153_pos, rx1153_off
-    substr $S10, rx1153_tgt, $I11, 2
-    ne $S10, "~~", rx1153_fail
-    add rx1153_pos, 2
-    set_addr $I10, rxcap_1158_fail
-    ($I12, $I11) = rx1153_cur."!mark_peek"($I10)
-    rx1153_cur."!cursor_pos"($I11)
-    ($P10) = rx1153_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1153_pos, "")
-    rx1153_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1156_pos, 2
+    gt $I11, rx1156_eos, rx1156_fail
+    sub $I11, rx1156_pos, rx1156_off
+    substr $S10, rx1156_tgt, $I11, 2
+    ne $S10, "~~", rx1156_fail
+    add rx1156_pos, 2
+    set_addr $I10, rxcap_1161_fail
+    ($I12, $I11) = rx1156_cur."!mark_peek"($I10)
+    rx1156_cur."!cursor_pos"($I11)
+    ($P10) = rx1156_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1156_pos, "")
+    rx1156_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1158_done
-  rxcap_1158_fail:
-    goto rx1153_fail
-  rxcap_1158_done:
+    goto rxcap_1161_done
+  rxcap_1161_fail:
+    goto rx1156_fail
+  rxcap_1161_done:
   # rx subrule "O" subtype=capture negate=
-    rx1153_cur."!cursor_pos"(rx1153_pos)
-    $P10 = rx1153_cur."O"("%relational, :reducecheck<smartmatch>")
-    unless $P10, rx1153_fail
-    rx1153_cur."!mark_push"(0, -1, 0, $P10)
+    rx1156_cur."!cursor_pos"(rx1156_pos)
+    $P10 = rx1156_cur."O"("%relational, :reducecheck<smartmatch>")
+    unless $P10, rx1156_fail
+    rx1156_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1153_pos = $P10."pos"()
+    rx1156_pos = $P10."pos"()
   # rx pass
-    rx1153_cur."!cursor_pass"(rx1153_pos, "infix:sym<~~>")
-    rx1153_cur."!cursor_debug"("PASS  ", "infix:sym<~~>", " at pos=", rx1153_pos)
-    .return (rx1153_cur)
-  rx1153_fail:
-.annotate "line", 417
-    (rx1153_rep, rx1153_pos, $I10, $P10) = rx1153_cur."!mark_fail"(0)
-    lt rx1153_pos, -1, rx1153_done
-    eq rx1153_pos, -1, rx1153_fail
+    rx1156_cur."!cursor_pass"(rx1156_pos, "infix:sym<~~>")
+    rx1156_cur."!cursor_debug"("PASS  ", "infix:sym<~~>", " at pos=", rx1156_pos)
+    .return (rx1156_cur)
+  rx1156_fail:
+.annotate "line", 421
+    (rx1156_rep, rx1156_pos, $I10, $P10) = rx1156_cur."!mark_fail"(0)
+    lt rx1156_pos, -1, rx1156_done
+    eq rx1156_pos, -1, rx1156_fail
     jump $I10
-  rx1153_done:
-    rx1153_cur."!cursor_fail"()
-    rx1153_cur."!cursor_debug"("FAIL  ", "infix:sym<~~>")
-    .return (rx1153_cur)
+  rx1156_done:
+    rx1156_cur."!cursor_fail"()
+    rx1156_cur."!cursor_debug"("FAIL  ", "infix:sym<~~>")
+    .return (rx1156_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~~>"  :subid("296_1267204702.05125") :method
-.annotate "line", 417
-    $P1155 = self."!PREFIX__!subrule"("O", "~~")
-    new $P1156, "ResizablePMCArray"
-    push $P1156, $P1155
-    .return ($P1156)
+.sub "!PREFIX__infix:sym<~~>"  :subid("296_1271336396.90314") :method
+.annotate "line", 421
+    $P1158 = self."!PREFIX__!subrule"("O", "~~")
+    new $P1159, "ResizablePMCArray"
+    push $P1159, $P1158
+    .return ($P1159)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<&&>"  :subid("297_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1160_tgt
-    .local int rx1160_pos
-    .local int rx1160_off
-    .local int rx1160_eos
-    .local int rx1160_rep
-    .local pmc rx1160_cur
-    (rx1160_cur, rx1160_pos, rx1160_tgt) = self."!cursor_start"()
-    rx1160_cur."!cursor_debug"("START ", "infix:sym<&&>")
-    .lex unicode:"$\x{a2}", rx1160_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1160_eos, rx1160_tgt
-    set rx1160_off, 0
-    lt rx1160_pos, 2, rx1160_start
-    sub rx1160_off, rx1160_pos, 1
-    substr rx1160_tgt, rx1160_tgt, rx1160_off
-  rx1160_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1164_done
-    goto rxscan1164_scan
-  rxscan1164_loop:
-    ($P10) = rx1160_cur."from"()
-    inc $P10
-    set rx1160_pos, $P10
-    ge rx1160_pos, rx1160_eos, rxscan1164_done
-  rxscan1164_scan:
-    set_addr $I10, rxscan1164_loop
-    rx1160_cur."!mark_push"(0, rx1160_pos, $I10)
-  rxscan1164_done:
-.annotate "line", 501
+.sub "infix:sym<&&>"  :subid("297_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1163_tgt
+    .local int rx1163_pos
+    .local int rx1163_off
+    .local int rx1163_eos
+    .local int rx1163_rep
+    .local pmc rx1163_cur
+    (rx1163_cur, rx1163_pos, rx1163_tgt) = self."!cursor_start"()
+    rx1163_cur."!cursor_debug"("START ", "infix:sym<&&>")
+    .lex unicode:"$\x{a2}", rx1163_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1163_eos, rx1163_tgt
+    set rx1163_off, 0
+    lt rx1163_pos, 2, rx1163_start
+    sub rx1163_off, rx1163_pos, 1
+    substr rx1163_tgt, rx1163_tgt, rx1163_off
+  rx1163_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1167_done
+    goto rxscan1167_scan
+  rxscan1167_loop:
+    ($P10) = rx1163_cur."from"()
+    inc $P10
+    set rx1163_pos, $P10
+    ge rx1163_pos, rx1163_eos, rxscan1167_done
+  rxscan1167_scan:
+    set_addr $I10, rxscan1167_loop
+    rx1163_cur."!mark_push"(0, rx1163_pos, $I10)
+  rxscan1167_done:
+.annotate "line", 505
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1165_fail
-    rx1160_cur."!mark_push"(0, rx1160_pos, $I10)
+    set_addr $I10, rxcap_1168_fail
+    rx1163_cur."!mark_push"(0, rx1163_pos, $I10)
   # rx literal  "&&"
-    add $I11, rx1160_pos, 2
-    gt $I11, rx1160_eos, rx1160_fail
-    sub $I11, rx1160_pos, rx1160_off
-    substr $S10, rx1160_tgt, $I11, 2
-    ne $S10, "&&", rx1160_fail
-    add rx1160_pos, 2
-    set_addr $I10, rxcap_1165_fail
-    ($I12, $I11) = rx1160_cur."!mark_peek"($I10)
-    rx1160_cur."!cursor_pos"($I11)
-    ($P10) = rx1160_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1160_pos, "")
-    rx1160_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1163_pos, 2
+    gt $I11, rx1163_eos, rx1163_fail
+    sub $I11, rx1163_pos, rx1163_off
+    substr $S10, rx1163_tgt, $I11, 2
+    ne $S10, "&&", rx1163_fail
+    add rx1163_pos, 2
+    set_addr $I10, rxcap_1168_fail
+    ($I12, $I11) = rx1163_cur."!mark_peek"($I10)
+    rx1163_cur."!cursor_pos"($I11)
+    ($P10) = rx1163_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1163_pos, "")
+    rx1163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1165_done
-  rxcap_1165_fail:
-    goto rx1160_fail
-  rxcap_1165_done:
+    goto rxcap_1168_done
+  rxcap_1168_fail:
+    goto rx1163_fail
+  rxcap_1168_done:
   # rx subrule "O" subtype=capture negate=
-    rx1160_cur."!cursor_pos"(rx1160_pos)
-    $P10 = rx1160_cur."O"("%tight_and, :pasttype<if>")
-    unless $P10, rx1160_fail
-    rx1160_cur."!mark_push"(0, -1, 0, $P10)
+    rx1163_cur."!cursor_pos"(rx1163_pos)
+    $P10 = rx1163_cur."O"("%tight_and, :pasttype<if>")
+    unless $P10, rx1163_fail
+    rx1163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1160_pos = $P10."pos"()
+    rx1163_pos = $P10."pos"()
   # rx pass
-    rx1160_cur."!cursor_pass"(rx1160_pos, "infix:sym<&&>")
-    rx1160_cur."!cursor_debug"("PASS  ", "infix:sym<&&>", " at pos=", rx1160_pos)
-    .return (rx1160_cur)
-  rx1160_fail:
-.annotate "line", 417
-    (rx1160_rep, rx1160_pos, $I10, $P10) = rx1160_cur."!mark_fail"(0)
-    lt rx1160_pos, -1, rx1160_done
-    eq rx1160_pos, -1, rx1160_fail
+    rx1163_cur."!cursor_pass"(rx1163_pos, "infix:sym<&&>")
+    rx1163_cur."!cursor_debug"("PASS  ", "infix:sym<&&>", " at pos=", rx1163_pos)
+    .return (rx1163_cur)
+  rx1163_fail:
+.annotate "line", 421
+    (rx1163_rep, rx1163_pos, $I10, $P10) = rx1163_cur."!mark_fail"(0)
+    lt rx1163_pos, -1, rx1163_done
+    eq rx1163_pos, -1, rx1163_fail
     jump $I10
-  rx1160_done:
-    rx1160_cur."!cursor_fail"()
-    rx1160_cur."!cursor_debug"("FAIL  ", "infix:sym<&&>")
-    .return (rx1160_cur)
+  rx1163_done:
+    rx1163_cur."!cursor_fail"()
+    rx1163_cur."!cursor_debug"("FAIL  ", "infix:sym<&&>")
+    .return (rx1163_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<&&>"  :subid("298_1267204702.05125") :method
-.annotate "line", 417
-    $P1162 = self."!PREFIX__!subrule"("O", "&&")
-    new $P1163, "ResizablePMCArray"
-    push $P1163, $P1162
-    .return ($P1163)
+.sub "!PREFIX__infix:sym<&&>"  :subid("298_1271336396.90314") :method
+.annotate "line", 421
+    $P1165 = self."!PREFIX__!subrule"("O", "&&")
+    new $P1166, "ResizablePMCArray"
+    push $P1166, $P1165
+    .return ($P1166)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<||>"  :subid("299_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1167_tgt
-    .local int rx1167_pos
-    .local int rx1167_off
-    .local int rx1167_eos
-    .local int rx1167_rep
-    .local pmc rx1167_cur
-    (rx1167_cur, rx1167_pos, rx1167_tgt) = self."!cursor_start"()
-    rx1167_cur."!cursor_debug"("START ", "infix:sym<||>")
-    .lex unicode:"$\x{a2}", rx1167_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1167_eos, rx1167_tgt
-    set rx1167_off, 0
-    lt rx1167_pos, 2, rx1167_start
-    sub rx1167_off, rx1167_pos, 1
-    substr rx1167_tgt, rx1167_tgt, rx1167_off
-  rx1167_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1171_done
-    goto rxscan1171_scan
-  rxscan1171_loop:
-    ($P10) = rx1167_cur."from"()
-    inc $P10
-    set rx1167_pos, $P10
-    ge rx1167_pos, rx1167_eos, rxscan1171_done
-  rxscan1171_scan:
-    set_addr $I10, rxscan1171_loop
-    rx1167_cur."!mark_push"(0, rx1167_pos, $I10)
-  rxscan1171_done:
-.annotate "line", 503
+.sub "infix:sym<||>"  :subid("299_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1170_tgt
+    .local int rx1170_pos
+    .local int rx1170_off
+    .local int rx1170_eos
+    .local int rx1170_rep
+    .local pmc rx1170_cur
+    (rx1170_cur, rx1170_pos, rx1170_tgt) = self."!cursor_start"()
+    rx1170_cur."!cursor_debug"("START ", "infix:sym<||>")
+    .lex unicode:"$\x{a2}", rx1170_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1170_eos, rx1170_tgt
+    set rx1170_off, 0
+    lt rx1170_pos, 2, rx1170_start
+    sub rx1170_off, rx1170_pos, 1
+    substr rx1170_tgt, rx1170_tgt, rx1170_off
+  rx1170_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1174_done
+    goto rxscan1174_scan
+  rxscan1174_loop:
+    ($P10) = rx1170_cur."from"()
+    inc $P10
+    set rx1170_pos, $P10
+    ge rx1170_pos, rx1170_eos, rxscan1174_done
+  rxscan1174_scan:
+    set_addr $I10, rxscan1174_loop
+    rx1170_cur."!mark_push"(0, rx1170_pos, $I10)
+  rxscan1174_done:
+.annotate "line", 507
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1172_fail
-    rx1167_cur."!mark_push"(0, rx1167_pos, $I10)
+    set_addr $I10, rxcap_1175_fail
+    rx1170_cur."!mark_push"(0, rx1170_pos, $I10)
   # rx literal  "||"
-    add $I11, rx1167_pos, 2
-    gt $I11, rx1167_eos, rx1167_fail
-    sub $I11, rx1167_pos, rx1167_off
-    substr $S10, rx1167_tgt, $I11, 2
-    ne $S10, "||", rx1167_fail
-    add rx1167_pos, 2
-    set_addr $I10, rxcap_1172_fail
-    ($I12, $I11) = rx1167_cur."!mark_peek"($I10)
-    rx1167_cur."!cursor_pos"($I11)
-    ($P10) = rx1167_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1167_pos, "")
-    rx1167_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1170_pos, 2
+    gt $I11, rx1170_eos, rx1170_fail
+    sub $I11, rx1170_pos, rx1170_off
+    substr $S10, rx1170_tgt, $I11, 2
+    ne $S10, "||", rx1170_fail
+    add rx1170_pos, 2
+    set_addr $I10, rxcap_1175_fail
+    ($I12, $I11) = rx1170_cur."!mark_peek"($I10)
+    rx1170_cur."!cursor_pos"($I11)
+    ($P10) = rx1170_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1170_pos, "")
+    rx1170_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1172_done
-  rxcap_1172_fail:
-    goto rx1167_fail
-  rxcap_1172_done:
+    goto rxcap_1175_done
+  rxcap_1175_fail:
+    goto rx1170_fail
+  rxcap_1175_done:
   # rx subrule "O" subtype=capture negate=
-    rx1167_cur."!cursor_pos"(rx1167_pos)
-    $P10 = rx1167_cur."O"("%tight_or, :pasttype<unless>")
-    unless $P10, rx1167_fail
-    rx1167_cur."!mark_push"(0, -1, 0, $P10)
+    rx1170_cur."!cursor_pos"(rx1170_pos)
+    $P10 = rx1170_cur."O"("%tight_or, :pasttype<unless>")
+    unless $P10, rx1170_fail
+    rx1170_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1167_pos = $P10."pos"()
+    rx1170_pos = $P10."pos"()
   # rx pass
-    rx1167_cur."!cursor_pass"(rx1167_pos, "infix:sym<||>")
-    rx1167_cur."!cursor_debug"("PASS  ", "infix:sym<||>", " at pos=", rx1167_pos)
-    .return (rx1167_cur)
-  rx1167_fail:
-.annotate "line", 417
-    (rx1167_rep, rx1167_pos, $I10, $P10) = rx1167_cur."!mark_fail"(0)
-    lt rx1167_pos, -1, rx1167_done
-    eq rx1167_pos, -1, rx1167_fail
+    rx1170_cur."!cursor_pass"(rx1170_pos, "infix:sym<||>")
+    rx1170_cur."!cursor_debug"("PASS  ", "infix:sym<||>", " at pos=", rx1170_pos)
+    .return (rx1170_cur)
+  rx1170_fail:
+.annotate "line", 421
+    (rx1170_rep, rx1170_pos, $I10, $P10) = rx1170_cur."!mark_fail"(0)
+    lt rx1170_pos, -1, rx1170_done
+    eq rx1170_pos, -1, rx1170_fail
     jump $I10
-  rx1167_done:
-    rx1167_cur."!cursor_fail"()
-    rx1167_cur."!cursor_debug"("FAIL  ", "infix:sym<||>")
-    .return (rx1167_cur)
+  rx1170_done:
+    rx1170_cur."!cursor_fail"()
+    rx1170_cur."!cursor_debug"("FAIL  ", "infix:sym<||>")
+    .return (rx1170_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<||>"  :subid("300_1267204702.05125") :method
-.annotate "line", 417
-    $P1169 = self."!PREFIX__!subrule"("O", "||")
-    new $P1170, "ResizablePMCArray"
-    push $P1170, $P1169
-    .return ($P1170)
+.sub "!PREFIX__infix:sym<||>"  :subid("300_1271336396.90314") :method
+.annotate "line", 421
+    $P1172 = self."!PREFIX__!subrule"("O", "||")
+    new $P1173, "ResizablePMCArray"
+    push $P1173, $P1172
+    .return ($P1173)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<//>"  :subid("301_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1174_tgt
-    .local int rx1174_pos
-    .local int rx1174_off
-    .local int rx1174_eos
-    .local int rx1174_rep
-    .local pmc rx1174_cur
-    (rx1174_cur, rx1174_pos, rx1174_tgt) = self."!cursor_start"()
-    rx1174_cur."!cursor_debug"("START ", "infix:sym<//>")
-    .lex unicode:"$\x{a2}", rx1174_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1174_eos, rx1174_tgt
-    set rx1174_off, 0
-    lt rx1174_pos, 2, rx1174_start
-    sub rx1174_off, rx1174_pos, 1
-    substr rx1174_tgt, rx1174_tgt, rx1174_off
-  rx1174_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1178_done
-    goto rxscan1178_scan
-  rxscan1178_loop:
-    ($P10) = rx1174_cur."from"()
-    inc $P10
-    set rx1174_pos, $P10
-    ge rx1174_pos, rx1174_eos, rxscan1178_done
-  rxscan1178_scan:
-    set_addr $I10, rxscan1178_loop
-    rx1174_cur."!mark_push"(0, rx1174_pos, $I10)
-  rxscan1178_done:
-.annotate "line", 504
+.sub "infix:sym<//>"  :subid("301_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1177_tgt
+    .local int rx1177_pos
+    .local int rx1177_off
+    .local int rx1177_eos
+    .local int rx1177_rep
+    .local pmc rx1177_cur
+    (rx1177_cur, rx1177_pos, rx1177_tgt) = self."!cursor_start"()
+    rx1177_cur."!cursor_debug"("START ", "infix:sym<//>")
+    .lex unicode:"$\x{a2}", rx1177_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1177_eos, rx1177_tgt
+    set rx1177_off, 0
+    lt rx1177_pos, 2, rx1177_start
+    sub rx1177_off, rx1177_pos, 1
+    substr rx1177_tgt, rx1177_tgt, rx1177_off
+  rx1177_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1181_done
+    goto rxscan1181_scan
+  rxscan1181_loop:
+    ($P10) = rx1177_cur."from"()
+    inc $P10
+    set rx1177_pos, $P10
+    ge rx1177_pos, rx1177_eos, rxscan1181_done
+  rxscan1181_scan:
+    set_addr $I10, rxscan1181_loop
+    rx1177_cur."!mark_push"(0, rx1177_pos, $I10)
+  rxscan1181_done:
+.annotate "line", 508
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1179_fail
-    rx1174_cur."!mark_push"(0, rx1174_pos, $I10)
+    set_addr $I10, rxcap_1182_fail
+    rx1177_cur."!mark_push"(0, rx1177_pos, $I10)
   # rx literal  "//"
-    add $I11, rx1174_pos, 2
-    gt $I11, rx1174_eos, rx1174_fail
-    sub $I11, rx1174_pos, rx1174_off
-    substr $S10, rx1174_tgt, $I11, 2
-    ne $S10, "//", rx1174_fail
-    add rx1174_pos, 2
-    set_addr $I10, rxcap_1179_fail
-    ($I12, $I11) = rx1174_cur."!mark_peek"($I10)
-    rx1174_cur."!cursor_pos"($I11)
-    ($P10) = rx1174_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1174_pos, "")
-    rx1174_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1177_pos, 2
+    gt $I11, rx1177_eos, rx1177_fail
+    sub $I11, rx1177_pos, rx1177_off
+    substr $S10, rx1177_tgt, $I11, 2
+    ne $S10, "//", rx1177_fail
+    add rx1177_pos, 2
+    set_addr $I10, rxcap_1182_fail
+    ($I12, $I11) = rx1177_cur."!mark_peek"($I10)
+    rx1177_cur."!cursor_pos"($I11)
+    ($P10) = rx1177_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1177_pos, "")
+    rx1177_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1179_done
-  rxcap_1179_fail:
-    goto rx1174_fail
-  rxcap_1179_done:
+    goto rxcap_1182_done
+  rxcap_1182_fail:
+    goto rx1177_fail
+  rxcap_1182_done:
   # rx subrule "O" subtype=capture negate=
-    rx1174_cur."!cursor_pos"(rx1174_pos)
-    $P10 = rx1174_cur."O"("%tight_or, :pasttype<def_or>")
-    unless $P10, rx1174_fail
-    rx1174_cur."!mark_push"(0, -1, 0, $P10)
+    rx1177_cur."!cursor_pos"(rx1177_pos)
+    $P10 = rx1177_cur."O"("%tight_or, :pasttype<def_or>")
+    unless $P10, rx1177_fail
+    rx1177_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1174_pos = $P10."pos"()
+    rx1177_pos = $P10."pos"()
   # rx pass
-    rx1174_cur."!cursor_pass"(rx1174_pos, "infix:sym<//>")
-    rx1174_cur."!cursor_debug"("PASS  ", "infix:sym<//>", " at pos=", rx1174_pos)
-    .return (rx1174_cur)
-  rx1174_fail:
-.annotate "line", 417
-    (rx1174_rep, rx1174_pos, $I10, $P10) = rx1174_cur."!mark_fail"(0)
-    lt rx1174_pos, -1, rx1174_done
-    eq rx1174_pos, -1, rx1174_fail
+    rx1177_cur."!cursor_pass"(rx1177_pos, "infix:sym<//>")
+    rx1177_cur."!cursor_debug"("PASS  ", "infix:sym<//>", " at pos=", rx1177_pos)
+    .return (rx1177_cur)
+  rx1177_fail:
+.annotate "line", 421
+    (rx1177_rep, rx1177_pos, $I10, $P10) = rx1177_cur."!mark_fail"(0)
+    lt rx1177_pos, -1, rx1177_done
+    eq rx1177_pos, -1, rx1177_fail
     jump $I10
-  rx1174_done:
-    rx1174_cur."!cursor_fail"()
-    rx1174_cur."!cursor_debug"("FAIL  ", "infix:sym<//>")
-    .return (rx1174_cur)
+  rx1177_done:
+    rx1177_cur."!cursor_fail"()
+    rx1177_cur."!cursor_debug"("FAIL  ", "infix:sym<//>")
+    .return (rx1177_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<//>"  :subid("302_1267204702.05125") :method
-.annotate "line", 417
-    $P1176 = self."!PREFIX__!subrule"("O", "//")
-    new $P1177, "ResizablePMCArray"
-    push $P1177, $P1176
-    .return ($P1177)
+.sub "!PREFIX__infix:sym<//>"  :subid("302_1271336396.90314") :method
+.annotate "line", 421
+    $P1179 = self."!PREFIX__!subrule"("O", "//")
+    new $P1180, "ResizablePMCArray"
+    push $P1180, $P1179
+    .return ($P1180)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<?? !!>"  :subid("303_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1181_tgt
-    .local int rx1181_pos
-    .local int rx1181_off
-    .local int rx1181_eos
-    .local int rx1181_rep
-    .local pmc rx1181_cur
-    (rx1181_cur, rx1181_pos, rx1181_tgt) = self."!cursor_start"()
-    rx1181_cur."!cursor_debug"("START ", "infix:sym<?? !!>")
-    .lex unicode:"$\x{a2}", rx1181_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1181_eos, rx1181_tgt
-    set rx1181_off, 0
-    lt rx1181_pos, 2, rx1181_start
-    sub rx1181_off, rx1181_pos, 1
-    substr rx1181_tgt, rx1181_tgt, rx1181_off
-  rx1181_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1185_done
-    goto rxscan1185_scan
-  rxscan1185_loop:
-    ($P10) = rx1181_cur."from"()
-    inc $P10
-    set rx1181_pos, $P10
-    ge rx1181_pos, rx1181_eos, rxscan1185_done
-  rxscan1185_scan:
-    set_addr $I10, rxscan1185_loop
-    rx1181_cur."!mark_push"(0, rx1181_pos, $I10)
-  rxscan1185_done:
-.annotate "line", 507
+.sub "infix:sym<?? !!>"  :subid("303_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1184_tgt
+    .local int rx1184_pos
+    .local int rx1184_off
+    .local int rx1184_eos
+    .local int rx1184_rep
+    .local pmc rx1184_cur
+    (rx1184_cur, rx1184_pos, rx1184_tgt) = self."!cursor_start"()
+    rx1184_cur."!cursor_debug"("START ", "infix:sym<?? !!>")
+    .lex unicode:"$\x{a2}", rx1184_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1184_eos, rx1184_tgt
+    set rx1184_off, 0
+    lt rx1184_pos, 2, rx1184_start
+    sub rx1184_off, rx1184_pos, 1
+    substr rx1184_tgt, rx1184_tgt, rx1184_off
+  rx1184_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1188_done
+    goto rxscan1188_scan
+  rxscan1188_loop:
+    ($P10) = rx1184_cur."from"()
+    inc $P10
+    set rx1184_pos, $P10
+    ge rx1184_pos, rx1184_eos, rxscan1188_done
+  rxscan1188_scan:
+    set_addr $I10, rxscan1188_loop
+    rx1184_cur."!mark_push"(0, rx1184_pos, $I10)
+  rxscan1188_done:
+.annotate "line", 511
   # rx literal  "??"
-    add $I11, rx1181_pos, 2
-    gt $I11, rx1181_eos, rx1181_fail
-    sub $I11, rx1181_pos, rx1181_off
-    substr $S10, rx1181_tgt, $I11, 2
-    ne $S10, "??", rx1181_fail
-    add rx1181_pos, 2
-.annotate "line", 508
-  # rx subrule "ws" subtype=method negate=
-    rx1181_cur."!cursor_pos"(rx1181_pos)
-    $P10 = rx1181_cur."ws"()
-    unless $P10, rx1181_fail
-    rx1181_pos = $P10."pos"()
-.annotate "line", 509
+    add $I11, rx1184_pos, 2
+    gt $I11, rx1184_eos, rx1184_fail
+    sub $I11, rx1184_pos, rx1184_off
+    substr $S10, rx1184_tgt, $I11, 2
+    ne $S10, "??", rx1184_fail
+    add rx1184_pos, 2
+.annotate "line", 512
+  # rx subrule "ws" subtype=method negate=
+    rx1184_cur."!cursor_pos"(rx1184_pos)
+    $P10 = rx1184_cur."ws"()
+    unless $P10, rx1184_fail
+    rx1184_pos = $P10."pos"()
+.annotate "line", 513
   # rx subrule "EXPR" subtype=capture negate=
-    rx1181_cur."!cursor_pos"(rx1181_pos)
-    $P10 = rx1181_cur."EXPR"("i=")
-    unless $P10, rx1181_fail
-    rx1181_cur."!mark_push"(0, -1, 0, $P10)
+    rx1184_cur."!cursor_pos"(rx1184_pos)
+    $P10 = rx1184_cur."EXPR"("i=")
+    unless $P10, rx1184_fail
+    rx1184_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx1181_pos = $P10."pos"()
-.annotate "line", 510
+    rx1184_pos = $P10."pos"()
+.annotate "line", 514
   # rx literal  "!!"
-    add $I11, rx1181_pos, 2
-    gt $I11, rx1181_eos, rx1181_fail
-    sub $I11, rx1181_pos, rx1181_off
-    substr $S10, rx1181_tgt, $I11, 2
-    ne $S10, "!!", rx1181_fail
-    add rx1181_pos, 2
-.annotate "line", 511
+    add $I11, rx1184_pos, 2
+    gt $I11, rx1184_eos, rx1184_fail
+    sub $I11, rx1184_pos, rx1184_off
+    substr $S10, rx1184_tgt, $I11, 2
+    ne $S10, "!!", rx1184_fail
+    add rx1184_pos, 2
+.annotate "line", 515
   # rx subrule "O" subtype=capture negate=
-    rx1181_cur."!cursor_pos"(rx1181_pos)
-    $P10 = rx1181_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
-    unless $P10, rx1181_fail
-    rx1181_cur."!mark_push"(0, -1, 0, $P10)
+    rx1184_cur."!cursor_pos"(rx1184_pos)
+    $P10 = rx1184_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
+    unless $P10, rx1184_fail
+    rx1184_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1181_pos = $P10."pos"()
-.annotate "line", 506
+    rx1184_pos = $P10."pos"()
+.annotate "line", 510
   # rx pass
-    rx1181_cur."!cursor_pass"(rx1181_pos, "infix:sym<?? !!>")
-    rx1181_cur."!cursor_debug"("PASS  ", "infix:sym<?? !!>", " at pos=", rx1181_pos)
-    .return (rx1181_cur)
-  rx1181_fail:
-.annotate "line", 417
-    (rx1181_rep, rx1181_pos, $I10, $P10) = rx1181_cur."!mark_fail"(0)
-    lt rx1181_pos, -1, rx1181_done
-    eq rx1181_pos, -1, rx1181_fail
+    rx1184_cur."!cursor_pass"(rx1184_pos, "infix:sym<?? !!>")
+    rx1184_cur."!cursor_debug"("PASS  ", "infix:sym<?? !!>", " at pos=", rx1184_pos)
+    .return (rx1184_cur)
+  rx1184_fail:
+.annotate "line", 421
+    (rx1184_rep, rx1184_pos, $I10, $P10) = rx1184_cur."!mark_fail"(0)
+    lt rx1184_pos, -1, rx1184_done
+    eq rx1184_pos, -1, rx1184_fail
     jump $I10
-  rx1181_done:
-    rx1181_cur."!cursor_fail"()
-    rx1181_cur."!cursor_debug"("FAIL  ", "infix:sym<?? !!>")
-    .return (rx1181_cur)
+  rx1184_done:
+    rx1184_cur."!cursor_fail"()
+    rx1184_cur."!cursor_debug"("FAIL  ", "infix:sym<?? !!>")
+    .return (rx1184_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<?? !!>"  :subid("304_1267204702.05125") :method
-.annotate "line", 417
-    $P1183 = self."!PREFIX__!subrule"("", "??")
-    new $P1184, "ResizablePMCArray"
-    push $P1184, $P1183
-    .return ($P1184)
+.sub "!PREFIX__infix:sym<?? !!>"  :subid("304_1271336396.90314") :method
+.annotate "line", 421
+    $P1186 = self."!PREFIX__!subrule"("", "??")
+    new $P1187, "ResizablePMCArray"
+    push $P1187, $P1186
+    .return ($P1187)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=>"  :subid("305_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1187_tgt
-    .local int rx1187_pos
-    .local int rx1187_off
-    .local int rx1187_eos
-    .local int rx1187_rep
-    .local pmc rx1187_cur
-    (rx1187_cur, rx1187_pos, rx1187_tgt) = self."!cursor_start"()
-    rx1187_cur."!cursor_debug"("START ", "infix:sym<=>")
-    .lex unicode:"$\x{a2}", rx1187_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1187_eos, rx1187_tgt
-    set rx1187_off, 0
-    lt rx1187_pos, 2, rx1187_start
-    sub rx1187_off, rx1187_pos, 1
-    substr rx1187_tgt, rx1187_tgt, rx1187_off
-  rx1187_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1191_done
-    goto rxscan1191_scan
-  rxscan1191_loop:
-    ($P10) = rx1187_cur."from"()
-    inc $P10
-    set rx1187_pos, $P10
-    ge rx1187_pos, rx1187_eos, rxscan1191_done
-  rxscan1191_scan:
-    set_addr $I10, rxscan1191_loop
-    rx1187_cur."!mark_push"(0, rx1187_pos, $I10)
-  rxscan1191_done:
-.annotate "line", 515
+.sub "infix:sym<=>"  :subid("305_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1190_tgt
+    .local int rx1190_pos
+    .local int rx1190_off
+    .local int rx1190_eos
+    .local int rx1190_rep
+    .local pmc rx1190_cur
+    (rx1190_cur, rx1190_pos, rx1190_tgt) = self."!cursor_start"()
+    rx1190_cur."!cursor_debug"("START ", "infix:sym<=>")
+    .lex unicode:"$\x{a2}", rx1190_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1190_eos, rx1190_tgt
+    set rx1190_off, 0
+    lt rx1190_pos, 2, rx1190_start
+    sub rx1190_off, rx1190_pos, 1
+    substr rx1190_tgt, rx1190_tgt, rx1190_off
+  rx1190_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1194_done
+    goto rxscan1194_scan
+  rxscan1194_loop:
+    ($P10) = rx1190_cur."from"()
+    inc $P10
+    set rx1190_pos, $P10
+    ge rx1190_pos, rx1190_eos, rxscan1194_done
+  rxscan1194_scan:
+    set_addr $I10, rxscan1194_loop
+    rx1190_cur."!mark_push"(0, rx1190_pos, $I10)
+  rxscan1194_done:
+.annotate "line", 519
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1192_fail
-    rx1187_cur."!mark_push"(0, rx1187_pos, $I10)
+    set_addr $I10, rxcap_1195_fail
+    rx1190_cur."!mark_push"(0, rx1190_pos, $I10)
   # rx literal  "="
-    add $I11, rx1187_pos, 1
-    gt $I11, rx1187_eos, rx1187_fail
-    sub $I11, rx1187_pos, rx1187_off
-    substr $S10, rx1187_tgt, $I11, 1
-    ne $S10, "=", rx1187_fail
-    add rx1187_pos, 1
-    set_addr $I10, rxcap_1192_fail
-    ($I12, $I11) = rx1187_cur."!mark_peek"($I10)
-    rx1187_cur."!cursor_pos"($I11)
-    ($P10) = rx1187_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1187_pos, "")
-    rx1187_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1190_pos, 1
+    gt $I11, rx1190_eos, rx1190_fail
+    sub $I11, rx1190_pos, rx1190_off
+    substr $S10, rx1190_tgt, $I11, 1
+    ne $S10, "=", rx1190_fail
+    add rx1190_pos, 1
+    set_addr $I10, rxcap_1195_fail
+    ($I12, $I11) = rx1190_cur."!mark_peek"($I10)
+    rx1190_cur."!cursor_pos"($I11)
+    ($P10) = rx1190_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1190_pos, "")
+    rx1190_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1192_done
-  rxcap_1192_fail:
-    goto rx1187_fail
-  rxcap_1192_done:
+    goto rxcap_1195_done
+  rxcap_1195_fail:
+    goto rx1190_fail
+  rxcap_1195_done:
   # rx subrule "panic" subtype=method negate=
-    rx1187_cur."!cursor_pos"(rx1187_pos)
-    $P10 = rx1187_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
-    unless $P10, rx1187_fail
-    rx1187_pos = $P10."pos"()
-.annotate "line", 514
+    rx1190_cur."!cursor_pos"(rx1190_pos)
+    $P10 = rx1190_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
+    unless $P10, rx1190_fail
+    rx1190_pos = $P10."pos"()
+.annotate "line", 518
   # rx pass
-    rx1187_cur."!cursor_pass"(rx1187_pos, "infix:sym<=>")
-    rx1187_cur."!cursor_debug"("PASS  ", "infix:sym<=>", " at pos=", rx1187_pos)
-    .return (rx1187_cur)
-  rx1187_fail:
-.annotate "line", 417
-    (rx1187_rep, rx1187_pos, $I10, $P10) = rx1187_cur."!mark_fail"(0)
-    lt rx1187_pos, -1, rx1187_done
-    eq rx1187_pos, -1, rx1187_fail
+    rx1190_cur."!cursor_pass"(rx1190_pos, "infix:sym<=>")
+    rx1190_cur."!cursor_debug"("PASS  ", "infix:sym<=>", " at pos=", rx1190_pos)
+    .return (rx1190_cur)
+  rx1190_fail:
+.annotate "line", 421
+    (rx1190_rep, rx1190_pos, $I10, $P10) = rx1190_cur."!mark_fail"(0)
+    lt rx1190_pos, -1, rx1190_done
+    eq rx1190_pos, -1, rx1190_fail
     jump $I10
-  rx1187_done:
-    rx1187_cur."!cursor_fail"()
-    rx1187_cur."!cursor_debug"("FAIL  ", "infix:sym<=>")
-    .return (rx1187_cur)
+  rx1190_done:
+    rx1190_cur."!cursor_fail"()
+    rx1190_cur."!cursor_debug"("FAIL  ", "infix:sym<=>")
+    .return (rx1190_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=>"  :subid("306_1267204702.05125") :method
-.annotate "line", 417
-    $P1189 = self."!PREFIX__!subrule"("", "=")
-    new $P1190, "ResizablePMCArray"
-    push $P1190, $P1189
-    .return ($P1190)
+.sub "!PREFIX__infix:sym<=>"  :subid("306_1271336396.90314") :method
+.annotate "line", 421
+    $P1192 = self."!PREFIX__!subrule"("", "=")
+    new $P1193, "ResizablePMCArray"
+    push $P1193, $P1192
+    .return ($P1193)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<:=>"  :subid("307_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1194_tgt
-    .local int rx1194_pos
-    .local int rx1194_off
-    .local int rx1194_eos
-    .local int rx1194_rep
-    .local pmc rx1194_cur
-    (rx1194_cur, rx1194_pos, rx1194_tgt) = self."!cursor_start"()
-    rx1194_cur."!cursor_debug"("START ", "infix:sym<:=>")
-    .lex unicode:"$\x{a2}", rx1194_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1194_eos, rx1194_tgt
-    set rx1194_off, 0
-    lt rx1194_pos, 2, rx1194_start
-    sub rx1194_off, rx1194_pos, 1
-    substr rx1194_tgt, rx1194_tgt, rx1194_off
-  rx1194_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1198_done
-    goto rxscan1198_scan
-  rxscan1198_loop:
-    ($P10) = rx1194_cur."from"()
-    inc $P10
-    set rx1194_pos, $P10
-    ge rx1194_pos, rx1194_eos, rxscan1198_done
-  rxscan1198_scan:
-    set_addr $I10, rxscan1198_loop
-    rx1194_cur."!mark_push"(0, rx1194_pos, $I10)
-  rxscan1198_done:
-.annotate "line", 517
+.sub "infix:sym<:=>"  :subid("307_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1197_tgt
+    .local int rx1197_pos
+    .local int rx1197_off
+    .local int rx1197_eos
+    .local int rx1197_rep
+    .local pmc rx1197_cur
+    (rx1197_cur, rx1197_pos, rx1197_tgt) = self."!cursor_start"()
+    rx1197_cur."!cursor_debug"("START ", "infix:sym<:=>")
+    .lex unicode:"$\x{a2}", rx1197_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1197_eos, rx1197_tgt
+    set rx1197_off, 0
+    lt rx1197_pos, 2, rx1197_start
+    sub rx1197_off, rx1197_pos, 1
+    substr rx1197_tgt, rx1197_tgt, rx1197_off
+  rx1197_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1201_done
+    goto rxscan1201_scan
+  rxscan1201_loop:
+    ($P10) = rx1197_cur."from"()
+    inc $P10
+    set rx1197_pos, $P10
+    ge rx1197_pos, rx1197_eos, rxscan1201_done
+  rxscan1201_scan:
+    set_addr $I10, rxscan1201_loop
+    rx1197_cur."!mark_push"(0, rx1197_pos, $I10)
+  rxscan1201_done:
+.annotate "line", 521
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1199_fail
-    rx1194_cur."!mark_push"(0, rx1194_pos, $I10)
+    set_addr $I10, rxcap_1202_fail
+    rx1197_cur."!mark_push"(0, rx1197_pos, $I10)
   # rx literal  ":="
-    add $I11, rx1194_pos, 2
-    gt $I11, rx1194_eos, rx1194_fail
-    sub $I11, rx1194_pos, rx1194_off
-    substr $S10, rx1194_tgt, $I11, 2
-    ne $S10, ":=", rx1194_fail
-    add rx1194_pos, 2
-    set_addr $I10, rxcap_1199_fail
-    ($I12, $I11) = rx1194_cur."!mark_peek"($I10)
-    rx1194_cur."!cursor_pos"($I11)
-    ($P10) = rx1194_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1194_pos, "")
-    rx1194_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1197_pos, 2
+    gt $I11, rx1197_eos, rx1197_fail
+    sub $I11, rx1197_pos, rx1197_off
+    substr $S10, rx1197_tgt, $I11, 2
+    ne $S10, ":=", rx1197_fail
+    add rx1197_pos, 2
+    set_addr $I10, rxcap_1202_fail
+    ($I12, $I11) = rx1197_cur."!mark_peek"($I10)
+    rx1197_cur."!cursor_pos"($I11)
+    ($P10) = rx1197_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1197_pos, "")
+    rx1197_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1199_done
-  rxcap_1199_fail:
-    goto rx1194_fail
-  rxcap_1199_done:
+    goto rxcap_1202_done
+  rxcap_1202_fail:
+    goto rx1197_fail
+  rxcap_1202_done:
   # rx subrule "O" subtype=capture negate=
-    rx1194_cur."!cursor_pos"(rx1194_pos)
-    $P10 = rx1194_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1194_fail
-    rx1194_cur."!mark_push"(0, -1, 0, $P10)
+    rx1197_cur."!cursor_pos"(rx1197_pos)
+    $P10 = rx1197_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1197_fail
+    rx1197_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1194_pos = $P10."pos"()
+    rx1197_pos = $P10."pos"()
   # rx pass
-    rx1194_cur."!cursor_pass"(rx1194_pos, "infix:sym<:=>")
-    rx1194_cur."!cursor_debug"("PASS  ", "infix:sym<:=>", " at pos=", rx1194_pos)
-    .return (rx1194_cur)
-  rx1194_fail:
-.annotate "line", 417
-    (rx1194_rep, rx1194_pos, $I10, $P10) = rx1194_cur."!mark_fail"(0)
-    lt rx1194_pos, -1, rx1194_done
-    eq rx1194_pos, -1, rx1194_fail
+    rx1197_cur."!cursor_pass"(rx1197_pos, "infix:sym<:=>")
+    rx1197_cur."!cursor_debug"("PASS  ", "infix:sym<:=>", " at pos=", rx1197_pos)
+    .return (rx1197_cur)
+  rx1197_fail:
+.annotate "line", 421
+    (rx1197_rep, rx1197_pos, $I10, $P10) = rx1197_cur."!mark_fail"(0)
+    lt rx1197_pos, -1, rx1197_done
+    eq rx1197_pos, -1, rx1197_fail
     jump $I10
-  rx1194_done:
-    rx1194_cur."!cursor_fail"()
-    rx1194_cur."!cursor_debug"("FAIL  ", "infix:sym<:=>")
-    .return (rx1194_cur)
+  rx1197_done:
+    rx1197_cur."!cursor_fail"()
+    rx1197_cur."!cursor_debug"("FAIL  ", "infix:sym<:=>")
+    .return (rx1197_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<:=>"  :subid("308_1267204702.05125") :method
-.annotate "line", 417
-    $P1196 = self."!PREFIX__!subrule"("O", ":=")
-    new $P1197, "ResizablePMCArray"
-    push $P1197, $P1196
-    .return ($P1197)
+.sub "!PREFIX__infix:sym<:=>"  :subid("308_1271336396.90314") :method
+.annotate "line", 421
+    $P1199 = self."!PREFIX__!subrule"("O", ":=")
+    new $P1200, "ResizablePMCArray"
+    push $P1200, $P1199
+    .return ($P1200)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<::=>"  :subid("309_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1201_tgt
-    .local int rx1201_pos
-    .local int rx1201_off
-    .local int rx1201_eos
-    .local int rx1201_rep
-    .local pmc rx1201_cur
-    (rx1201_cur, rx1201_pos, rx1201_tgt) = self."!cursor_start"()
-    rx1201_cur."!cursor_debug"("START ", "infix:sym<::=>")
-    .lex unicode:"$\x{a2}", rx1201_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1201_eos, rx1201_tgt
-    set rx1201_off, 0
-    lt rx1201_pos, 2, rx1201_start
-    sub rx1201_off, rx1201_pos, 1
-    substr rx1201_tgt, rx1201_tgt, rx1201_off
-  rx1201_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1205_done
-    goto rxscan1205_scan
-  rxscan1205_loop:
-    ($P10) = rx1201_cur."from"()
-    inc $P10
-    set rx1201_pos, $P10
-    ge rx1201_pos, rx1201_eos, rxscan1205_done
-  rxscan1205_scan:
-    set_addr $I10, rxscan1205_loop
-    rx1201_cur."!mark_push"(0, rx1201_pos, $I10)
-  rxscan1205_done:
-.annotate "line", 518
+.sub "infix:sym<::=>"  :subid("309_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1204_tgt
+    .local int rx1204_pos
+    .local int rx1204_off
+    .local int rx1204_eos
+    .local int rx1204_rep
+    .local pmc rx1204_cur
+    (rx1204_cur, rx1204_pos, rx1204_tgt) = self."!cursor_start"()
+    rx1204_cur."!cursor_debug"("START ", "infix:sym<::=>")
+    .lex unicode:"$\x{a2}", rx1204_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1204_eos, rx1204_tgt
+    set rx1204_off, 0
+    lt rx1204_pos, 2, rx1204_start
+    sub rx1204_off, rx1204_pos, 1
+    substr rx1204_tgt, rx1204_tgt, rx1204_off
+  rx1204_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1208_done
+    goto rxscan1208_scan
+  rxscan1208_loop:
+    ($P10) = rx1204_cur."from"()
+    inc $P10
+    set rx1204_pos, $P10
+    ge rx1204_pos, rx1204_eos, rxscan1208_done
+  rxscan1208_scan:
+    set_addr $I10, rxscan1208_loop
+    rx1204_cur."!mark_push"(0, rx1204_pos, $I10)
+  rxscan1208_done:
+.annotate "line", 522
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1206_fail
-    rx1201_cur."!mark_push"(0, rx1201_pos, $I10)
+    set_addr $I10, rxcap_1209_fail
+    rx1204_cur."!mark_push"(0, rx1204_pos, $I10)
   # rx literal  "::="
-    add $I11, rx1201_pos, 3
-    gt $I11, rx1201_eos, rx1201_fail
-    sub $I11, rx1201_pos, rx1201_off
-    substr $S10, rx1201_tgt, $I11, 3
-    ne $S10, "::=", rx1201_fail
-    add rx1201_pos, 3
-    set_addr $I10, rxcap_1206_fail
-    ($I12, $I11) = rx1201_cur."!mark_peek"($I10)
-    rx1201_cur."!cursor_pos"($I11)
-    ($P10) = rx1201_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1201_pos, "")
-    rx1201_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1204_pos, 3
+    gt $I11, rx1204_eos, rx1204_fail
+    sub $I11, rx1204_pos, rx1204_off
+    substr $S10, rx1204_tgt, $I11, 3
+    ne $S10, "::=", rx1204_fail
+    add rx1204_pos, 3
+    set_addr $I10, rxcap_1209_fail
+    ($I12, $I11) = rx1204_cur."!mark_peek"($I10)
+    rx1204_cur."!cursor_pos"($I11)
+    ($P10) = rx1204_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1204_pos, "")
+    rx1204_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1206_done
-  rxcap_1206_fail:
-    goto rx1201_fail
-  rxcap_1206_done:
+    goto rxcap_1209_done
+  rxcap_1209_fail:
+    goto rx1204_fail
+  rxcap_1209_done:
   # rx subrule "O" subtype=capture negate=
-    rx1201_cur."!cursor_pos"(rx1201_pos)
-    $P10 = rx1201_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1201_fail
-    rx1201_cur."!mark_push"(0, -1, 0, $P10)
+    rx1204_cur."!cursor_pos"(rx1204_pos)
+    $P10 = rx1204_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1204_fail
+    rx1204_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1201_pos = $P10."pos"()
+    rx1204_pos = $P10."pos"()
   # rx pass
-    rx1201_cur."!cursor_pass"(rx1201_pos, "infix:sym<::=>")
-    rx1201_cur."!cursor_debug"("PASS  ", "infix:sym<::=>", " at pos=", rx1201_pos)
-    .return (rx1201_cur)
-  rx1201_fail:
-.annotate "line", 417
-    (rx1201_rep, rx1201_pos, $I10, $P10) = rx1201_cur."!mark_fail"(0)
-    lt rx1201_pos, -1, rx1201_done
-    eq rx1201_pos, -1, rx1201_fail
+    rx1204_cur."!cursor_pass"(rx1204_pos, "infix:sym<::=>")
+    rx1204_cur."!cursor_debug"("PASS  ", "infix:sym<::=>", " at pos=", rx1204_pos)
+    .return (rx1204_cur)
+  rx1204_fail:
+.annotate "line", 421
+    (rx1204_rep, rx1204_pos, $I10, $P10) = rx1204_cur."!mark_fail"(0)
+    lt rx1204_pos, -1, rx1204_done
+    eq rx1204_pos, -1, rx1204_fail
     jump $I10
-  rx1201_done:
-    rx1201_cur."!cursor_fail"()
-    rx1201_cur."!cursor_debug"("FAIL  ", "infix:sym<::=>")
-    .return (rx1201_cur)
+  rx1204_done:
+    rx1204_cur."!cursor_fail"()
+    rx1204_cur."!cursor_debug"("FAIL  ", "infix:sym<::=>")
+    .return (rx1204_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<::=>"  :subid("310_1267204702.05125") :method
-.annotate "line", 417
-    $P1203 = self."!PREFIX__!subrule"("O", "::=")
-    new $P1204, "ResizablePMCArray"
-    push $P1204, $P1203
-    .return ($P1204)
+.sub "!PREFIX__infix:sym<::=>"  :subid("310_1271336396.90314") :method
+.annotate "line", 421
+    $P1206 = self."!PREFIX__!subrule"("O", "::=")
+    new $P1207, "ResizablePMCArray"
+    push $P1207, $P1206
+    .return ($P1207)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<,>"  :subid("311_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1208_tgt
-    .local int rx1208_pos
-    .local int rx1208_off
-    .local int rx1208_eos
-    .local int rx1208_rep
-    .local pmc rx1208_cur
-    (rx1208_cur, rx1208_pos, rx1208_tgt) = self."!cursor_start"()
-    rx1208_cur."!cursor_debug"("START ", "infix:sym<,>")
-    .lex unicode:"$\x{a2}", rx1208_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1208_eos, rx1208_tgt
-    set rx1208_off, 0
-    lt rx1208_pos, 2, rx1208_start
-    sub rx1208_off, rx1208_pos, 1
-    substr rx1208_tgt, rx1208_tgt, rx1208_off
-  rx1208_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1212_done
-    goto rxscan1212_scan
-  rxscan1212_loop:
-    ($P10) = rx1208_cur."from"()
-    inc $P10
-    set rx1208_pos, $P10
-    ge rx1208_pos, rx1208_eos, rxscan1212_done
-  rxscan1212_scan:
-    set_addr $I10, rxscan1212_loop
-    rx1208_cur."!mark_push"(0, rx1208_pos, $I10)
-  rxscan1212_done:
-.annotate "line", 520
+.sub "infix:sym<,>"  :subid("311_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1211_tgt
+    .local int rx1211_pos
+    .local int rx1211_off
+    .local int rx1211_eos
+    .local int rx1211_rep
+    .local pmc rx1211_cur
+    (rx1211_cur, rx1211_pos, rx1211_tgt) = self."!cursor_start"()
+    rx1211_cur."!cursor_debug"("START ", "infix:sym<,>")
+    .lex unicode:"$\x{a2}", rx1211_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1211_eos, rx1211_tgt
+    set rx1211_off, 0
+    lt rx1211_pos, 2, rx1211_start
+    sub rx1211_off, rx1211_pos, 1
+    substr rx1211_tgt, rx1211_tgt, rx1211_off
+  rx1211_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1215_done
+    goto rxscan1215_scan
+  rxscan1215_loop:
+    ($P10) = rx1211_cur."from"()
+    inc $P10
+    set rx1211_pos, $P10
+    ge rx1211_pos, rx1211_eos, rxscan1215_done
+  rxscan1215_scan:
+    set_addr $I10, rxscan1215_loop
+    rx1211_cur."!mark_push"(0, rx1211_pos, $I10)
+  rxscan1215_done:
+.annotate "line", 524
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1213_fail
-    rx1208_cur."!mark_push"(0, rx1208_pos, $I10)
+    set_addr $I10, rxcap_1216_fail
+    rx1211_cur."!mark_push"(0, rx1211_pos, $I10)
   # rx literal  ","
-    add $I11, rx1208_pos, 1
-    gt $I11, rx1208_eos, rx1208_fail
-    sub $I11, rx1208_pos, rx1208_off
-    substr $S10, rx1208_tgt, $I11, 1
-    ne $S10, ",", rx1208_fail
-    add rx1208_pos, 1
-    set_addr $I10, rxcap_1213_fail
-    ($I12, $I11) = rx1208_cur."!mark_peek"($I10)
-    rx1208_cur."!cursor_pos"($I11)
-    ($P10) = rx1208_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1208_pos, "")
-    rx1208_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1211_pos, 1
+    gt $I11, rx1211_eos, rx1211_fail
+    sub $I11, rx1211_pos, rx1211_off
+    substr $S10, rx1211_tgt, $I11, 1
+    ne $S10, ",", rx1211_fail
+    add rx1211_pos, 1
+    set_addr $I10, rxcap_1216_fail
+    ($I12, $I11) = rx1211_cur."!mark_peek"($I10)
+    rx1211_cur."!cursor_pos"($I11)
+    ($P10) = rx1211_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1211_pos, "")
+    rx1211_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1213_done
-  rxcap_1213_fail:
-    goto rx1208_fail
-  rxcap_1213_done:
+    goto rxcap_1216_done
+  rxcap_1216_fail:
+    goto rx1211_fail
+  rxcap_1216_done:
   # rx subrule "O" subtype=capture negate=
-    rx1208_cur."!cursor_pos"(rx1208_pos)
-    $P10 = rx1208_cur."O"("%comma, :pasttype<list>")
-    unless $P10, rx1208_fail
-    rx1208_cur."!mark_push"(0, -1, 0, $P10)
+    rx1211_cur."!cursor_pos"(rx1211_pos)
+    $P10 = rx1211_cur."O"("%comma, :pasttype<list>")
+    unless $P10, rx1211_fail
+    rx1211_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1208_pos = $P10."pos"()
+    rx1211_pos = $P10."pos"()
   # rx pass
-    rx1208_cur."!cursor_pass"(rx1208_pos, "infix:sym<,>")
-    rx1208_cur."!cursor_debug"("PASS  ", "infix:sym<,>", " at pos=", rx1208_pos)
-    .return (rx1208_cur)
-  rx1208_fail:
-.annotate "line", 417
-    (rx1208_rep, rx1208_pos, $I10, $P10) = rx1208_cur."!mark_fail"(0)
-    lt rx1208_pos, -1, rx1208_done
-    eq rx1208_pos, -1, rx1208_fail
+    rx1211_cur."!cursor_pass"(rx1211_pos, "infix:sym<,>")
+    rx1211_cur."!cursor_debug"("PASS  ", "infix:sym<,>", " at pos=", rx1211_pos)
+    .return (rx1211_cur)
+  rx1211_fail:
+.annotate "line", 421
+    (rx1211_rep, rx1211_pos, $I10, $P10) = rx1211_cur."!mark_fail"(0)
+    lt rx1211_pos, -1, rx1211_done
+    eq rx1211_pos, -1, rx1211_fail
     jump $I10
-  rx1208_done:
-    rx1208_cur."!cursor_fail"()
-    rx1208_cur."!cursor_debug"("FAIL  ", "infix:sym<,>")
-    .return (rx1208_cur)
+  rx1211_done:
+    rx1211_cur."!cursor_fail"()
+    rx1211_cur."!cursor_debug"("FAIL  ", "infix:sym<,>")
+    .return (rx1211_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<,>"  :subid("312_1267204702.05125") :method
-.annotate "line", 417
-    $P1210 = self."!PREFIX__!subrule"("O", ",")
-    new $P1211, "ResizablePMCArray"
-    push $P1211, $P1210
-    .return ($P1211)
+.sub "!PREFIX__infix:sym<,>"  :subid("312_1271336396.90314") :method
+.annotate "line", 421
+    $P1213 = self."!PREFIX__!subrule"("O", ",")
+    new $P1214, "ResizablePMCArray"
+    push $P1214, $P1213
+    .return ($P1214)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<return>"  :subid("313_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1215_tgt
-    .local int rx1215_pos
-    .local int rx1215_off
-    .local int rx1215_eos
-    .local int rx1215_rep
-    .local pmc rx1215_cur
-    (rx1215_cur, rx1215_pos, rx1215_tgt) = self."!cursor_start"()
-    rx1215_cur."!cursor_debug"("START ", "prefix:sym<return>")
-    .lex unicode:"$\x{a2}", rx1215_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1215_eos, rx1215_tgt
-    set rx1215_off, 0
-    lt rx1215_pos, 2, rx1215_start
-    sub rx1215_off, rx1215_pos, 1
-    substr rx1215_tgt, rx1215_tgt, rx1215_off
-  rx1215_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1218_done
-    goto rxscan1218_scan
-  rxscan1218_loop:
-    ($P10) = rx1215_cur."from"()
-    inc $P10
-    set rx1215_pos, $P10
-    ge rx1215_pos, rx1215_eos, rxscan1218_done
-  rxscan1218_scan:
-    set_addr $I10, rxscan1218_loop
-    rx1215_cur."!mark_push"(0, rx1215_pos, $I10)
-  rxscan1218_done:
-.annotate "line", 522
+.sub "prefix:sym<return>"  :subid("313_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1218_tgt
+    .local int rx1218_pos
+    .local int rx1218_off
+    .local int rx1218_eos
+    .local int rx1218_rep
+    .local pmc rx1218_cur
+    (rx1218_cur, rx1218_pos, rx1218_tgt) = self."!cursor_start"()
+    rx1218_cur."!cursor_debug"("START ", "prefix:sym<return>")
+    .lex unicode:"$\x{a2}", rx1218_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1218_eos, rx1218_tgt
+    set rx1218_off, 0
+    lt rx1218_pos, 2, rx1218_start
+    sub rx1218_off, rx1218_pos, 1
+    substr rx1218_tgt, rx1218_tgt, rx1218_off
+  rx1218_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1221_done
+    goto rxscan1221_scan
+  rxscan1221_loop:
+    ($P10) = rx1218_cur."from"()
+    inc $P10
+    set rx1218_pos, $P10
+    ge rx1218_pos, rx1218_eos, rxscan1221_done
+  rxscan1221_scan:
+    set_addr $I10, rxscan1221_loop
+    rx1218_cur."!mark_push"(0, rx1218_pos, $I10)
+  rxscan1221_done:
+.annotate "line", 526
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1219_fail
-    rx1215_cur."!mark_push"(0, rx1215_pos, $I10)
+    set_addr $I10, rxcap_1222_fail
+    rx1218_cur."!mark_push"(0, rx1218_pos, $I10)
   # rx literal  "return"
-    add $I11, rx1215_pos, 6
-    gt $I11, rx1215_eos, rx1215_fail
-    sub $I11, rx1215_pos, rx1215_off
-    substr $S10, rx1215_tgt, $I11, 6
-    ne $S10, "return", rx1215_fail
-    add rx1215_pos, 6
-    set_addr $I10, rxcap_1219_fail
-    ($I12, $I11) = rx1215_cur."!mark_peek"($I10)
-    rx1215_cur."!cursor_pos"($I11)
-    ($P10) = rx1215_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1215_pos, "")
-    rx1215_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1218_pos, 6
+    gt $I11, rx1218_eos, rx1218_fail
+    sub $I11, rx1218_pos, rx1218_off
+    substr $S10, rx1218_tgt, $I11, 6
+    ne $S10, "return", rx1218_fail
+    add rx1218_pos, 6
+    set_addr $I10, rxcap_1222_fail
+    ($I12, $I11) = rx1218_cur."!mark_peek"($I10)
+    rx1218_cur."!cursor_pos"($I11)
+    ($P10) = rx1218_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1218_pos, "")
+    rx1218_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1219_done
-  rxcap_1219_fail:
-    goto rx1215_fail
-  rxcap_1219_done:
+    goto rxcap_1222_done
+  rxcap_1222_fail:
+    goto rx1218_fail
+  rxcap_1222_done:
   # rx charclass s
-    ge rx1215_pos, rx1215_eos, rx1215_fail
-    sub $I10, rx1215_pos, rx1215_off
-    is_cclass $I11, 32, rx1215_tgt, $I10
-    unless $I11, rx1215_fail
-    inc rx1215_pos
+    ge rx1218_pos, rx1218_eos, rx1218_fail
+    sub $I10, rx1218_pos, rx1218_off
+    is_cclass $I11, 32, rx1218_tgt, $I10
+    unless $I11, rx1218_fail
+    inc rx1218_pos
   # rx subrule "O" subtype=capture negate=
-    rx1215_cur."!cursor_pos"(rx1215_pos)
-    $P10 = rx1215_cur."O"("%list_prefix, :pasttype<return>")
-    unless $P10, rx1215_fail
-    rx1215_cur."!mark_push"(0, -1, 0, $P10)
+    rx1218_cur."!cursor_pos"(rx1218_pos)
+    $P10 = rx1218_cur."O"("%list_prefix, :pasttype<return>")
+    unless $P10, rx1218_fail
+    rx1218_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1215_pos = $P10."pos"()
+    rx1218_pos = $P10."pos"()
   # rx pass
-    rx1215_cur."!cursor_pass"(rx1215_pos, "prefix:sym<return>")
-    rx1215_cur."!cursor_debug"("PASS  ", "prefix:sym<return>", " at pos=", rx1215_pos)
-    .return (rx1215_cur)
-  rx1215_fail:
-.annotate "line", 417
-    (rx1215_rep, rx1215_pos, $I10, $P10) = rx1215_cur."!mark_fail"(0)
-    lt rx1215_pos, -1, rx1215_done
-    eq rx1215_pos, -1, rx1215_fail
+    rx1218_cur."!cursor_pass"(rx1218_pos, "prefix:sym<return>")
+    rx1218_cur."!cursor_debug"("PASS  ", "prefix:sym<return>", " at pos=", rx1218_pos)
+    .return (rx1218_cur)
+  rx1218_fail:
+.annotate "line", 421
+    (rx1218_rep, rx1218_pos, $I10, $P10) = rx1218_cur."!mark_fail"(0)
+    lt rx1218_pos, -1, rx1218_done
+    eq rx1218_pos, -1, rx1218_fail
     jump $I10
-  rx1215_done:
-    rx1215_cur."!cursor_fail"()
-    rx1215_cur."!cursor_debug"("FAIL  ", "prefix:sym<return>")
-    .return (rx1215_cur)
+  rx1218_done:
+    rx1218_cur."!cursor_fail"()
+    rx1218_cur."!cursor_debug"("FAIL  ", "prefix:sym<return>")
+    .return (rx1218_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<return>"  :subid("314_1267204702.05125") :method
-.annotate "line", 417
-    new $P1217, "ResizablePMCArray"
-    push $P1217, "return"
-    .return ($P1217)
+.sub "!PREFIX__prefix:sym<return>"  :subid("314_1271336396.90314") :method
+.annotate "line", 421
+    new $P1220, "ResizablePMCArray"
+    push $P1220, "return"
+    .return ($P1220)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<make>"  :subid("315_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1221_tgt
-    .local int rx1221_pos
-    .local int rx1221_off
-    .local int rx1221_eos
-    .local int rx1221_rep
-    .local pmc rx1221_cur
-    (rx1221_cur, rx1221_pos, rx1221_tgt) = self."!cursor_start"()
-    rx1221_cur."!cursor_debug"("START ", "prefix:sym<make>")
-    .lex unicode:"$\x{a2}", rx1221_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1221_eos, rx1221_tgt
-    set rx1221_off, 0
-    lt rx1221_pos, 2, rx1221_start
-    sub rx1221_off, rx1221_pos, 1
-    substr rx1221_tgt, rx1221_tgt, rx1221_off
-  rx1221_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1224_done
-    goto rxscan1224_scan
-  rxscan1224_loop:
-    ($P10) = rx1221_cur."from"()
-    inc $P10
-    set rx1221_pos, $P10
-    ge rx1221_pos, rx1221_eos, rxscan1224_done
-  rxscan1224_scan:
-    set_addr $I10, rxscan1224_loop
-    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
-  rxscan1224_done:
-.annotate "line", 523
+.sub "prefix:sym<make>"  :subid("315_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1224_tgt
+    .local int rx1224_pos
+    .local int rx1224_off
+    .local int rx1224_eos
+    .local int rx1224_rep
+    .local pmc rx1224_cur
+    (rx1224_cur, rx1224_pos, rx1224_tgt) = self."!cursor_start"()
+    rx1224_cur."!cursor_debug"("START ", "prefix:sym<make>")
+    .lex unicode:"$\x{a2}", rx1224_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1224_eos, rx1224_tgt
+    set rx1224_off, 0
+    lt rx1224_pos, 2, rx1224_start
+    sub rx1224_off, rx1224_pos, 1
+    substr rx1224_tgt, rx1224_tgt, rx1224_off
+  rx1224_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1227_done
+    goto rxscan1227_scan
+  rxscan1227_loop:
+    ($P10) = rx1224_cur."from"()
+    inc $P10
+    set rx1224_pos, $P10
+    ge rx1224_pos, rx1224_eos, rxscan1227_done
+  rxscan1227_scan:
+    set_addr $I10, rxscan1227_loop
+    rx1224_cur."!mark_push"(0, rx1224_pos, $I10)
+  rxscan1227_done:
+.annotate "line", 527
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1225_fail
-    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
+    set_addr $I10, rxcap_1228_fail
+    rx1224_cur."!mark_push"(0, rx1224_pos, $I10)
   # rx literal  "make"
-    add $I11, rx1221_pos, 4
-    gt $I11, rx1221_eos, rx1221_fail
-    sub $I11, rx1221_pos, rx1221_off
-    substr $S10, rx1221_tgt, $I11, 4
-    ne $S10, "make", rx1221_fail
-    add rx1221_pos, 4
-    set_addr $I10, rxcap_1225_fail
-    ($I12, $I11) = rx1221_cur."!mark_peek"($I10)
-    rx1221_cur."!cursor_pos"($I11)
-    ($P10) = rx1221_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1221_pos, "")
-    rx1221_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1224_pos, 4
+    gt $I11, rx1224_eos, rx1224_fail
+    sub $I11, rx1224_pos, rx1224_off
+    substr $S10, rx1224_tgt, $I11, 4
+    ne $S10, "make", rx1224_fail
+    add rx1224_pos, 4
+    set_addr $I10, rxcap_1228_fail
+    ($I12, $I11) = rx1224_cur."!mark_peek"($I10)
+    rx1224_cur."!cursor_pos"($I11)
+    ($P10) = rx1224_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1224_pos, "")
+    rx1224_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1225_done
-  rxcap_1225_fail:
-    goto rx1221_fail
-  rxcap_1225_done:
+    goto rxcap_1228_done
+  rxcap_1228_fail:
+    goto rx1224_fail
+  rxcap_1228_done:
   # rx charclass s
-    ge rx1221_pos, rx1221_eos, rx1221_fail
-    sub $I10, rx1221_pos, rx1221_off
-    is_cclass $I11, 32, rx1221_tgt, $I10
-    unless $I11, rx1221_fail
-    inc rx1221_pos
+    ge rx1224_pos, rx1224_eos, rx1224_fail
+    sub $I10, rx1224_pos, rx1224_off
+    is_cclass $I11, 32, rx1224_tgt, $I10
+    unless $I11, rx1224_fail
+    inc rx1224_pos
   # rx subrule "O" subtype=capture negate=
-    rx1221_cur."!cursor_pos"(rx1221_pos)
-    $P10 = rx1221_cur."O"("%list_prefix")
-    unless $P10, rx1221_fail
-    rx1221_cur."!mark_push"(0, -1, 0, $P10)
+    rx1224_cur."!cursor_pos"(rx1224_pos)
+    $P10 = rx1224_cur."O"("%list_prefix")
+    unless $P10, rx1224_fail
+    rx1224_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1221_pos = $P10."pos"()
+    rx1224_pos = $P10."pos"()
   # rx pass
-    rx1221_cur."!cursor_pass"(rx1221_pos, "prefix:sym<make>")
-    rx1221_cur."!cursor_debug"("PASS  ", "prefix:sym<make>", " at pos=", rx1221_pos)
-    .return (rx1221_cur)
-  rx1221_fail:
-.annotate "line", 417
-    (rx1221_rep, rx1221_pos, $I10, $P10) = rx1221_cur."!mark_fail"(0)
-    lt rx1221_pos, -1, rx1221_done
-    eq rx1221_pos, -1, rx1221_fail
+    rx1224_cur."!cursor_pass"(rx1224_pos, "prefix:sym<make>")
+    rx1224_cur."!cursor_debug"("PASS  ", "prefix:sym<make>", " at pos=", rx1224_pos)
+    .return (rx1224_cur)
+  rx1224_fail:
+.annotate "line", 421
+    (rx1224_rep, rx1224_pos, $I10, $P10) = rx1224_cur."!mark_fail"(0)
+    lt rx1224_pos, -1, rx1224_done
+    eq rx1224_pos, -1, rx1224_fail
     jump $I10
-  rx1221_done:
-    rx1221_cur."!cursor_fail"()
-    rx1221_cur."!cursor_debug"("FAIL  ", "prefix:sym<make>")
-    .return (rx1221_cur)
+  rx1224_done:
+    rx1224_cur."!cursor_fail"()
+    rx1224_cur."!cursor_debug"("FAIL  ", "prefix:sym<make>")
+    .return (rx1224_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<make>"  :subid("316_1267204702.05125") :method
-.annotate "line", 417
-    new $P1223, "ResizablePMCArray"
-    push $P1223, "make"
-    .return ($P1223)
+.sub "!PREFIX__prefix:sym<make>"  :subid("316_1271336396.90314") :method
+.annotate "line", 421
+    new $P1226, "ResizablePMCArray"
+    push $P1226, "make"
+    .return ($P1226)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "smartmatch"  :subid("317_1267204702.05125") :method :outer("11_1267204702.05125")
-    .param pmc param_1229
-.annotate "line", 525
-    new $P1228, 'ExceptionHandler'
-    set_addr $P1228, control_1227
-    $P1228."handle_types"(58)
-    push_eh $P1228
+.sub "smartmatch"  :subid("317_1271336396.90314") :method :outer("11_1271336396.90314")
+    .param pmc param_1232
+.annotate "line", 529
+    new $P1231, 'ExceptionHandler'
+    set_addr $P1231, control_1230
+    $P1231."handle_types"(58)
+    push_eh $P1231
     .lex "self", self
-    .lex "$/", param_1229
-.annotate "line", 527
-    new $P1230, "Undef"
-    .lex "$t", $P1230
-    find_lex $P1231, "$/"
-    unless_null $P1231, vivify_343
-    $P1231 = root_new ['parrot';'ResizablePMCArray']
+    .lex "$/", param_1232
+.annotate "line", 531
+    new $P1233, "Undef"
+    .lex "$t", $P1233
+    find_lex $P1234, "$/"
+    unless_null $P1234, vivify_343
+    $P1234 = root_new ['parrot';'ResizablePMCArray']
   vivify_343:
-    set $P1232, $P1231[0]
-    unless_null $P1232, vivify_344
-    new $P1232, "Undef"
+    set $P1235, $P1234[0]
+    unless_null $P1235, vivify_344
+    new $P1235, "Undef"
   vivify_344:
-    store_lex "$t", $P1232
-    find_lex $P1233, "$/"
-    unless_null $P1233, vivify_345
-    $P1233 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$t", $P1235
+    find_lex $P1236, "$/"
+    unless_null $P1236, vivify_345
+    $P1236 = root_new ['parrot';'ResizablePMCArray']
   vivify_345:
-    set $P1234, $P1233[1]
-    unless_null $P1234, vivify_346
-    new $P1234, "Undef"
+    set $P1237, $P1236[1]
+    unless_null $P1237, vivify_346
+    new $P1237, "Undef"
   vivify_346:
-    find_lex $P1235, "$/"
-    unless_null $P1235, vivify_347
-    $P1235 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1235
+    find_lex $P1238, "$/"
+    unless_null $P1238, vivify_347
+    $P1238 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1238
   vivify_347:
-    set $P1235[0], $P1234
-    find_lex $P1236, "$t"
-    find_lex $P1237, "$/"
-    unless_null $P1237, vivify_348
-    $P1237 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1237
+    set $P1238[0], $P1237
+    find_lex $P1239, "$t"
+    find_lex $P1240, "$/"
+    unless_null $P1240, vivify_348
+    $P1240 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1240
   vivify_348:
-    set $P1237[1], $P1236
-.annotate "line", 525
-    .return ($P1236)
-  control_1227:
+    set $P1240[1], $P1239
+.annotate "line", 529
+    .return ($P1239)
+  control_1230:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1238, exception, "payload"
-    .return ($P1238)
+    getattribute $P1241, exception, "payload"
+    .return ($P1241)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1239"  :subid("318_1267204702.05125") :outer("11_1267204702.05125")
-.annotate "line", 531
-    .const 'Sub' $P1273 = "329_1267204702.05125" 
-    capture_lex $P1273
-    .const 'Sub' $P1260 = "326_1267204702.05125" 
-    capture_lex $P1260
-    .const 'Sub' $P1255 = "324_1267204702.05125" 
-    capture_lex $P1255
-    .const 'Sub' $P1250 = "322_1267204702.05125" 
-    capture_lex $P1250
-    .const 'Sub' $P1241 = "319_1267204702.05125" 
-    capture_lex $P1241
-    .const 'Sub' $P1273 = "329_1267204702.05125" 
-    capture_lex $P1273
-    .return ($P1273)
+.sub "_block1242"  :subid("318_1271336396.90314") :outer("11_1271336396.90314")
+.annotate "line", 535
+    .const 'Sub' $P1276 = "329_1271336396.90314" 
+    capture_lex $P1276
+    .const 'Sub' $P1263 = "326_1271336396.90314" 
+    capture_lex $P1263
+    .const 'Sub' $P1258 = "324_1271336396.90314" 
+    capture_lex $P1258
+    .const 'Sub' $P1253 = "322_1271336396.90314" 
+    capture_lex $P1253
+    .const 'Sub' $P1244 = "319_1271336396.90314" 
+    capture_lex $P1244
+    .const 'Sub' $P1276 = "329_1271336396.90314" 
+    capture_lex $P1276
+    .return ($P1276)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<:my>"  :subid("319_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .const 'Sub' $P1247 = "321_1267204702.05125" 
-    capture_lex $P1247
-    .local string rx1242_tgt
-    .local int rx1242_pos
-    .local int rx1242_off
-    .local int rx1242_eos
-    .local int rx1242_rep
-    .local pmc rx1242_cur
-    (rx1242_cur, rx1242_pos, rx1242_tgt) = self."!cursor_start"()
-    rx1242_cur."!cursor_debug"("START ", "metachar:sym<:my>")
-    .lex unicode:"$\x{a2}", rx1242_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1242_eos, rx1242_tgt
-    set rx1242_off, 0
-    lt rx1242_pos, 2, rx1242_start
-    sub rx1242_off, rx1242_pos, 1
-    substr rx1242_tgt, rx1242_tgt, rx1242_off
-  rx1242_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1245_done
-    goto rxscan1245_scan
-  rxscan1245_loop:
-    ($P10) = rx1242_cur."from"()
-    inc $P10
-    set rx1242_pos, $P10
-    ge rx1242_pos, rx1242_eos, rxscan1245_done
-  rxscan1245_scan:
-    set_addr $I10, rxscan1245_loop
-    rx1242_cur."!mark_push"(0, rx1242_pos, $I10)
-  rxscan1245_done:
-.annotate "line", 533
+.sub "metachar:sym<:my>"  :subid("319_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .const 'Sub' $P1250 = "321_1271336396.90314" 
+    capture_lex $P1250
+    .local string rx1245_tgt
+    .local int rx1245_pos
+    .local int rx1245_off
+    .local int rx1245_eos
+    .local int rx1245_rep
+    .local pmc rx1245_cur
+    (rx1245_cur, rx1245_pos, rx1245_tgt) = self."!cursor_start"()
+    rx1245_cur."!cursor_debug"("START ", "metachar:sym<:my>")
+    .lex unicode:"$\x{a2}", rx1245_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1245_eos, rx1245_tgt
+    set rx1245_off, 0
+    lt rx1245_pos, 2, rx1245_start
+    sub rx1245_off, rx1245_pos, 1
+    substr rx1245_tgt, rx1245_tgt, rx1245_off
+  rx1245_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1248_done
+    goto rxscan1248_scan
+  rxscan1248_loop:
+    ($P10) = rx1245_cur."from"()
+    inc $P10
+    set rx1245_pos, $P10
+    ge rx1245_pos, rx1245_eos, rxscan1248_done
+  rxscan1248_scan:
+    set_addr $I10, rxscan1248_loop
+    rx1245_cur."!mark_push"(0, rx1245_pos, $I10)
+  rxscan1248_done:
+.annotate "line", 537
   # rx literal  ":"
-    add $I11, rx1242_pos, 1
-    gt $I11, rx1242_eos, rx1242_fail
-    sub $I11, rx1242_pos, rx1242_off
-    substr $S10, rx1242_tgt, $I11, 1
-    ne $S10, ":", rx1242_fail
-    add rx1242_pos, 1
+    add $I11, rx1245_pos, 1
+    gt $I11, rx1245_eos, rx1245_fail
+    sub $I11, rx1245_pos, rx1245_off
+    substr $S10, rx1245_tgt, $I11, 1
+    ne $S10, ":", rx1245_fail
+    add rx1245_pos, 1
   # rx subrule "before" subtype=zerowidth negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    .const 'Sub' $P1247 = "321_1267204702.05125" 
-    capture_lex $P1247
-    $P10 = rx1242_cur."before"($P1247)
-    unless $P10, rx1242_fail
+    rx1245_cur."!cursor_pos"(rx1245_pos)
+    .const 'Sub' $P1250 = "321_1271336396.90314" 
+    capture_lex $P1250
+    $P10 = rx1245_cur."before"($P1250)
+    unless $P10, rx1245_fail
   # rx subrule "LANG" subtype=capture negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    $P10 = rx1242_cur."LANG"("MAIN", "statement")
-    unless $P10, rx1242_fail
-    rx1242_cur."!mark_push"(0, -1, 0, $P10)
+    rx1245_cur."!cursor_pos"(rx1245_pos)
+    $P10 = rx1245_cur."LANG"("MAIN", "statement")
+    unless $P10, rx1245_fail
+    rx1245_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx1242_pos = $P10."pos"()
+    rx1245_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    $P10 = rx1242_cur."ws"()
-    unless $P10, rx1242_fail
-    rx1242_pos = $P10."pos"()
+    rx1245_cur."!cursor_pos"(rx1245_pos)
+    $P10 = rx1245_cur."ws"()
+    unless $P10, rx1245_fail
+    rx1245_pos = $P10."pos"()
   # rx literal  ";"
-    add $I11, rx1242_pos, 1
-    gt $I11, rx1242_eos, rx1242_fail
-    sub $I11, rx1242_pos, rx1242_off
-    substr $S10, rx1242_tgt, $I11, 1
-    ne $S10, ";", rx1242_fail
-    add rx1242_pos, 1
-.annotate "line", 532
+    add $I11, rx1245_pos, 1
+    gt $I11, rx1245_eos, rx1245_fail
+    sub $I11, rx1245_pos, rx1245_off
+    substr $S10, rx1245_tgt, $I11, 1
+    ne $S10, ";", rx1245_fail
+    add rx1245_pos, 1
+.annotate "line", 536
   # rx pass
-    rx1242_cur."!cursor_pass"(rx1242_pos, "metachar:sym<:my>")
-    rx1242_cur."!cursor_debug"("PASS  ", "metachar:sym<:my>", " at pos=", rx1242_pos)
-    .return (rx1242_cur)
-  rx1242_fail:
-.annotate "line", 531
-    (rx1242_rep, rx1242_pos, $I10, $P10) = rx1242_cur."!mark_fail"(0)
-    lt rx1242_pos, -1, rx1242_done
-    eq rx1242_pos, -1, rx1242_fail
-    jump $I10
-  rx1242_done:
-    rx1242_cur."!cursor_fail"()
-    rx1242_cur."!cursor_debug"("FAIL  ", "metachar:sym<:my>")
-    .return (rx1242_cur)
+    rx1245_cur."!cursor_pass"(rx1245_pos, "metachar:sym<:my>")
+    rx1245_cur."!cursor_debug"("PASS  ", "metachar:sym<:my>", " at pos=", rx1245_pos)
+    .return (rx1245_cur)
+  rx1245_fail:
+.annotate "line", 535
+    (rx1245_rep, rx1245_pos, $I10, $P10) = rx1245_cur."!mark_fail"(0)
+    lt rx1245_pos, -1, rx1245_done
+    eq rx1245_pos, -1, rx1245_fail
+    jump $I10
+  rx1245_done:
+    rx1245_cur."!cursor_fail"()
+    rx1245_cur."!cursor_debug"("FAIL  ", "metachar:sym<:my>")
+    .return (rx1245_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<:my>"  :subid("320_1267204702.05125") :method
-.annotate "line", 531
-    new $P1244, "ResizablePMCArray"
-    push $P1244, ":"
-    .return ($P1244)
-.end
-
-
-.namespace ["NQP";"Regex"]
-.sub "_block1246"  :anon :subid("321_1267204702.05125") :method :outer("319_1267204702.05125")
-.annotate "line", 533
-    .local string rx1248_tgt
-    .local int rx1248_pos
-    .local int rx1248_off
-    .local int rx1248_eos
-    .local int rx1248_rep
-    .local pmc rx1248_cur
-    (rx1248_cur, rx1248_pos, rx1248_tgt) = self."!cursor_start"()
-    rx1248_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx1248_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1248_eos, rx1248_tgt
-    set rx1248_off, 0
-    lt rx1248_pos, 2, rx1248_start
-    sub rx1248_off, rx1248_pos, 1
-    substr rx1248_tgt, rx1248_tgt, rx1248_off
-  rx1248_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1249_done
-    goto rxscan1249_scan
-  rxscan1249_loop:
-    ($P10) = rx1248_cur."from"()
-    inc $P10
-    set rx1248_pos, $P10
-    ge rx1248_pos, rx1248_eos, rxscan1249_done
-  rxscan1249_scan:
-    set_addr $I10, rxscan1249_loop
-    rx1248_cur."!mark_push"(0, rx1248_pos, $I10)
-  rxscan1249_done:
-  # rx literal  "my"
-    add $I11, rx1248_pos, 2
-    gt $I11, rx1248_eos, rx1248_fail
-    sub $I11, rx1248_pos, rx1248_off
-    substr $S10, rx1248_tgt, $I11, 2
-    ne $S10, "my", rx1248_fail
-    add rx1248_pos, 2
-  # rx pass
-    rx1248_cur."!cursor_pass"(rx1248_pos, "")
-    rx1248_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1248_pos)
-    .return (rx1248_cur)
-  rx1248_fail:
-    (rx1248_rep, rx1248_pos, $I10, $P10) = rx1248_cur."!mark_fail"(0)
-    lt rx1248_pos, -1, rx1248_done
-    eq rx1248_pos, -1, rx1248_fail
-    jump $I10
-  rx1248_done:
-    rx1248_cur."!cursor_fail"()
-    rx1248_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx1248_cur)
-    .return ()
+.sub "!PREFIX__metachar:sym<:my>"  :subid("320_1271336396.90314") :method
+.annotate "line", 535
+    new $P1247, "ResizablePMCArray"
+    push $P1247, ":"
+    .return ($P1247)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<{ }>"  :subid("322_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
+.sub "_block1249"  :anon :subid("321_1271336396.90314") :method :outer("319_1271336396.90314")
+.annotate "line", 537
     .local string rx1251_tgt
     .local int rx1251_pos
     .local int rx1251_off
@@ -15313,7 +15301,7 @@
     .local int rx1251_rep
     .local pmc rx1251_cur
     (rx1251_cur, rx1251_pos, rx1251_tgt) = self."!cursor_start"()
-    rx1251_cur."!cursor_debug"("START ", "metachar:sym<{ }>")
+    rx1251_cur."!cursor_debug"("START ", "")
     .lex unicode:"$\x{a2}", rx1251_cur
     .local pmc match
     .lex "$/", match
@@ -15324,444 +15312,500 @@
     substr rx1251_tgt, rx1251_tgt, rx1251_off
   rx1251_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1254_done
-    goto rxscan1254_scan
-  rxscan1254_loop:
+    ne $I10, -1, rxscan1252_done
+    goto rxscan1252_scan
+  rxscan1252_loop:
     ($P10) = rx1251_cur."from"()
     inc $P10
     set rx1251_pos, $P10
-    ge rx1251_pos, rx1251_eos, rxscan1254_done
-  rxscan1254_scan:
-    set_addr $I10, rxscan1254_loop
+    ge rx1251_pos, rx1251_eos, rxscan1252_done
+  rxscan1252_scan:
+    set_addr $I10, rxscan1252_loop
     rx1251_cur."!mark_push"(0, rx1251_pos, $I10)
-  rxscan1254_done:
-.annotate "line", 537
-  # rx enumcharlist negate=0 zerowidth
-    ge rx1251_pos, rx1251_eos, rx1251_fail
-    sub $I10, rx1251_pos, rx1251_off
-    substr $S10, rx1251_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx1251_fail
-  # rx subrule "codeblock" subtype=capture negate=
-    rx1251_cur."!cursor_pos"(rx1251_pos)
-    $P10 = rx1251_cur."codeblock"()
-    unless $P10, rx1251_fail
-    rx1251_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("codeblock")
-    rx1251_pos = $P10."pos"()
-.annotate "line", 536
+  rxscan1252_done:
+  # rx literal  "my"
+    add $I11, rx1251_pos, 2
+    gt $I11, rx1251_eos, rx1251_fail
+    sub $I11, rx1251_pos, rx1251_off
+    substr $S10, rx1251_tgt, $I11, 2
+    ne $S10, "my", rx1251_fail
+    add rx1251_pos, 2
   # rx pass
-    rx1251_cur."!cursor_pass"(rx1251_pos, "metachar:sym<{ }>")
-    rx1251_cur."!cursor_debug"("PASS  ", "metachar:sym<{ }>", " at pos=", rx1251_pos)
+    rx1251_cur."!cursor_pass"(rx1251_pos, "")
+    rx1251_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1251_pos)
     .return (rx1251_cur)
   rx1251_fail:
-.annotate "line", 531
     (rx1251_rep, rx1251_pos, $I10, $P10) = rx1251_cur."!mark_fail"(0)
     lt rx1251_pos, -1, rx1251_done
     eq rx1251_pos, -1, rx1251_fail
     jump $I10
   rx1251_done:
     rx1251_cur."!cursor_fail"()
-    rx1251_cur."!cursor_debug"("FAIL  ", "metachar:sym<{ }>")
+    rx1251_cur."!cursor_debug"("FAIL  ", "")
     .return (rx1251_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<{ }>"  :subid("323_1267204702.05125") :method
-.annotate "line", 531
-    new $P1253, "ResizablePMCArray"
-    push $P1253, "{"
-    .return ($P1253)
+.sub "metachar:sym<{ }>"  :subid("322_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .local string rx1254_tgt
+    .local int rx1254_pos
+    .local int rx1254_off
+    .local int rx1254_eos
+    .local int rx1254_rep
+    .local pmc rx1254_cur
+    (rx1254_cur, rx1254_pos, rx1254_tgt) = self."!cursor_start"()
+    rx1254_cur."!cursor_debug"("START ", "metachar:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx1254_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1254_eos, rx1254_tgt
+    set rx1254_off, 0
+    lt rx1254_pos, 2, rx1254_start
+    sub rx1254_off, rx1254_pos, 1
+    substr rx1254_tgt, rx1254_tgt, rx1254_off
+  rx1254_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1257_done
+    goto rxscan1257_scan
+  rxscan1257_loop:
+    ($P10) = rx1254_cur."from"()
+    inc $P10
+    set rx1254_pos, $P10
+    ge rx1254_pos, rx1254_eos, rxscan1257_done
+  rxscan1257_scan:
+    set_addr $I10, rxscan1257_loop
+    rx1254_cur."!mark_push"(0, rx1254_pos, $I10)
+  rxscan1257_done:
+.annotate "line", 541
+  # rx enumcharlist negate=0 zerowidth
+    ge rx1254_pos, rx1254_eos, rx1254_fail
+    sub $I10, rx1254_pos, rx1254_off
+    substr $S10, rx1254_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx1254_fail
+  # rx subrule "codeblock" subtype=capture negate=
+    rx1254_cur."!cursor_pos"(rx1254_pos)
+    $P10 = rx1254_cur."codeblock"()
+    unless $P10, rx1254_fail
+    rx1254_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("codeblock")
+    rx1254_pos = $P10."pos"()
+.annotate "line", 540
+  # rx pass
+    rx1254_cur."!cursor_pass"(rx1254_pos, "metachar:sym<{ }>")
+    rx1254_cur."!cursor_debug"("PASS  ", "metachar:sym<{ }>", " at pos=", rx1254_pos)
+    .return (rx1254_cur)
+  rx1254_fail:
+.annotate "line", 535
+    (rx1254_rep, rx1254_pos, $I10, $P10) = rx1254_cur."!mark_fail"(0)
+    lt rx1254_pos, -1, rx1254_done
+    eq rx1254_pos, -1, rx1254_fail
+    jump $I10
+  rx1254_done:
+    rx1254_cur."!cursor_fail"()
+    rx1254_cur."!cursor_debug"("FAIL  ", "metachar:sym<{ }>")
+    .return (rx1254_cur)
+    .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<{ }>"  :subid("324_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .local string rx1256_tgt
-    .local int rx1256_pos
-    .local int rx1256_off
-    .local int rx1256_eos
-    .local int rx1256_rep
-    .local pmc rx1256_cur
-    (rx1256_cur, rx1256_pos, rx1256_tgt) = self."!cursor_start"()
-    rx1256_cur."!cursor_debug"("START ", "assertion:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx1256_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1256_eos, rx1256_tgt
-    set rx1256_off, 0
-    lt rx1256_pos, 2, rx1256_start
-    sub rx1256_off, rx1256_pos, 1
-    substr rx1256_tgt, rx1256_tgt, rx1256_off
-  rx1256_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1259_done
-    goto rxscan1259_scan
-  rxscan1259_loop:
-    ($P10) = rx1256_cur."from"()
-    inc $P10
-    set rx1256_pos, $P10
-    ge rx1256_pos, rx1256_eos, rxscan1259_done
-  rxscan1259_scan:
-    set_addr $I10, rxscan1259_loop
-    rx1256_cur."!mark_push"(0, rx1256_pos, $I10)
-  rxscan1259_done:
-.annotate "line", 541
+.sub "!PREFIX__metachar:sym<{ }>"  :subid("323_1271336396.90314") :method
+.annotate "line", 535
+    new $P1256, "ResizablePMCArray"
+    push $P1256, "{"
+    .return ($P1256)
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "assertion:sym<{ }>"  :subid("324_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .local string rx1259_tgt
+    .local int rx1259_pos
+    .local int rx1259_off
+    .local int rx1259_eos
+    .local int rx1259_rep
+    .local pmc rx1259_cur
+    (rx1259_cur, rx1259_pos, rx1259_tgt) = self."!cursor_start"()
+    rx1259_cur."!cursor_debug"("START ", "assertion:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx1259_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1259_eos, rx1259_tgt
+    set rx1259_off, 0
+    lt rx1259_pos, 2, rx1259_start
+    sub rx1259_off, rx1259_pos, 1
+    substr rx1259_tgt, rx1259_tgt, rx1259_off
+  rx1259_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1262_done
+    goto rxscan1262_scan
+  rxscan1262_loop:
+    ($P10) = rx1259_cur."from"()
+    inc $P10
+    set rx1259_pos, $P10
+    ge rx1259_pos, rx1259_eos, rxscan1262_done
+  rxscan1262_scan:
+    set_addr $I10, rxscan1262_loop
+    rx1259_cur."!mark_push"(0, rx1259_pos, $I10)
+  rxscan1262_done:
+.annotate "line", 545
   # rx enumcharlist negate=0 zerowidth
-    ge rx1256_pos, rx1256_eos, rx1256_fail
-    sub $I10, rx1256_pos, rx1256_off
-    substr $S10, rx1256_tgt, $I10, 1
+    ge rx1259_pos, rx1259_eos, rx1259_fail
+    sub $I10, rx1259_pos, rx1259_off
+    substr $S10, rx1259_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx1256_fail
+    lt $I11, 0, rx1259_fail
   # rx subrule "codeblock" subtype=capture negate=
-    rx1256_cur."!cursor_pos"(rx1256_pos)
-    $P10 = rx1256_cur."codeblock"()
-    unless $P10, rx1256_fail
-    rx1256_cur."!mark_push"(0, -1, 0, $P10)
+    rx1259_cur."!cursor_pos"(rx1259_pos)
+    $P10 = rx1259_cur."codeblock"()
+    unless $P10, rx1259_fail
+    rx1259_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("codeblock")
-    rx1256_pos = $P10."pos"()
-.annotate "line", 540
+    rx1259_pos = $P10."pos"()
+.annotate "line", 544
   # rx pass
-    rx1256_cur."!cursor_pass"(rx1256_pos, "assertion:sym<{ }>")
-    rx1256_cur."!cursor_debug"("PASS  ", "assertion:sym<{ }>", " at pos=", rx1256_pos)
-    .return (rx1256_cur)
-  rx1256_fail:
-.annotate "line", 531
-    (rx1256_rep, rx1256_pos, $I10, $P10) = rx1256_cur."!mark_fail"(0)
-    lt rx1256_pos, -1, rx1256_done
-    eq rx1256_pos, -1, rx1256_fail
-    jump $I10
-  rx1256_done:
-    rx1256_cur."!cursor_fail"()
-    rx1256_cur."!cursor_debug"("FAIL  ", "assertion:sym<{ }>")
-    .return (rx1256_cur)
+    rx1259_cur."!cursor_pass"(rx1259_pos, "assertion:sym<{ }>")
+    rx1259_cur."!cursor_debug"("PASS  ", "assertion:sym<{ }>", " at pos=", rx1259_pos)
+    .return (rx1259_cur)
+  rx1259_fail:
+.annotate "line", 535
+    (rx1259_rep, rx1259_pos, $I10, $P10) = rx1259_cur."!mark_fail"(0)
+    lt rx1259_pos, -1, rx1259_done
+    eq rx1259_pos, -1, rx1259_fail
+    jump $I10
+  rx1259_done:
+    rx1259_cur."!cursor_fail"()
+    rx1259_cur."!cursor_debug"("FAIL  ", "assertion:sym<{ }>")
+    .return (rx1259_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<{ }>"  :subid("325_1267204702.05125") :method
-.annotate "line", 531
-    new $P1258, "ResizablePMCArray"
-    push $P1258, "{"
-    .return ($P1258)
+.sub "!PREFIX__assertion:sym<{ }>"  :subid("325_1271336396.90314") :method
+.annotate "line", 535
+    new $P1261, "ResizablePMCArray"
+    push $P1261, "{"
+    .return ($P1261)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<name>"  :subid("326_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .const 'Sub' $P1269 = "328_1267204702.05125" 
-    capture_lex $P1269
-    .local string rx1261_tgt
-    .local int rx1261_pos
-    .local int rx1261_off
-    .local int rx1261_eos
-    .local int rx1261_rep
-    .local pmc rx1261_cur
-    (rx1261_cur, rx1261_pos, rx1261_tgt) = self."!cursor_start"()
-    rx1261_cur."!cursor_debug"("START ", "assertion:sym<name>")
-    rx1261_cur."!cursor_caparray"("assertion", "nibbler", "arglist")
-    .lex unicode:"$\x{a2}", rx1261_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1261_eos, rx1261_tgt
-    set rx1261_off, 0
-    lt rx1261_pos, 2, rx1261_start
-    sub rx1261_off, rx1261_pos, 1
-    substr rx1261_tgt, rx1261_tgt, rx1261_off
-  rx1261_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1264_done
-    goto rxscan1264_scan
-  rxscan1264_loop:
-    ($P10) = rx1261_cur."from"()
-    inc $P10
-    set rx1261_pos, $P10
-    ge rx1261_pos, rx1261_eos, rxscan1264_done
-  rxscan1264_scan:
-    set_addr $I10, rxscan1264_loop
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-  rxscan1264_done:
-.annotate "line", 545
+.sub "assertion:sym<name>"  :subid("326_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .const 'Sub' $P1272 = "328_1271336396.90314" 
+    capture_lex $P1272
+    .local string rx1264_tgt
+    .local int rx1264_pos
+    .local int rx1264_off
+    .local int rx1264_eos
+    .local int rx1264_rep
+    .local pmc rx1264_cur
+    (rx1264_cur, rx1264_pos, rx1264_tgt) = self."!cursor_start"()
+    rx1264_cur."!cursor_debug"("START ", "assertion:sym<name>")
+    rx1264_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    .lex unicode:"$\x{a2}", rx1264_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1264_eos, rx1264_tgt
+    set rx1264_off, 0
+    lt rx1264_pos, 2, rx1264_start
+    sub rx1264_off, rx1264_pos, 1
+    substr rx1264_tgt, rx1264_tgt, rx1264_off
+  rx1264_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1267_done
+    goto rxscan1267_scan
+  rxscan1267_loop:
+    ($P10) = rx1264_cur."from"()
+    inc $P10
+    set rx1264_pos, $P10
+    ge rx1264_pos, rx1264_eos, rxscan1267_done
+  rxscan1267_scan:
+    set_addr $I10, rxscan1267_loop
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+  rxscan1267_done:
+.annotate "line", 549
   # rx subcapture "longname"
-    set_addr $I10, rxcap_1265_fail
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
+    set_addr $I10, rxcap_1268_fail
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx1261_pos, rx1261_off
-    find_not_cclass $I11, 8192, rx1261_tgt, $I10, rx1261_eos
+    sub $I10, rx1264_pos, rx1264_off
+    find_not_cclass $I11, 8192, rx1264_tgt, $I10, rx1264_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx1261_fail
-    add rx1261_pos, rx1261_off, $I11
-    set_addr $I10, rxcap_1265_fail
-    ($I12, $I11) = rx1261_cur."!mark_peek"($I10)
-    rx1261_cur."!cursor_pos"($I11)
-    ($P10) = rx1261_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1261_pos, "")
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx1264_fail
+    add rx1264_pos, rx1264_off, $I11
+    set_addr $I10, rxcap_1268_fail
+    ($I12, $I11) = rx1264_cur."!mark_peek"($I10)
+    rx1264_cur."!cursor_pos"($I11)
+    ($P10) = rx1264_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1264_pos, "")
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname")
-    goto rxcap_1265_done
-  rxcap_1265_fail:
-    goto rx1261_fail
-  rxcap_1265_done:
-.annotate "line", 552
-  # rx rxquantr1266 ** 0..1
-    set_addr $I1272, rxquantr1266_done
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I1272)
-  rxquantr1266_loop:
-  alt1267_0:
-.annotate "line", 546
-    set_addr $I10, alt1267_1
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 547
+    goto rxcap_1268_done
+  rxcap_1268_fail:
+    goto rx1264_fail
+  rxcap_1268_done:
+.annotate "line", 556
+  # rx rxquantr1269 ** 0..1
+    set_addr $I1275, rxquantr1269_done
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I1275)
+  rxquantr1269_loop:
+  alt1270_0:
+.annotate "line", 550
+    set_addr $I10, alt1270_1
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+.annotate "line", 551
   # rx subrule "before" subtype=zerowidth negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    .const 'Sub' $P1269 = "328_1267204702.05125" 
-    capture_lex $P1269
-    $P10 = rx1261_cur."before"($P1269)
-    unless $P10, rx1261_fail
-    goto alt1267_end
-  alt1267_1:
-    set_addr $I10, alt1267_2
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 548
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    .const 'Sub' $P1272 = "328_1271336396.90314" 
+    capture_lex $P1272
+    $P10 = rx1264_cur."before"($P1272)
+    unless $P10, rx1264_fail
+    goto alt1270_end
+  alt1270_1:
+    set_addr $I10, alt1270_2
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+.annotate "line", 552
   # rx literal  "="
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, "=", rx1261_fail
-    add rx1261_pos, 1
+    add $I11, rx1264_pos, 1
+    gt $I11, rx1264_eos, rx1264_fail
+    sub $I11, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I11, 1
+    ne $S10, "=", rx1264_fail
+    add rx1264_pos, 1
   # rx subrule "assertion" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."assertion"()
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."assertion"()
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx1261_pos = $P10."pos"()
-    goto alt1267_end
-  alt1267_2:
-    set_addr $I10, alt1267_3
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 549
+    rx1264_pos = $P10."pos"()
+    goto alt1270_end
+  alt1270_2:
+    set_addr $I10, alt1270_3
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+.annotate "line", 553
   # rx literal  ":"
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, ":", rx1261_fail
-    add rx1261_pos, 1
+    add $I11, rx1264_pos, 1
+    gt $I11, rx1264_eos, rx1264_fail
+    sub $I11, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I11, 1
+    ne $S10, ":", rx1264_fail
+    add rx1264_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."arglist"()
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."arglist"()
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx1261_pos = $P10."pos"()
-    goto alt1267_end
-  alt1267_3:
-    set_addr $I10, alt1267_4
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 550
+    rx1264_pos = $P10."pos"()
+    goto alt1270_end
+  alt1270_3:
+    set_addr $I10, alt1270_4
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+.annotate "line", 554
   # rx literal  "("
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, "(", rx1261_fail
-    add rx1261_pos, 1
+    add $I11, rx1264_pos, 1
+    gt $I11, rx1264_eos, rx1264_fail
+    sub $I11, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I11, 1
+    ne $S10, "(", rx1264_fail
+    add rx1264_pos, 1
   # rx subrule "LANG" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."LANG"("MAIN", "arglist")
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."LANG"("MAIN", "arglist")
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx1261_pos = $P10."pos"()
+    rx1264_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, ")", rx1261_fail
-    add rx1261_pos, 1
-    goto alt1267_end
-  alt1267_4:
-.annotate "line", 551
+    add $I11, rx1264_pos, 1
+    gt $I11, rx1264_eos, rx1264_fail
+    sub $I11, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I11, 1
+    ne $S10, ")", rx1264_fail
+    add rx1264_pos, 1
+    goto alt1270_end
+  alt1270_4:
+.annotate "line", 555
   # rx subrule "normspace" subtype=method negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."normspace"()
-    unless $P10, rx1261_fail
-    rx1261_pos = $P10."pos"()
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."normspace"()
+    unless $P10, rx1264_fail
+    rx1264_pos = $P10."pos"()
   # rx subrule "nibbler" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."nibbler"()
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."nibbler"()
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("nibbler")
-    rx1261_pos = $P10."pos"()
-  alt1267_end:
-.annotate "line", 552
-    (rx1261_rep) = rx1261_cur."!mark_commit"($I1272)
-  rxquantr1266_done:
-.annotate "line", 544
+    rx1264_pos = $P10."pos"()
+  alt1270_end:
+.annotate "line", 556
+    (rx1264_rep) = rx1264_cur."!mark_commit"($I1275)
+  rxquantr1269_done:
+.annotate "line", 548
   # rx pass
-    rx1261_cur."!cursor_pass"(rx1261_pos, "assertion:sym<name>")
-    rx1261_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx1261_pos)
-    .return (rx1261_cur)
-  rx1261_fail:
-.annotate "line", 531
-    (rx1261_rep, rx1261_pos, $I10, $P10) = rx1261_cur."!mark_fail"(0)
-    lt rx1261_pos, -1, rx1261_done
-    eq rx1261_pos, -1, rx1261_fail
-    jump $I10
-  rx1261_done:
-    rx1261_cur."!cursor_fail"()
-    rx1261_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
-    .return (rx1261_cur)
+    rx1264_cur."!cursor_pass"(rx1264_pos, "assertion:sym<name>")
+    rx1264_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx1264_pos)
+    .return (rx1264_cur)
+  rx1264_fail:
+.annotate "line", 535
+    (rx1264_rep, rx1264_pos, $I10, $P10) = rx1264_cur."!mark_fail"(0)
+    lt rx1264_pos, -1, rx1264_done
+    eq rx1264_pos, -1, rx1264_fail
+    jump $I10
+  rx1264_done:
+    rx1264_cur."!cursor_fail"()
+    rx1264_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
+    .return (rx1264_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("327_1267204702.05125") :method
-.annotate "line", 531
-    new $P1263, "ResizablePMCArray"
-    push $P1263, ""
-    .return ($P1263)
+.sub "!PREFIX__assertion:sym<name>"  :subid("327_1271336396.90314") :method
+.annotate "line", 535
+    new $P1266, "ResizablePMCArray"
+    push $P1266, ""
+    .return ($P1266)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1268"  :anon :subid("328_1267204702.05125") :method :outer("326_1267204702.05125")
-.annotate "line", 547
-    .local string rx1270_tgt
-    .local int rx1270_pos
-    .local int rx1270_off
-    .local int rx1270_eos
-    .local int rx1270_rep
-    .local pmc rx1270_cur
-    (rx1270_cur, rx1270_pos, rx1270_tgt) = self."!cursor_start"()
-    rx1270_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx1270_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1270_eos, rx1270_tgt
-    set rx1270_off, 0
-    lt rx1270_pos, 2, rx1270_start
-    sub rx1270_off, rx1270_pos, 1
-    substr rx1270_tgt, rx1270_tgt, rx1270_off
-  rx1270_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1271_done
-    goto rxscan1271_scan
-  rxscan1271_loop:
-    ($P10) = rx1270_cur."from"()
-    inc $P10
-    set rx1270_pos, $P10
-    ge rx1270_pos, rx1270_eos, rxscan1271_done
-  rxscan1271_scan:
-    set_addr $I10, rxscan1271_loop
-    rx1270_cur."!mark_push"(0, rx1270_pos, $I10)
-  rxscan1271_done:
+.sub "_block1271"  :anon :subid("328_1271336396.90314") :method :outer("326_1271336396.90314")
+.annotate "line", 551
+    .local string rx1273_tgt
+    .local int rx1273_pos
+    .local int rx1273_off
+    .local int rx1273_eos
+    .local int rx1273_rep
+    .local pmc rx1273_cur
+    (rx1273_cur, rx1273_pos, rx1273_tgt) = self."!cursor_start"()
+    rx1273_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx1273_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1273_eos, rx1273_tgt
+    set rx1273_off, 0
+    lt rx1273_pos, 2, rx1273_start
+    sub rx1273_off, rx1273_pos, 1
+    substr rx1273_tgt, rx1273_tgt, rx1273_off
+  rx1273_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1274_done
+    goto rxscan1274_scan
+  rxscan1274_loop:
+    ($P10) = rx1273_cur."from"()
+    inc $P10
+    set rx1273_pos, $P10
+    ge rx1273_pos, rx1273_eos, rxscan1274_done
+  rxscan1274_scan:
+    set_addr $I10, rxscan1274_loop
+    rx1273_cur."!mark_push"(0, rx1273_pos, $I10)
+  rxscan1274_done:
   # rx literal  ">"
-    add $I11, rx1270_pos, 1
-    gt $I11, rx1270_eos, rx1270_fail
-    sub $I11, rx1270_pos, rx1270_off
-    substr $S10, rx1270_tgt, $I11, 1
-    ne $S10, ">", rx1270_fail
-    add rx1270_pos, 1
-  # rx pass
-    rx1270_cur."!cursor_pass"(rx1270_pos, "")
-    rx1270_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1270_pos)
-    .return (rx1270_cur)
-  rx1270_fail:
-    (rx1270_rep, rx1270_pos, $I10, $P10) = rx1270_cur."!mark_fail"(0)
-    lt rx1270_pos, -1, rx1270_done
-    eq rx1270_pos, -1, rx1270_fail
-    jump $I10
-  rx1270_done:
-    rx1270_cur."!cursor_fail"()
-    rx1270_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx1270_cur)
+    add $I11, rx1273_pos, 1
+    gt $I11, rx1273_eos, rx1273_fail
+    sub $I11, rx1273_pos, rx1273_off
+    substr $S10, rx1273_tgt, $I11, 1
+    ne $S10, ">", rx1273_fail
+    add rx1273_pos, 1
+  # rx pass
+    rx1273_cur."!cursor_pass"(rx1273_pos, "")
+    rx1273_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1273_pos)
+    .return (rx1273_cur)
+  rx1273_fail:
+    (rx1273_rep, rx1273_pos, $I10, $P10) = rx1273_cur."!mark_fail"(0)
+    lt rx1273_pos, -1, rx1273_done
+    eq rx1273_pos, -1, rx1273_fail
+    jump $I10
+  rx1273_done:
+    rx1273_cur."!cursor_fail"()
+    rx1273_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx1273_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "codeblock"  :subid("329_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .local string rx1274_tgt
-    .local int rx1274_pos
-    .local int rx1274_off
-    .local int rx1274_eos
-    .local int rx1274_rep
-    .local pmc rx1274_cur
-    (rx1274_cur, rx1274_pos, rx1274_tgt) = self."!cursor_start"()
-    rx1274_cur."!cursor_debug"("START ", "codeblock")
-    .lex unicode:"$\x{a2}", rx1274_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1274_eos, rx1274_tgt
-    set rx1274_off, 0
-    lt rx1274_pos, 2, rx1274_start
-    sub rx1274_off, rx1274_pos, 1
-    substr rx1274_tgt, rx1274_tgt, rx1274_off
-  rx1274_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1278_done
-    goto rxscan1278_scan
-  rxscan1278_loop:
-    ($P10) = rx1274_cur."from"()
-    inc $P10
-    set rx1274_pos, $P10
-    ge rx1274_pos, rx1274_eos, rxscan1278_done
-  rxscan1278_scan:
-    set_addr $I10, rxscan1278_loop
-    rx1274_cur."!mark_push"(0, rx1274_pos, $I10)
-  rxscan1278_done:
-.annotate "line", 557
+.sub "codeblock"  :subid("329_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .local string rx1277_tgt
+    .local int rx1277_pos
+    .local int rx1277_off
+    .local int rx1277_eos
+    .local int rx1277_rep
+    .local pmc rx1277_cur
+    (rx1277_cur, rx1277_pos, rx1277_tgt) = self."!cursor_start"()
+    rx1277_cur."!cursor_debug"("START ", "codeblock")
+    .lex unicode:"$\x{a2}", rx1277_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1277_eos, rx1277_tgt
+    set rx1277_off, 0
+    lt rx1277_pos, 2, rx1277_start
+    sub rx1277_off, rx1277_pos, 1
+    substr rx1277_tgt, rx1277_tgt, rx1277_off
+  rx1277_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1281_done
+    goto rxscan1281_scan
+  rxscan1281_loop:
+    ($P10) = rx1277_cur."from"()
+    inc $P10
+    set rx1277_pos, $P10
+    ge rx1277_pos, rx1277_eos, rxscan1281_done
+  rxscan1281_scan:
+    set_addr $I10, rxscan1281_loop
+    rx1277_cur."!mark_push"(0, rx1277_pos, $I10)
+  rxscan1281_done:
+.annotate "line", 561
   # rx subrule "LANG" subtype=capture negate=
-    rx1274_cur."!cursor_pos"(rx1274_pos)
-    $P10 = rx1274_cur."LANG"("MAIN", "pblock")
-    unless $P10, rx1274_fail
-    rx1274_cur."!mark_push"(0, -1, 0, $P10)
+    rx1277_cur."!cursor_pos"(rx1277_pos)
+    $P10 = rx1277_cur."LANG"("MAIN", "pblock")
+    unless $P10, rx1277_fail
+    rx1277_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx1274_pos = $P10."pos"()
-.annotate "line", 556
+    rx1277_pos = $P10."pos"()
+.annotate "line", 560
   # rx pass
-    rx1274_cur."!cursor_pass"(rx1274_pos, "codeblock")
-    rx1274_cur."!cursor_debug"("PASS  ", "codeblock", " at pos=", rx1274_pos)
-    .return (rx1274_cur)
-  rx1274_fail:
-.annotate "line", 531
-    (rx1274_rep, rx1274_pos, $I10, $P10) = rx1274_cur."!mark_fail"(0)
-    lt rx1274_pos, -1, rx1274_done
-    eq rx1274_pos, -1, rx1274_fail
-    jump $I10
-  rx1274_done:
-    rx1274_cur."!cursor_fail"()
-    rx1274_cur."!cursor_debug"("FAIL  ", "codeblock")
-    .return (rx1274_cur)
+    rx1277_cur."!cursor_pass"(rx1277_pos, "codeblock")
+    rx1277_cur."!cursor_debug"("PASS  ", "codeblock", " at pos=", rx1277_pos)
+    .return (rx1277_cur)
+  rx1277_fail:
+.annotate "line", 535
+    (rx1277_rep, rx1277_pos, $I10, $P10) = rx1277_cur."!mark_fail"(0)
+    lt rx1277_pos, -1, rx1277_done
+    eq rx1277_pos, -1, rx1277_fail
+    jump $I10
+  rx1277_done:
+    rx1277_cur."!cursor_fail"()
+    rx1277_cur."!cursor_debug"("FAIL  ", "codeblock")
+    .return (rx1277_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__codeblock"  :subid("330_1267204702.05125") :method
-.annotate "line", 531
-    $P1276 = self."!PREFIX__!subrule"("block", "")
-    new $P1277, "ResizablePMCArray"
-    push $P1277, $P1276
-    .return ($P1277)
+.sub "!PREFIX__codeblock"  :subid("330_1271336396.90314") :method
+.annotate "line", 535
+    $P1279 = self."!PREFIX__!subrule"("block", "")
+    new $P1280, "ResizablePMCArray"
+    push $P1280, $P1279
+    .return ($P1280)
 .end
 
 ### .include 'gen/nqp-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204714.47172")
+.sub "_block11"  :anon :subid("10_1271336409.53729")
 .annotate "line", 0
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
@@ -15775,9 +15819,9 @@
 
 
 .namespace []
-.sub "" :load :init :subid("post126") :outer("10_1267204714.47172")
+.sub "" :load :init :subid("post126") :outer("10_1271336409.53729")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204714.47172" 
+    .const 'Sub' $P12 = "10_1271336409.53729" 
     .local pmc block
     set block, $P12
     $P2169 = get_root_global ["parrot"], "P6metaclass"
@@ -15786,199 +15830,199 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block13"  :subid("11_1267204714.47172") :outer("10_1267204714.47172")
+.sub "_block13"  :subid("11_1271336409.53729") :outer("10_1271336409.53729")
 .annotate "line", 3
-    .const 'Sub' $P2164 = "125_1267204714.47172" 
+    .const 'Sub' $P2164 = "125_1271336409.53729" 
     capture_lex $P2164
     get_hll_global $P2100, ["NQP";"RegexActions"], "_block2099" 
     capture_lex $P2100
-    .const 'Sub' $P2089 = "119_1267204714.47172" 
+    .const 'Sub' $P2089 = "119_1271336409.53729" 
     capture_lex $P2089
-    .const 'Sub' $P2077 = "118_1267204714.47172" 
+    .const 'Sub' $P2077 = "118_1271336409.53729" 
     capture_lex $P2077
-    .const 'Sub' $P2067 = "117_1267204714.47172" 
+    .const 'Sub' $P2067 = "117_1271336409.53729" 
     capture_lex $P2067
-    .const 'Sub' $P2057 = "116_1267204714.47172" 
+    .const 'Sub' $P2057 = "116_1271336409.53729" 
     capture_lex $P2057
-    .const 'Sub' $P2047 = "115_1267204714.47172" 
+    .const 'Sub' $P2047 = "115_1271336409.53729" 
     capture_lex $P2047
-    .const 'Sub' $P2033 = "114_1267204714.47172" 
+    .const 'Sub' $P2033 = "114_1271336409.53729" 
     capture_lex $P2033
-    .const 'Sub' $P2023 = "113_1267204714.47172" 
+    .const 'Sub' $P2023 = "113_1271336409.53729" 
     capture_lex $P2023
-    .const 'Sub' $P1986 = "112_1267204714.47172" 
+    .const 'Sub' $P1986 = "112_1271336409.53729" 
     capture_lex $P1986
-    .const 'Sub' $P1972 = "111_1267204714.47172" 
+    .const 'Sub' $P1972 = "111_1271336409.53729" 
     capture_lex $P1972
-    .const 'Sub' $P1962 = "110_1267204714.47172" 
+    .const 'Sub' $P1962 = "110_1271336409.53729" 
     capture_lex $P1962
-    .const 'Sub' $P1952 = "109_1267204714.47172" 
+    .const 'Sub' $P1952 = "109_1271336409.53729" 
     capture_lex $P1952
-    .const 'Sub' $P1942 = "108_1267204714.47172" 
+    .const 'Sub' $P1942 = "108_1271336409.53729" 
     capture_lex $P1942
-    .const 'Sub' $P1932 = "107_1267204714.47172" 
+    .const 'Sub' $P1932 = "107_1271336409.53729" 
     capture_lex $P1932
-    .const 'Sub' $P1922 = "106_1267204714.47172" 
+    .const 'Sub' $P1922 = "106_1271336409.53729" 
     capture_lex $P1922
-    .const 'Sub' $P1894 = "105_1267204714.47172" 
+    .const 'Sub' $P1894 = "105_1271336409.53729" 
     capture_lex $P1894
-    .const 'Sub' $P1877 = "104_1267204714.47172" 
+    .const 'Sub' $P1877 = "104_1271336409.53729" 
     capture_lex $P1877
-    .const 'Sub' $P1867 = "103_1267204714.47172" 
+    .const 'Sub' $P1867 = "103_1271336409.53729" 
     capture_lex $P1867
-    .const 'Sub' $P1854 = "102_1267204714.47172" 
+    .const 'Sub' $P1854 = "102_1271336409.53729" 
     capture_lex $P1854
-    .const 'Sub' $P1841 = "101_1267204714.47172" 
+    .const 'Sub' $P1841 = "101_1271336409.53729" 
     capture_lex $P1841
-    .const 'Sub' $P1828 = "100_1267204714.47172" 
+    .const 'Sub' $P1828 = "100_1271336409.53729" 
     capture_lex $P1828
-    .const 'Sub' $P1818 = "99_1267204714.47172" 
+    .const 'Sub' $P1818 = "99_1271336409.53729" 
     capture_lex $P1818
-    .const 'Sub' $P1789 = "98_1267204714.47172" 
+    .const 'Sub' $P1789 = "98_1271336409.53729" 
     capture_lex $P1789
-    .const 'Sub' $P1769 = "97_1267204714.47172" 
+    .const 'Sub' $P1769 = "97_1271336409.53729" 
     capture_lex $P1769
-    .const 'Sub' $P1759 = "96_1267204714.47172" 
+    .const 'Sub' $P1759 = "96_1271336409.53729" 
     capture_lex $P1759
-    .const 'Sub' $P1749 = "95_1267204714.47172" 
+    .const 'Sub' $P1749 = "95_1271336409.53729" 
     capture_lex $P1749
-    .const 'Sub' $P1722 = "94_1267204714.47172" 
+    .const 'Sub' $P1722 = "94_1271336409.53729" 
     capture_lex $P1722
-    .const 'Sub' $P1704 = "93_1267204714.47172" 
+    .const 'Sub' $P1704 = "93_1271336409.53729" 
     capture_lex $P1704
-    .const 'Sub' $P1694 = "92_1267204714.47172" 
+    .const 'Sub' $P1694 = "92_1271336409.53729" 
     capture_lex $P1694
-    .const 'Sub' $P1610 = "89_1267204714.47172" 
+    .const 'Sub' $P1610 = "89_1271336409.53729" 
     capture_lex $P1610
-    .const 'Sub' $P1600 = "88_1267204714.47172" 
+    .const 'Sub' $P1600 = "88_1271336409.53729" 
     capture_lex $P1600
-    .const 'Sub' $P1571 = "87_1267204714.47172" 
+    .const 'Sub' $P1571 = "87_1271336409.53729" 
     capture_lex $P1571
-    .const 'Sub' $P1529 = "86_1267204714.47172" 
+    .const 'Sub' $P1529 = "86_1271336409.53729" 
     capture_lex $P1529
-    .const 'Sub' $P1513 = "85_1267204714.47172" 
+    .const 'Sub' $P1513 = "85_1271336409.53729" 
     capture_lex $P1513
-    .const 'Sub' $P1504 = "84_1267204714.47172" 
+    .const 'Sub' $P1504 = "84_1271336409.53729" 
     capture_lex $P1504
-    .const 'Sub' $P1472 = "83_1267204714.47172" 
+    .const 'Sub' $P1472 = "83_1271336409.53729" 
     capture_lex $P1472
-    .const 'Sub' $P1373 = "80_1267204714.47172" 
+    .const 'Sub' $P1373 = "80_1271336409.53729" 
     capture_lex $P1373
-    .const 'Sub' $P1356 = "79_1267204714.47172" 
+    .const 'Sub' $P1356 = "79_1271336409.53729" 
     capture_lex $P1356
-    .const 'Sub' $P1336 = "78_1267204714.47172" 
+    .const 'Sub' $P1336 = "78_1271336409.53729" 
     capture_lex $P1336
-    .const 'Sub' $P1252 = "77_1267204714.47172" 
+    .const 'Sub' $P1252 = "77_1271336409.53729" 
     capture_lex $P1252
-    .const 'Sub' $P1228 = "75_1267204714.47172" 
+    .const 'Sub' $P1228 = "75_1271336409.53729" 
     capture_lex $P1228
-    .const 'Sub' $P1194 = "73_1267204714.47172" 
+    .const 'Sub' $P1194 = "73_1271336409.53729" 
     capture_lex $P1194
-    .const 'Sub' $P1144 = "71_1267204714.47172" 
+    .const 'Sub' $P1144 = "71_1271336409.53729" 
     capture_lex $P1144
-    .const 'Sub' $P1134 = "70_1267204714.47172" 
+    .const 'Sub' $P1134 = "70_1271336409.53729" 
     capture_lex $P1134
-    .const 'Sub' $P1124 = "69_1267204714.47172" 
+    .const 'Sub' $P1124 = "69_1271336409.53729" 
     capture_lex $P1124
-    .const 'Sub' $P1053 = "67_1267204714.47172" 
+    .const 'Sub' $P1053 = "67_1271336409.53729" 
     capture_lex $P1053
-    .const 'Sub' $P1036 = "66_1267204714.47172" 
+    .const 'Sub' $P1036 = "66_1271336409.53729" 
     capture_lex $P1036
-    .const 'Sub' $P1026 = "65_1267204714.47172" 
+    .const 'Sub' $P1026 = "65_1271336409.53729" 
     capture_lex $P1026
-    .const 'Sub' $P1016 = "64_1267204714.47172" 
+    .const 'Sub' $P1016 = "64_1271336409.53729" 
     capture_lex $P1016
-    .const 'Sub' $P1006 = "63_1267204714.47172" 
+    .const 'Sub' $P1006 = "63_1271336409.53729" 
     capture_lex $P1006
-    .const 'Sub' $P982 = "62_1267204714.47172" 
+    .const 'Sub' $P982 = "62_1271336409.53729" 
     capture_lex $P982
-    .const 'Sub' $P929 = "61_1267204714.47172" 
+    .const 'Sub' $P929 = "61_1271336409.53729" 
     capture_lex $P929
-    .const 'Sub' $P919 = "60_1267204714.47172" 
+    .const 'Sub' $P919 = "60_1271336409.53729" 
     capture_lex $P919
-    .const 'Sub' $P830 = "58_1267204714.47172" 
+    .const 'Sub' $P830 = "58_1271336409.53729" 
     capture_lex $P830
-    .const 'Sub' $P804 = "57_1267204714.47172" 
+    .const 'Sub' $P804 = "57_1271336409.53729" 
     capture_lex $P804
-    .const 'Sub' $P788 = "56_1267204714.47172" 
+    .const 'Sub' $P788 = "56_1271336409.53729" 
     capture_lex $P788
-    .const 'Sub' $P778 = "55_1267204714.47172" 
+    .const 'Sub' $P778 = "55_1271336409.53729" 
     capture_lex $P778
-    .const 'Sub' $P768 = "54_1267204714.47172" 
+    .const 'Sub' $P768 = "54_1271336409.53729" 
     capture_lex $P768
-    .const 'Sub' $P758 = "53_1267204714.47172" 
+    .const 'Sub' $P758 = "53_1271336409.53729" 
     capture_lex $P758
-    .const 'Sub' $P748 = "52_1267204714.47172" 
+    .const 'Sub' $P748 = "52_1271336409.53729" 
     capture_lex $P748
-    .const 'Sub' $P738 = "51_1267204714.47172" 
+    .const 'Sub' $P738 = "51_1271336409.53729" 
     capture_lex $P738
-    .const 'Sub' $P728 = "50_1267204714.47172" 
+    .const 'Sub' $P728 = "50_1271336409.53729" 
     capture_lex $P728
-    .const 'Sub' $P718 = "49_1267204714.47172" 
+    .const 'Sub' $P718 = "49_1271336409.53729" 
     capture_lex $P718
-    .const 'Sub' $P708 = "48_1267204714.47172" 
+    .const 'Sub' $P708 = "48_1271336409.53729" 
     capture_lex $P708
-    .const 'Sub' $P698 = "47_1267204714.47172" 
+    .const 'Sub' $P698 = "47_1271336409.53729" 
     capture_lex $P698
-    .const 'Sub' $P688 = "46_1267204714.47172" 
+    .const 'Sub' $P688 = "46_1271336409.53729" 
     capture_lex $P688
-    .const 'Sub' $P678 = "45_1267204714.47172" 
+    .const 'Sub' $P678 = "45_1271336409.53729" 
     capture_lex $P678
-    .const 'Sub' $P668 = "44_1267204714.47172" 
+    .const 'Sub' $P668 = "44_1271336409.53729" 
     capture_lex $P668
-    .const 'Sub' $P658 = "43_1267204714.47172" 
+    .const 'Sub' $P658 = "43_1271336409.53729" 
     capture_lex $P658
-    .const 'Sub' $P640 = "42_1267204714.47172" 
+    .const 'Sub' $P640 = "42_1271336409.53729" 
     capture_lex $P640
-    .const 'Sub' $P605 = "41_1267204714.47172" 
+    .const 'Sub' $P605 = "41_1271336409.53729" 
     capture_lex $P605
-    .const 'Sub' $P589 = "40_1267204714.47172" 
+    .const 'Sub' $P589 = "40_1271336409.53729" 
     capture_lex $P589
-    .const 'Sub' $P568 = "39_1267204714.47172" 
+    .const 'Sub' $P568 = "39_1271336409.53729" 
     capture_lex $P568
-    .const 'Sub' $P548 = "38_1267204714.47172" 
+    .const 'Sub' $P548 = "38_1271336409.53729" 
     capture_lex $P548
-    .const 'Sub' $P535 = "37_1267204714.47172" 
+    .const 'Sub' $P535 = "37_1271336409.53729" 
     capture_lex $P535
-    .const 'Sub' $P509 = "36_1267204714.47172" 
+    .const 'Sub' $P509 = "36_1271336409.53729" 
     capture_lex $P509
-    .const 'Sub' $P473 = "35_1267204714.47172" 
+    .const 'Sub' $P473 = "35_1271336409.53729" 
     capture_lex $P473
-    .const 'Sub' $P456 = "34_1267204714.47172" 
+    .const 'Sub' $P456 = "34_1271336409.53729" 
     capture_lex $P456
-    .const 'Sub' $P442 = "33_1267204714.47172" 
+    .const 'Sub' $P442 = "33_1271336409.53729" 
     capture_lex $P442
-    .const 'Sub' $P389 = "31_1267204714.47172" 
+    .const 'Sub' $P389 = "31_1271336409.53729" 
     capture_lex $P389
-    .const 'Sub' $P376 = "30_1267204714.47172" 
+    .const 'Sub' $P376 = "30_1271336409.53729" 
     capture_lex $P376
-    .const 'Sub' $P357 = "29_1267204714.47172" 
+    .const 'Sub' $P357 = "29_1271336409.53729" 
     capture_lex $P357
-    .const 'Sub' $P347 = "28_1267204714.47172" 
+    .const 'Sub' $P347 = "28_1271336409.53729" 
     capture_lex $P347
-    .const 'Sub' $P337 = "27_1267204714.47172" 
+    .const 'Sub' $P337 = "27_1271336409.53729" 
     capture_lex $P337
-    .const 'Sub' $P321 = "26_1267204714.47172" 
+    .const 'Sub' $P321 = "26_1271336409.53729" 
     capture_lex $P321
-    .const 'Sub' $P261 = "24_1267204714.47172" 
+    .const 'Sub' $P261 = "24_1271336409.53729" 
     capture_lex $P261
-    .const 'Sub' $P212 = "22_1267204714.47172" 
+    .const 'Sub' $P212 = "22_1271336409.53729" 
     capture_lex $P212
-    .const 'Sub' $P193 = "21_1267204714.47172" 
+    .const 'Sub' $P193 = "21_1271336409.53729" 
     capture_lex $P193
-    .const 'Sub' $P160 = "20_1267204714.47172" 
+    .const 'Sub' $P160 = "20_1271336409.53729" 
     capture_lex $P160
-    .const 'Sub' $P150 = "19_1267204714.47172" 
+    .const 'Sub' $P150 = "19_1271336409.53729" 
     capture_lex $P150
-    .const 'Sub' $P96 = "18_1267204714.47172" 
+    .const 'Sub' $P96 = "18_1271336409.53729" 
     capture_lex $P96
-    .const 'Sub' $P81 = "17_1267204714.47172" 
+    .const 'Sub' $P81 = "17_1271336409.53729" 
     capture_lex $P81
-    .const 'Sub' $P61 = "16_1267204714.47172" 
+    .const 'Sub' $P61 = "16_1271336409.53729" 
     capture_lex $P61
-    .const 'Sub' $P26 = "13_1267204714.47172" 
+    .const 'Sub' $P26 = "13_1271336409.53729" 
     capture_lex $P26
-    .const 'Sub' $P16 = "12_1267204714.47172" 
+    .const 'Sub' $P16 = "12_1271336409.53729" 
     capture_lex $P16
     get_global $P15, "@BLOCK"
     unless_null $P15, vivify_129
@@ -15986,23 +16030,23 @@
     set_global "@BLOCK", $P15
   vivify_129:
 .annotate "line", 9
-    .const 'Sub' $P16 = "12_1267204714.47172" 
+    .const 'Sub' $P16 = "12_1271336409.53729" 
     capture_lex $P16
     .lex "xblock_immediate", $P16
 .annotate "line", 14
-    .const 'Sub' $P26 = "13_1267204714.47172" 
+    .const 'Sub' $P26 = "13_1271336409.53729" 
     capture_lex $P26
     .lex "block_immediate", $P26
 .annotate "line", 24
-    .const 'Sub' $P61 = "16_1267204714.47172" 
+    .const 'Sub' $P61 = "16_1271336409.53729" 
     capture_lex $P61
     .lex "vivitype", $P61
 .annotate "line", 43
-    .const 'Sub' $P81 = "17_1267204714.47172" 
+    .const 'Sub' $P81 = "17_1271336409.53729" 
     capture_lex $P81
     .lex "colonpair_str", $P81
 .annotate "line", 190
-    .const 'Sub' $P96 = "18_1267204714.47172" 
+    .const 'Sub' $P96 = "18_1271336409.53729" 
     capture_lex $P96
     .lex "push_block_handler", $P96
 .annotate "line", 3
@@ -16025,13 +16069,13 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "" :load :init :subid("post127") :outer("11_1267204714.47172")
+.sub "" :load :init :subid("post127") :outer("11_1271336409.53729")
 .annotate "line", 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     .local pmc block
     set block, $P14
 .annotate "line", 5
-    .const 'Sub' $P2164 = "125_1267204714.47172" 
+    .const 'Sub' $P2164 = "125_1271336409.53729" 
     capture_lex $P2164
     $P2164()
     $P2167 = get_root_global ["parrot"], "P6metaclass"
@@ -16040,7 +16084,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2163"  :anon :subid("125_1267204714.47172") :outer("11_1267204714.47172")
+.sub "_block2163"  :anon :subid("125_1271336409.53729") :outer("11_1271336409.53729")
 .annotate "line", 6
     get_global $P2165, "@BLOCK"
     unless_null $P2165, vivify_128
@@ -16055,7 +16099,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "xblock_immediate"  :subid("12_1267204714.47172") :outer("11_1267204714.47172")
+.sub "xblock_immediate"  :subid("12_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_19
 .annotate "line", 9
     new $P18, 'ExceptionHandler'
@@ -16091,10 +16135,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "block_immediate"  :subid("13_1267204714.47172") :outer("11_1267204714.47172")
+.sub "block_immediate"  :subid("13_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_29
 .annotate "line", 14
-    .const 'Sub' $P39 = "14_1267204714.47172" 
+    .const 'Sub' $P39 = "14_1271336409.53729" 
     capture_lex $P39
     new $P28, 'ExceptionHandler'
     set_addr $P28, control_27
@@ -16116,7 +16160,7 @@
     set $P32, $P37
   unless_33_end:
     if $P32, unless_31_end
-    .const 'Sub' $P39 = "14_1267204714.47172" 
+    .const 'Sub' $P39 = "14_1271336409.53729" 
     capture_lex $P39
     $P39()
   unless_31_end:
@@ -16132,9 +16176,9 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block38"  :anon :subid("14_1267204714.47172") :outer("13_1267204714.47172")
+.sub "_block38"  :anon :subid("14_1271336409.53729") :outer("13_1271336409.53729")
 .annotate "line", 16
-    .const 'Sub' $P50 = "15_1267204714.47172" 
+    .const 'Sub' $P50 = "15_1271336409.53729" 
     capture_lex $P50
 .annotate "line", 17
     new $P40, "Undef"
@@ -16157,7 +16201,7 @@
     unless $P44, loop55_done
     shift $P48, $P44
   loop55_redo:
-    .const 'Sub' $P50 = "15_1267204714.47172" 
+    .const 'Sub' $P50 = "15_1271336409.53729" 
     capture_lex $P50
     $P50($P48)
   loop55_next:
@@ -16180,7 +16224,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block49"  :anon :subid("15_1267204714.47172") :outer("14_1267204714.47172")
+.sub "_block49"  :anon :subid("15_1271336409.53729") :outer("14_1271336409.53729")
     .param pmc param_51
 .annotate "line", 18
     .lex "$_", param_51
@@ -16192,7 +16236,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "vivitype"  :subid("16_1267204714.47172") :outer("11_1267204714.47172")
+.sub "vivitype"  :subid("16_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_64
 .annotate "line", 24
     new $P63, 'ExceptionHandler'
@@ -16240,7 +16284,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "colonpair_str"  :subid("17_1267204714.47172") :outer("11_1267204714.47172")
+.sub "colonpair_str"  :subid("17_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_84
 .annotate "line", 43
     new $P83, 'ExceptionHandler'
@@ -16278,7 +16322,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "push_block_handler"  :subid("18_1267204714.47172") :outer("11_1267204714.47172")
+.sub "push_block_handler"  :subid("18_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_99
     .param pmc param_100
 .annotate "line", 190
@@ -16395,7 +16439,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "TOP"  :subid("19_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "TOP"  :subid("19_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_153
 .annotate "line", 33
     new $P152, 'ExceptionHandler'
@@ -16425,7 +16469,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "deflongname"  :subid("20_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "deflongname"  :subid("20_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_163
 .annotate "line", 35
     new $P162, 'ExceptionHandler'
@@ -16514,7 +16558,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "comp_unit"  :subid("21_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "comp_unit"  :subid("21_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_196
 .annotate "line", 49
     new $P195, 'ExceptionHandler'
@@ -16567,10 +16611,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statementlist"  :subid("22_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statementlist"  :subid("22_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_215
 .annotate "line", 57
-    .const 'Sub' $P229 = "23_1267204714.47172" 
+    .const 'Sub' $P229 = "23_1271336409.53729" 
     capture_lex $P229
     new $P214, 'ExceptionHandler'
     set_addr $P214, control_213
@@ -16615,7 +16659,7 @@
     unless $P223, loop254_done
     shift $P227, $P223
   loop254_redo:
-    .const 'Sub' $P229 = "23_1267204714.47172" 
+    .const 'Sub' $P229 = "23_1271336409.53729" 
     capture_lex $P229
     $P229($P227)
   loop254_next:
@@ -16645,7 +16689,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block228"  :anon :subid("23_1267204714.47172") :outer("22_1267204714.47172")
+.sub "_block228"  :anon :subid("23_1271336409.53729") :outer("22_1271336409.53729")
     .param pmc param_231
 .annotate "line", 61
     new $P230, "Undef"
@@ -16705,12 +16749,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement"  :subid("24_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement"  :subid("24_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_264
     .param pmc param_265 :optional
     .param int has_param_265 :opt_flag
 .annotate "line", 72
-    .const 'Sub' $P273 = "25_1267204714.47172" 
+    .const 'Sub' $P273 = "25_1271336409.53729" 
     capture_lex $P273
     new $P263, 'ExceptionHandler'
     set_addr $P263, control_262
@@ -16769,7 +16813,7 @@
     goto if_269_end
   if_269:
 .annotate "line", 74
-    .const 'Sub' $P273 = "25_1267204714.47172" 
+    .const 'Sub' $P273 = "25_1271336409.53729" 
     capture_lex $P273
     $P273()
   if_269_end:
@@ -16788,7 +16832,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block272"  :anon :subid("25_1267204714.47172") :outer("24_1267204714.47172")
+.sub "_block272"  :anon :subid("25_1271336409.53729") :outer("24_1271336409.53729")
 .annotate "line", 75
     new $P274, "Undef"
     .lex "$mc", $P274
@@ -16901,7 +16945,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "xblock"  :subid("26_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "xblock"  :subid("26_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_324
 .annotate "line", 90
     new $P323, 'ExceptionHandler'
@@ -16945,7 +16989,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "pblock"  :subid("27_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "pblock"  :subid("27_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_340
 .annotate "line", 94
     new $P339, 'ExceptionHandler'
@@ -16977,7 +17021,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "block"  :subid("28_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "block"  :subid("28_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_350
 .annotate "line", 98
     new $P349, 'ExceptionHandler'
@@ -17009,7 +17053,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "blockoid"  :subid("29_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "blockoid"  :subid("29_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_360
 .annotate "line", 102
     new $P359, 'ExceptionHandler'
@@ -17062,7 +17106,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "newpad"  :subid("30_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "newpad"  :subid("30_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_379
 .annotate "line", 110
     new $P378, 'ExceptionHandler'
@@ -17097,10 +17141,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<if>"  :subid("31_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<if>"  :subid("31_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_392
 .annotate "line", 117
-    .const 'Sub' $P420 = "32_1267204714.47172" 
+    .const 'Sub' $P420 = "32_1271336409.53729" 
     capture_lex $P420
     new $P391, 'ExceptionHandler'
     set_addr $P391, control_390
@@ -17185,7 +17229,7 @@
     isgt $I418, $N417, 0.0
     unless $I418, loop435_done
   loop435_redo:
-    .const 'Sub' $P420 = "32_1267204714.47172" 
+    .const 'Sub' $P420 = "32_1271336409.53729" 
     capture_lex $P420
     $P420()
   loop435_next:
@@ -17213,7 +17257,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block419"  :anon :subid("32_1267204714.47172") :outer("31_1267204714.47172")
+.sub "_block419"  :anon :subid("32_1271336409.53729") :outer("31_1271336409.53729")
 .annotate "line", 126
     new $P421, "Undef"
     .lex "$else", $P421
@@ -17252,7 +17296,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<unless>"  :subid("33_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<unless>"  :subid("33_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_445
 .annotate "line", 133
     new $P444, 'ExceptionHandler'
@@ -17293,7 +17337,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<while>"  :subid("34_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<while>"  :subid("34_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_459
 .annotate "line", 139
     new $P458, 'ExceptionHandler'
@@ -17343,7 +17387,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<repeat>"  :subid("35_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<repeat>"  :subid("35_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_476
 .annotate "line", 145
     new $P475, 'ExceptionHandler'
@@ -17443,7 +17487,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<for>"  :subid("36_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<for>"  :subid("36_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_512
 .annotate "line", 159
     new $P511, 'ExceptionHandler'
@@ -17523,7 +17567,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<return>"  :subid("37_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<return>"  :subid("37_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_538
 .annotate "line", 172
     new $P537, 'ExceptionHandler'
@@ -17558,7 +17602,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<CATCH>"  :subid("38_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<CATCH>"  :subid("38_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_551
 .annotate "line", 176
     new $P550, 'ExceptionHandler'
@@ -17616,7 +17660,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<CONTROL>"  :subid("39_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<CONTROL>"  :subid("39_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_571
 .annotate "line", 183
     new $P570, 'ExceptionHandler'
@@ -17674,7 +17718,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_prefix:sym<INIT>"  :subid("40_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_prefix:sym<INIT>"  :subid("40_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_592
 .annotate "line", 227
     new $P591, 'ExceptionHandler'
@@ -17720,7 +17764,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_prefix:sym<try>"  :subid("41_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_prefix:sym<try>"  :subid("41_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_608
 .annotate "line", 232
     new $P607, 'ExceptionHandler'
@@ -17797,7 +17841,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "blorst"  :subid("42_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "blorst"  :subid("42_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_643
 .annotate "line", 255
     new $P642, 'ExceptionHandler'
@@ -17856,7 +17900,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_cond:sym<if>"  :subid("43_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_cond:sym<if>"  :subid("43_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_661
 .annotate "line", 263
     new $P660, 'ExceptionHandler'
@@ -17886,7 +17930,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_cond:sym<unless>"  :subid("44_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_cond:sym<unless>"  :subid("44_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_671
 .annotate "line", 264
     new $P670, 'ExceptionHandler'
@@ -17916,7 +17960,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_loop:sym<while>"  :subid("45_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_loop:sym<while>"  :subid("45_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_681
 .annotate "line", 266
     new $P680, 'ExceptionHandler'
@@ -17946,7 +17990,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_loop:sym<until>"  :subid("46_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_loop:sym<until>"  :subid("46_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_691
 .annotate "line", 267
     new $P690, 'ExceptionHandler'
@@ -17976,7 +18020,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<fatarrow>"  :subid("47_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<fatarrow>"  :subid("47_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_701
 .annotate "line", 271
     new $P700, 'ExceptionHandler'
@@ -18006,7 +18050,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<colonpair>"  :subid("48_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<colonpair>"  :subid("48_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_711
 .annotate "line", 272
     new $P710, 'ExceptionHandler'
@@ -18036,7 +18080,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<variable>"  :subid("49_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<variable>"  :subid("49_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_721
 .annotate "line", 273
     new $P720, 'ExceptionHandler'
@@ -18066,7 +18110,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<package_declarator>"  :subid("50_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<package_declarator>"  :subid("50_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_731
 .annotate "line", 274
     new $P730, 'ExceptionHandler'
@@ -18096,7 +18140,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<scope_declarator>"  :subid("51_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<scope_declarator>"  :subid("51_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_741
 .annotate "line", 275
     new $P740, 'ExceptionHandler'
@@ -18126,7 +18170,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<routine_declarator>"  :subid("52_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<routine_declarator>"  :subid("52_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_751
 .annotate "line", 276
     new $P750, 'ExceptionHandler'
@@ -18156,7 +18200,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<regex_declarator>"  :subid("53_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<regex_declarator>"  :subid("53_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_761
 .annotate "line", 277
     new $P760, 'ExceptionHandler'
@@ -18186,7 +18230,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<statement_prefix>"  :subid("54_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<statement_prefix>"  :subid("54_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_771
 .annotate "line", 278
     new $P770, 'ExceptionHandler'
@@ -18216,7 +18260,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<lambda>"  :subid("55_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<lambda>"  :subid("55_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_781
 .annotate "line", 279
     new $P780, 'ExceptionHandler'
@@ -18246,7 +18290,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "fatarrow"  :subid("56_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "fatarrow"  :subid("56_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_791
 .annotate "line", 281
     new $P790, 'ExceptionHandler'
@@ -18295,7 +18339,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "colonpair"  :subid("57_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "colonpair"  :subid("57_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_807
 .annotate "line", 287
     new $P806, 'ExceptionHandler'
@@ -18376,10 +18420,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "variable"  :subid("58_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "variable"  :subid("58_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_833
 .annotate "line", 295
-    .const 'Sub' $P846 = "59_1267204714.47172" 
+    .const 'Sub' $P846 = "59_1271336409.53729" 
     capture_lex $P846
     new $P832, 'ExceptionHandler'
     set_addr $P832, control_831
@@ -18403,7 +18447,7 @@
   vivify_296:
     if $P838, if_836
 .annotate "line", 301
-    .const 'Sub' $P846 = "59_1267204714.47172" 
+    .const 'Sub' $P846 = "59_1271336409.53729" 
     capture_lex $P846
     $P846()
     goto if_836_end
@@ -18440,7 +18484,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block845"  :anon :subid("59_1267204714.47172") :outer("58_1267204714.47172")
+.sub "_block845"  :anon :subid("59_1271336409.53729") :outer("58_1271336409.53729")
 .annotate "line", 302
     $P847 = root_new ['parrot';'ResizablePMCArray']
     .lex "@name", $P847
@@ -18609,7 +18653,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_declarator:sym<module>"  :subid("60_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "package_declarator:sym<module>"  :subid("60_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_922
 .annotate "line", 333
     new $P921, 'ExceptionHandler'
@@ -18639,7 +18683,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_declarator:sym<class>"  :subid("61_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "package_declarator:sym<class>"  :subid("61_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_932
 .annotate "line", 334
     new $P931, 'ExceptionHandler'
@@ -18796,7 +18840,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_def"  :subid("62_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "package_def"  :subid("62_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_985
 .annotate "line", 357
     new $P984, 'ExceptionHandler'
@@ -18874,7 +18918,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<my>"  :subid("63_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scope_declarator:sym<my>"  :subid("63_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1009
 .annotate "line", 364
     new $P1008, 'ExceptionHandler'
@@ -18904,7 +18948,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<our>"  :subid("64_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scope_declarator:sym<our>"  :subid("64_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1019
 .annotate "line", 365
     new $P1018, 'ExceptionHandler'
@@ -18934,7 +18978,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<has>"  :subid("65_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scope_declarator:sym<has>"  :subid("65_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1029
 .annotate "line", 366
     new $P1028, 'ExceptionHandler'
@@ -18964,7 +19008,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scoped"  :subid("66_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scoped"  :subid("66_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1039
 .annotate "line", 368
     new $P1038, 'ExceptionHandler'
@@ -19022,10 +19066,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "variable_declarator"  :subid("67_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "variable_declarator"  :subid("67_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1056
 .annotate "line", 374
-    .const 'Sub' $P1096 = "68_1267204714.47172" 
+    .const 'Sub' $P1096 = "68_1271336409.53729" 
     capture_lex $P1096
     new $P1055, 'ExceptionHandler'
     set_addr $P1055, control_1054
@@ -19107,7 +19151,7 @@
     iseq $I1081, $S1080, "has"
     if $I1081, if_1078
 .annotate "line", 391
-    .const 'Sub' $P1096 = "68_1267204714.47172" 
+    .const 'Sub' $P1096 = "68_1271336409.53729" 
     capture_lex $P1096
     $P1096()
     goto if_1078_end
@@ -19167,7 +19211,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1095"  :anon :subid("68_1267204714.47172") :outer("67_1267204714.47172")
+.sub "_block1095"  :anon :subid("68_1271336409.53729") :outer("67_1271336409.53729")
 .annotate "line", 392
     new $P1097, "Undef"
     .lex "$scope", $P1097
@@ -19228,7 +19272,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_declarator:sym<sub>"  :subid("69_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "routine_declarator:sym<sub>"  :subid("69_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1127
 .annotate "line", 402
     new $P1126, 'ExceptionHandler'
@@ -19258,7 +19302,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_declarator:sym<method>"  :subid("70_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "routine_declarator:sym<method>"  :subid("70_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1137
 .annotate "line", 403
     new $P1136, 'ExceptionHandler'
@@ -19288,10 +19332,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_def"  :subid("71_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "routine_def"  :subid("71_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1147
 .annotate "line", 405
-    .const 'Sub' $P1158 = "72_1267204714.47172" 
+    .const 'Sub' $P1158 = "72_1271336409.53729" 
     capture_lex $P1158
     new $P1146, 'ExceptionHandler'
     set_addr $P1146, control_1145
@@ -19328,7 +19372,7 @@
     new $P1156, "Undef"
   vivify_380:
     unless $P1156, if_1154_end
-    .const 'Sub' $P1158 = "72_1267204714.47172" 
+    .const 'Sub' $P1158 = "72_1271336409.53729" 
     capture_lex $P1158
     $P1158()
   if_1154_end:
@@ -19347,7 +19391,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1157"  :anon :subid("72_1267204714.47172") :outer("71_1267204714.47172")
+.sub "_block1157"  :anon :subid("72_1271336409.53729") :outer("71_1271336409.53729")
 .annotate "line", 410
     new $P1159, "Undef"
     .lex "$name", $P1159
@@ -19443,10 +19487,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "method_def"  :subid("73_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "method_def"  :subid("73_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1197
 .annotate "line", 423
-    .const 'Sub' $P1213 = "74_1267204714.47172" 
+    .const 'Sub' $P1213 = "74_1271336409.53729" 
     capture_lex $P1213
     new $P1196, 'ExceptionHandler'
     set_addr $P1196, control_1195
@@ -19498,7 +19542,7 @@
     new $P1211, "Undef"
   vivify_399:
     unless $P1211, if_1209_end
-    .const 'Sub' $P1213 = "74_1267204714.47172" 
+    .const 'Sub' $P1213 = "74_1271336409.53729" 
     capture_lex $P1213
     $P1213()
   if_1209_end:
@@ -19517,7 +19561,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1212"  :anon :subid("74_1267204714.47172") :outer("73_1267204714.47172")
+.sub "_block1212"  :anon :subid("74_1271336409.53729") :outer("73_1271336409.53729")
 .annotate "line", 430
     new $P1214, "Undef"
     .lex "$name", $P1214
@@ -19548,10 +19592,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "signature"  :subid("75_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "signature"  :subid("75_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1231
 .annotate "line", 437
-    .const 'Sub' $P1242 = "76_1267204714.47172" 
+    .const 'Sub' $P1242 = "76_1271336409.53729" 
     capture_lex $P1242
     new $P1230, 'ExceptionHandler'
     set_addr $P1230, control_1229
@@ -19595,7 +19639,7 @@
     unless $P1236, loop1248_done
     shift $P1240, $P1236
   loop1248_redo:
-    .const 'Sub' $P1242 = "76_1267204714.47172" 
+    .const 'Sub' $P1242 = "76_1271336409.53729" 
     capture_lex $P1242
     $P1242($P1240)
   loop1248_next:
@@ -19620,7 +19664,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1241"  :anon :subid("76_1267204714.47172") :outer("75_1267204714.47172")
+.sub "_block1241"  :anon :subid("76_1271336409.53729") :outer("75_1271336409.53729")
     .param pmc param_1243
 .annotate "line", 439
     .lex "$_", param_1243
@@ -19633,7 +19677,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "parameter"  :subid("77_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "parameter"  :subid("77_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1255
 .annotate "line", 442
     new $P1254, 'ExceptionHandler'
@@ -19865,7 +19909,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "param_var"  :subid("78_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "param_var"  :subid("78_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1339
 .annotate "line", 474
     new $P1338, 'ExceptionHandler'
@@ -19918,7 +19962,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "named_param"  :subid("79_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "named_param"  :subid("79_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1359
 .annotate "line", 482
     new $P1358, 'ExceptionHandler'
@@ -19971,14 +20015,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "regex_declarator"  :subid("80_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "regex_declarator"  :subid("80_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1376
     .param pmc param_1377 :optional
     .param int has_param_1377 :opt_flag
 .annotate "line", 488
-    .const 'Sub' $P1447 = "82_1267204714.47172" 
+    .const 'Sub' $P1447 = "82_1271336409.53729" 
     capture_lex $P1447
-    .const 'Sub' $P1419 = "81_1267204714.47172" 
+    .const 'Sub' $P1419 = "81_1271336409.53729" 
     capture_lex $P1419
     new $P1375, 'ExceptionHandler'
     set_addr $P1375, control_1374
@@ -20036,13 +20080,13 @@
     iseq $I1417, $S1416, "open"
     if $I1417, if_1414
 .annotate "line", 534
-    .const 'Sub' $P1447 = "82_1267204714.47172" 
+    .const 'Sub' $P1447 = "82_1271336409.53729" 
     capture_lex $P1447
     $P1447()
     goto if_1414_end
   if_1414:
 .annotate "line", 521
-    .const 'Sub' $P1419 = "81_1267204714.47172" 
+    .const 'Sub' $P1419 = "81_1271336409.53729" 
     capture_lex $P1419
     $P1419()
   if_1414_end:
@@ -20099,7 +20143,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1446"  :anon :subid("82_1267204714.47172") :outer("80_1267204714.47172")
+.sub "_block1446"  :anon :subid("82_1271336409.53729") :outer("80_1271336409.53729")
 .annotate "line", 535
     new $P1448, "Undef"
     .lex "$regex", $P1448
@@ -20150,7 +20194,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1418"  :anon :subid("81_1267204714.47172") :outer("80_1267204714.47172")
+.sub "_block1418"  :anon :subid("81_1271336409.53729") :outer("80_1271336409.53729")
 .annotate "line", 522
     $P1420 = root_new ['parrot';'Hash']
     .lex "%h", $P1420
@@ -20248,7 +20292,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "dotty"  :subid("83_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "dotty"  :subid("83_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1475
 .annotate "line", 552
     new $P1474, 'ExceptionHandler'
@@ -20345,7 +20389,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<self>"  :subid("84_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<self>"  :subid("84_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1507
 .annotate "line", 561
     new $P1506, 'ExceptionHandler'
@@ -20370,7 +20414,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<identifier>"  :subid("85_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<identifier>"  :subid("85_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1516
 .annotate "line", 565
     new $P1515, 'ExceptionHandler'
@@ -20419,7 +20463,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<name>"  :subid("86_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<name>"  :subid("86_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1532
 .annotate "line", 571
     new $P1531, 'ExceptionHandler'
@@ -20537,7 +20581,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<pir::op>"  :subid("87_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<pir::op>"  :subid("87_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1574
 .annotate "line", 585
     new $P1573, 'ExceptionHandler'
@@ -20628,7 +20672,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "args"  :subid("88_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "args"  :subid("88_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1603
 .annotate "line", 600
     new $P1602, 'ExceptionHandler'
@@ -20658,10 +20702,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "arglist"  :subid("89_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "arglist"  :subid("89_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1613
 .annotate "line", 602
-    .const 'Sub' $P1624 = "90_1267204714.47172" 
+    .const 'Sub' $P1624 = "90_1271336409.53729" 
     capture_lex $P1624
     new $P1612, 'ExceptionHandler'
     set_addr $P1612, control_1611
@@ -20693,7 +20737,7 @@
     new $P1622, "Undef"
   vivify_498:
     unless $P1622, if_1620_end
-    .const 'Sub' $P1624 = "90_1267204714.47172" 
+    .const 'Sub' $P1624 = "90_1271336409.53729" 
     capture_lex $P1624
     $P1624()
   if_1620_end:
@@ -20801,9 +20845,9 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1623"  :anon :subid("90_1267204714.47172") :outer("89_1267204714.47172")
+.sub "_block1623"  :anon :subid("90_1271336409.53729") :outer("89_1271336409.53729")
 .annotate "line", 604
-    .const 'Sub' $P1645 = "91_1267204714.47172" 
+    .const 'Sub' $P1645 = "91_1271336409.53729" 
     capture_lex $P1645
 .annotate "line", 605
     new $P1625, "Undef"
@@ -20856,7 +20900,7 @@
     unless $P1639, loop1650_done
     shift $P1643, $P1639
   loop1650_redo:
-    .const 'Sub' $P1645 = "91_1267204714.47172" 
+    .const 'Sub' $P1645 = "91_1271336409.53729" 
     capture_lex $P1645
     $P1645($P1643)
   loop1650_next:
@@ -20879,7 +20923,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1644"  :anon :subid("91_1267204714.47172") :outer("90_1267204714.47172")
+.sub "_block1644"  :anon :subid("91_1271336409.53729") :outer("90_1271336409.53729")
     .param pmc param_1646
 .annotate "line", 607
     .lex "$_", param_1646
@@ -20891,7 +20935,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<value>"  :subid("92_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<value>"  :subid("92_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1697
 .annotate "line", 624
     new $P1696, 'ExceptionHandler'
@@ -20921,7 +20965,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<( )>"  :subid("93_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<( )>"  :subid("93_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1707
 .annotate "line", 626
     new $P1706, 'ExceptionHandler'
@@ -20977,7 +21021,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<[ ]>"  :subid("94_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<[ ]>"  :subid("94_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1725
 .annotate "line", 632
     new $P1724, 'ExceptionHandler'
@@ -21053,7 +21097,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<ang>"  :subid("95_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<ang>"  :subid("95_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1752
 .annotate "line", 647
     new $P1751, 'ExceptionHandler'
@@ -21083,7 +21127,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("96_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("96_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1762
 .annotate "line", 648
     new $P1761, 'ExceptionHandler'
@@ -21113,7 +21157,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<{ }>"  :subid("97_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<{ }>"  :subid("97_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1772
 .annotate "line", 650
     new $P1771, 'ExceptionHandler'
@@ -21177,7 +21221,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<sigil>"  :subid("98_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<sigil>"  :subid("98_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1792
 .annotate "line", 656
     new $P1791, 'ExceptionHandler'
@@ -21256,7 +21300,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "semilist"  :subid("99_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "semilist"  :subid("99_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1821
 .annotate "line", 663
     new $P1820, 'ExceptionHandler'
@@ -21286,7 +21330,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<[ ]>"  :subid("100_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<[ ]>"  :subid("100_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1831
 .annotate "line", 665
     new $P1830, 'ExceptionHandler'
@@ -21323,7 +21367,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<{ }>"  :subid("101_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<{ }>"  :subid("101_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1844
 .annotate "line", 671
     new $P1843, 'ExceptionHandler'
@@ -21360,7 +21404,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<ang>"  :subid("102_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<ang>"  :subid("102_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1857
 .annotate "line", 677
     new $P1856, 'ExceptionHandler'
@@ -21397,7 +21441,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<( )>"  :subid("103_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<( )>"  :subid("103_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1870
 .annotate "line", 683
     new $P1869, 'ExceptionHandler'
@@ -21429,7 +21473,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "value"  :subid("104_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "value"  :subid("104_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1880
 .annotate "line", 687
     new $P1879, 'ExceptionHandler'
@@ -21484,7 +21528,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "number"  :subid("105_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "number"  :subid("105_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1897
 .annotate "line", 691
     new $P1896, 'ExceptionHandler'
@@ -21562,7 +21606,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<apos>"  :subid("106_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<apos>"  :subid("106_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1925
 .annotate "line", 697
     new $P1924, 'ExceptionHandler'
@@ -21592,7 +21636,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<dblq>"  :subid("107_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<dblq>"  :subid("107_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1935
 .annotate "line", 698
     new $P1934, 'ExceptionHandler'
@@ -21622,7 +21666,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<qq>"  :subid("108_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<qq>"  :subid("108_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1945
 .annotate "line", 699
     new $P1944, 'ExceptionHandler'
@@ -21652,7 +21696,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<q>"  :subid("109_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<q>"  :subid("109_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1955
 .annotate "line", 700
     new $P1954, 'ExceptionHandler'
@@ -21682,7 +21726,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<Q>"  :subid("110_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<Q>"  :subid("110_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1965
 .annotate "line", 701
     new $P1964, 'ExceptionHandler'
@@ -21712,7 +21756,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<Q:PIR>"  :subid("111_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<Q:PIR>"  :subid("111_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1975
 .annotate "line", 702
     new $P1974, 'ExceptionHandler'
@@ -21748,7 +21792,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym</ />"  :subid("112_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym</ />"  :subid("112_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1989
     .param pmc param_1990 :optional
     .param int has_param_1990 :opt_flag
@@ -21857,7 +21901,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote_escape:sym<$>"  :subid("113_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote_escape:sym<$>"  :subid("113_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2026
 .annotate "line", 731
     new $P2025, 'ExceptionHandler'
@@ -21887,7 +21931,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote_escape:sym<{ }>"  :subid("114_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote_escape:sym<{ }>"  :subid("114_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2036
 .annotate "line", 732
     new $P2035, 'ExceptionHandler'
@@ -21925,7 +21969,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<.>"  :subid("115_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postfix:sym<.>"  :subid("115_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2050
 .annotate "line", 740
     new $P2049, 'ExceptionHandler'
@@ -21955,7 +21999,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<++>"  :subid("116_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postfix:sym<++>"  :subid("116_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2060
 .annotate "line", 742
     new $P2059, 'ExceptionHandler'
@@ -21985,7 +22029,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<-->"  :subid("117_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postfix:sym<-->"  :subid("117_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2070
 .annotate "line", 748
     new $P2069, 'ExceptionHandler'
@@ -22015,7 +22059,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "prefix:sym<make>"  :subid("118_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "prefix:sym<make>"  :subid("118_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2080
 .annotate "line", 754
     new $P2079, 'ExceptionHandler'
@@ -22045,7 +22089,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "infix:sym<~~>"  :subid("119_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "infix:sym<~~>"  :subid("119_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2092
 .annotate "line", 763
     new $P2091, 'ExceptionHandler'
@@ -22071,18 +22115,18 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "_block2099"  :subid("120_1267204714.47172") :outer("11_1267204714.47172")
+.sub "_block2099"  :subid("120_1271336409.53729") :outer("11_1271336409.53729")
 .annotate "line", 768
-    .const 'Sub' $P2135 = "124_1267204714.47172" 
+    .const 'Sub' $P2135 = "124_1271336409.53729" 
     capture_lex $P2135
-    .const 'Sub' $P2125 = "123_1267204714.47172" 
+    .const 'Sub' $P2125 = "123_1271336409.53729" 
     capture_lex $P2125
-    .const 'Sub' $P2115 = "122_1267204714.47172" 
+    .const 'Sub' $P2115 = "122_1271336409.53729" 
     capture_lex $P2115
-    .const 'Sub' $P2101 = "121_1267204714.47172" 
+    .const 'Sub' $P2101 = "121_1271336409.53729" 
     capture_lex $P2101
 .annotate "line", 779
-    .const 'Sub' $P2135 = "124_1267204714.47172" 
+    .const 'Sub' $P2135 = "124_1271336409.53729" 
     capture_lex $P2135
 .annotate "line", 768
     .return ($P2135)
@@ -22090,7 +22134,7 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "metachar:sym<:my>"  :subid("121_1267204714.47172") :method :outer("120_1267204714.47172")
+.sub "metachar:sym<:my>"  :subid("121_1271336409.53729") :method :outer("120_1271336409.53729")
     .param pmc param_2104
 .annotate "line", 770
     new $P2103, 'ExceptionHandler'
@@ -22129,7 +22173,7 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "metachar:sym<{ }>"  :subid("122_1267204714.47172") :method :outer("120_1267204714.47172")
+.sub "metachar:sym<{ }>"  :subid("122_1271336409.53729") :method :outer("120_1271336409.53729")
     .param pmc param_2118
 .annotate "line", 775
     new $P2117, 'ExceptionHandler'
@@ -22159,7 +22203,7 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "assertion:sym<{ }>"  :subid("123_1267204714.47172") :method :outer("120_1267204714.47172")
+.sub "assertion:sym<{ }>"  :subid("123_1271336409.53729") :method :outer("120_1271336409.53729")
     .param pmc param_2128
 .annotate "line", 777
     new $P2127, 'ExceptionHandler'
@@ -22189,7 +22233,7 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "codeblock"  :subid("124_1267204714.47172") :method :outer("120_1267204714.47172")
+.sub "codeblock"  :subid("124_1271336409.53729") :method :outer("120_1271336409.53729")
     .param pmc param_2138
 .annotate "line", 779
     new $P2137, 'ExceptionHandler'

Modified: branches/avl_string_cache/ext/nqp-rx/src/stage0/P6Regex-s0.pir
==============================================================================
--- branches/avl_string_cache/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -16,7 +16,7 @@
 ### .include 'gen/p6regex-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204688.82934")
+.sub "_block11"  :anon :subid("10_1271336383.463")
 .annotate "line", 0
     get_hll_global $P14, ["Regex";"P6Regex";"Grammar"], "_block13" 
     capture_lex $P14
@@ -30,9 +30,9 @@
 
 
 .namespace []
-.sub "" :load :init :subid("post158") :outer("10_1267204688.82934")
+.sub "" :load :init :subid("post158") :outer("10_1271336383.463")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204688.82934" 
+    .const 'Sub' $P12 = "10_1271336383.463" 
     .local pmc block
     set block, $P12
     $P580 = get_root_global ["parrot"], "P6metaclass"
@@ -41,140 +41,140 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block13"  :subid("11_1267204688.82934") :outer("10_1267204688.82934")
+.sub "_block13"  :subid("11_1271336383.463") :outer("10_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P571 = "156_1267204688.82934" 
+    .const 'Sub' $P571 = "156_1271336383.463" 
     capture_lex $P571
-    .const 'Sub' $P563 = "154_1267204688.82934" 
+    .const 'Sub' $P563 = "154_1271336383.463" 
     capture_lex $P563
-    .const 'Sub' $P555 = "152_1267204688.82934" 
+    .const 'Sub' $P555 = "152_1271336383.463" 
     capture_lex $P555
-    .const 'Sub' $P534 = "147_1267204688.82934" 
+    .const 'Sub' $P534 = "147_1271336383.463" 
     capture_lex $P534
-    .const 'Sub' $P499 = "141_1267204688.82934" 
+    .const 'Sub' $P499 = "141_1271336383.463" 
     capture_lex $P499
-    .const 'Sub' $P487 = "138_1267204688.82934" 
+    .const 'Sub' $P487 = "138_1271336383.463" 
     capture_lex $P487
-    .const 'Sub' $P474 = "135_1267204688.82934" 
+    .const 'Sub' $P474 = "135_1271336383.463" 
     capture_lex $P474
-    .const 'Sub' $P468 = "133_1267204688.82934" 
+    .const 'Sub' $P468 = "133_1271336383.463" 
     capture_lex $P468
-    .const 'Sub' $P457 = "130_1267204688.82934" 
+    .const 'Sub' $P457 = "130_1271336383.463" 
     capture_lex $P457
-    .const 'Sub' $P446 = "127_1267204688.82934" 
+    .const 'Sub' $P446 = "127_1271336383.463" 
     capture_lex $P446
-    .const 'Sub' $P437 = "123_1267204688.82934" 
+    .const 'Sub' $P437 = "123_1271336383.463" 
     capture_lex $P437
-    .const 'Sub' $P431 = "121_1267204688.82934" 
+    .const 'Sub' $P431 = "121_1271336383.463" 
     capture_lex $P431
-    .const 'Sub' $P425 = "119_1267204688.82934" 
+    .const 'Sub' $P425 = "119_1271336383.463" 
     capture_lex $P425
-    .const 'Sub' $P419 = "117_1267204688.82934" 
+    .const 'Sub' $P419 = "117_1271336383.463" 
     capture_lex $P419
-    .const 'Sub' $P413 = "115_1267204688.82934" 
+    .const 'Sub' $P413 = "115_1271336383.463" 
     capture_lex $P413
-    .const 'Sub' $P405 = "113_1267204688.82934" 
+    .const 'Sub' $P405 = "113_1271336383.463" 
     capture_lex $P405
-    .const 'Sub' $P394 = "111_1267204688.82934" 
+    .const 'Sub' $P394 = "111_1271336383.463" 
     capture_lex $P394
-    .const 'Sub' $P383 = "109_1267204688.82934" 
+    .const 'Sub' $P383 = "109_1271336383.463" 
     capture_lex $P383
-    .const 'Sub' $P377 = "107_1267204688.82934" 
+    .const 'Sub' $P377 = "107_1271336383.463" 
     capture_lex $P377
-    .const 'Sub' $P371 = "105_1267204688.82934" 
+    .const 'Sub' $P371 = "105_1271336383.463" 
     capture_lex $P371
-    .const 'Sub' $P365 = "103_1267204688.82934" 
+    .const 'Sub' $P365 = "103_1271336383.463" 
     capture_lex $P365
-    .const 'Sub' $P359 = "101_1267204688.82934" 
+    .const 'Sub' $P359 = "101_1271336383.463" 
     capture_lex $P359
-    .const 'Sub' $P353 = "99_1267204688.82934" 
+    .const 'Sub' $P353 = "99_1271336383.463" 
     capture_lex $P353
-    .const 'Sub' $P347 = "97_1267204688.82934" 
+    .const 'Sub' $P347 = "97_1271336383.463" 
     capture_lex $P347
-    .const 'Sub' $P341 = "95_1267204688.82934" 
+    .const 'Sub' $P341 = "95_1271336383.463" 
     capture_lex $P341
-    .const 'Sub' $P335 = "93_1267204688.82934" 
+    .const 'Sub' $P335 = "93_1271336383.463" 
     capture_lex $P335
-    .const 'Sub' $P323 = "89_1267204688.82934" 
+    .const 'Sub' $P323 = "89_1271336383.463" 
     capture_lex $P323
-    .const 'Sub' $P311 = "87_1267204688.82934" 
+    .const 'Sub' $P311 = "87_1271336383.463" 
     capture_lex $P311
-    .const 'Sub' $P304 = "85_1267204688.82934" 
+    .const 'Sub' $P304 = "85_1271336383.463" 
     capture_lex $P304
-    .const 'Sub' $P287 = "83_1267204688.82934" 
+    .const 'Sub' $P287 = "83_1271336383.463" 
     capture_lex $P287
-    .const 'Sub' $P280 = "81_1267204688.82934" 
+    .const 'Sub' $P280 = "81_1271336383.463" 
     capture_lex $P280
-    .const 'Sub' $P274 = "79_1267204688.82934" 
+    .const 'Sub' $P274 = "79_1271336383.463" 
     capture_lex $P274
-    .const 'Sub' $P268 = "77_1267204688.82934" 
+    .const 'Sub' $P268 = "77_1271336383.463" 
     capture_lex $P268
-    .const 'Sub' $P261 = "75_1267204688.82934" 
+    .const 'Sub' $P261 = "75_1271336383.463" 
     capture_lex $P261
-    .const 'Sub' $P254 = "73_1267204688.82934" 
+    .const 'Sub' $P254 = "73_1271336383.463" 
     capture_lex $P254
-    .const 'Sub' $P247 = "71_1267204688.82934" 
+    .const 'Sub' $P247 = "71_1271336383.463" 
     capture_lex $P247
-    .const 'Sub' $P240 = "69_1267204688.82934" 
+    .const 'Sub' $P240 = "69_1271336383.463" 
     capture_lex $P240
-    .const 'Sub' $P234 = "67_1267204688.82934" 
+    .const 'Sub' $P234 = "67_1271336383.463" 
     capture_lex $P234
-    .const 'Sub' $P228 = "65_1267204688.82934" 
+    .const 'Sub' $P228 = "65_1271336383.463" 
     capture_lex $P228
-    .const 'Sub' $P222 = "63_1267204688.82934" 
+    .const 'Sub' $P222 = "63_1271336383.463" 
     capture_lex $P222
-    .const 'Sub' $P216 = "61_1267204688.82934" 
+    .const 'Sub' $P216 = "61_1271336383.463" 
     capture_lex $P216
-    .const 'Sub' $P210 = "59_1267204688.82934" 
+    .const 'Sub' $P210 = "59_1271336383.463" 
     capture_lex $P210
-    .const 'Sub' $P205 = "57_1267204688.82934" 
+    .const 'Sub' $P205 = "57_1271336383.463" 
     capture_lex $P205
-    .const 'Sub' $P200 = "55_1267204688.82934" 
+    .const 'Sub' $P200 = "55_1271336383.463" 
     capture_lex $P200
-    .const 'Sub' $P194 = "53_1267204688.82934" 
+    .const 'Sub' $P194 = "53_1271336383.463" 
     capture_lex $P194
-    .const 'Sub' $P188 = "51_1267204688.82934" 
+    .const 'Sub' $P188 = "51_1271336383.463" 
     capture_lex $P188
-    .const 'Sub' $P182 = "49_1267204688.82934" 
+    .const 'Sub' $P182 = "49_1271336383.463" 
     capture_lex $P182
-    .const 'Sub' $P166 = "44_1267204688.82934" 
+    .const 'Sub' $P166 = "44_1271336383.463" 
     capture_lex $P166
-    .const 'Sub' $P154 = "42_1267204688.82934" 
+    .const 'Sub' $P154 = "42_1271336383.463" 
     capture_lex $P154
-    .const 'Sub' $P147 = "40_1267204688.82934" 
+    .const 'Sub' $P147 = "40_1271336383.463" 
     capture_lex $P147
-    .const 'Sub' $P140 = "38_1267204688.82934" 
+    .const 'Sub' $P140 = "38_1271336383.463" 
     capture_lex $P140
-    .const 'Sub' $P133 = "36_1267204688.82934" 
+    .const 'Sub' $P133 = "36_1271336383.463" 
     capture_lex $P133
-    .const 'Sub' $P114 = "31_1267204688.82934" 
+    .const 'Sub' $P114 = "31_1271336383.463" 
     capture_lex $P114
-    .const 'Sub' $P101 = "28_1267204688.82934" 
+    .const 'Sub' $P101 = "28_1271336383.463" 
     capture_lex $P101
-    .const 'Sub' $P94 = "26_1267204688.82934" 
+    .const 'Sub' $P94 = "26_1271336383.463" 
     capture_lex $P94
-    .const 'Sub' $P82 = "24_1267204688.82934" 
+    .const 'Sub' $P82 = "24_1271336383.463" 
     capture_lex $P82
-    .const 'Sub' $P75 = "22_1267204688.82934" 
+    .const 'Sub' $P75 = "22_1271336383.463" 
     capture_lex $P75
-    .const 'Sub' $P63 = "20_1267204688.82934" 
+    .const 'Sub' $P63 = "20_1271336383.463" 
     capture_lex $P63
-    .const 'Sub' $P56 = "18_1267204688.82934" 
+    .const 'Sub' $P56 = "18_1271336383.463" 
     capture_lex $P56
-    .const 'Sub' $P46 = "15_1267204688.82934" 
+    .const 'Sub' $P46 = "15_1271336383.463" 
     capture_lex $P46
-    .const 'Sub' $P38 = "13_1267204688.82934" 
+    .const 'Sub' $P38 = "13_1271336383.463" 
     capture_lex $P38
-    .const 'Sub' $P15 = "12_1267204688.82934" 
+    .const 'Sub' $P15 = "12_1271336383.463" 
     capture_lex $P15
-    .const 'Sub' $P571 = "156_1267204688.82934" 
+    .const 'Sub' $P571 = "156_1271336383.463" 
     capture_lex $P571
     .return ($P571)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "obs"  :subid("12_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "obs"  :subid("12_1271336383.463") :method :outer("11_1271336383.463")
     .param pmc param_18
     .param pmc param_19
     .param pmc param_20 :optional
@@ -222,7 +222,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "ws"  :subid("13_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "ws"  :subid("13_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx39_tgt
     .local int rx39_pos
@@ -304,7 +304,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__ws"  :subid("14_1267204688.82934") :method
+.sub "!PREFIX__ws"  :subid("14_1271336383.463") :method
 .annotate "line", 3
     new $P41, "ResizablePMCArray"
     push $P41, ""
@@ -313,9 +313,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "normspace"  :subid("15_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "normspace"  :subid("15_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P52 = "17_1267204688.82934" 
+    .const 'Sub' $P52 = "17_1271336383.463" 
     capture_lex $P52
     .local string rx47_tgt
     .local int rx47_pos
@@ -349,7 +349,7 @@
 .annotate "line", 10
   # rx subrule "before" subtype=zerowidth negate=
     rx47_cur."!cursor_pos"(rx47_pos)
-    .const 'Sub' $P52 = "17_1267204688.82934" 
+    .const 'Sub' $P52 = "17_1271336383.463" 
     capture_lex $P52
     $P10 = rx47_cur."before"($P52)
     unless $P10, rx47_fail
@@ -377,7 +377,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__normspace"  :subid("16_1267204688.82934") :method
+.sub "!PREFIX__normspace"  :subid("16_1271336383.463") :method
 .annotate "line", 3
     new $P49, "ResizablePMCArray"
     push $P49, ""
@@ -386,7 +386,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block51"  :anon :subid("17_1267204688.82934") :method :outer("15_1267204688.82934")
+.sub "_block51"  :anon :subid("17_1271336383.463") :method :outer("15_1271336383.463")
 .annotate "line", 10
     .local string rx53_tgt
     .local int rx53_pos
@@ -454,7 +454,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "arg"  :subid("18_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "arg"  :subid("18_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx57_tgt
     .local int rx57_pos
@@ -565,7 +565,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__arg"  :subid("19_1267204688.82934") :method
+.sub "!PREFIX__arg"  :subid("19_1271336383.463") :method
 .annotate "line", 3
     new $P59, "ResizablePMCArray"
     push $P59, ""
@@ -576,7 +576,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "arglist"  :subid("20_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "arglist"  :subid("20_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx64_tgt
     .local int rx64_pos
@@ -682,7 +682,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("21_1267204688.82934") :method
+.sub "!PREFIX__arglist"  :subid("21_1271336383.463") :method
 .annotate "line", 3
     new $P66, "ResizablePMCArray"
     push $P66, ""
@@ -691,7 +691,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "TOP"  :subid("22_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "TOP"  :subid("22_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx76_tgt
     .local int rx76_pos
@@ -764,7 +764,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__TOP"  :subid("23_1267204688.82934") :method
+.sub "!PREFIX__TOP"  :subid("23_1271336383.463") :method
 .annotate "line", 3
     $P78 = self."!PREFIX__!subrule"("nibbler", "")
     new $P79, "ResizablePMCArray"
@@ -774,7 +774,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "nibbler"  :subid("24_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "nibbler"  :subid("24_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx83_tgt
     .local int rx83_pos
@@ -942,7 +942,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__nibbler"  :subid("25_1267204688.82934") :method
+.sub "!PREFIX__nibbler"  :subid("25_1271336383.463") :method
 .annotate "line", 3
     new $P85, "ResizablePMCArray"
     push $P85, ""
@@ -951,7 +951,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "termish"  :subid("26_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "termish"  :subid("26_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx95_tgt
     .local int rx95_pos
@@ -1019,7 +1019,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__termish"  :subid("27_1267204688.82934") :method
+.sub "!PREFIX__termish"  :subid("27_1271336383.463") :method
 .annotate "line", 3
     new $P97, "ResizablePMCArray"
     push $P97, ""
@@ -1028,9 +1028,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantified_atom"  :subid("28_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "quantified_atom"  :subid("28_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P110 = "30_1267204688.82934" 
+    .const 'Sub' $P110 = "30_1271336383.463" 
     capture_lex $P110
     .local string rx102_tgt
     .local int rx102_pos
@@ -1093,7 +1093,7 @@
   alt108_1:
   # rx subrule "before" subtype=zerowidth negate=
     rx102_cur."!cursor_pos"(rx102_pos)
-    .const 'Sub' $P110 = "30_1267204688.82934" 
+    .const 'Sub' $P110 = "30_1271336383.463" 
     capture_lex $P110
     $P10 = rx102_cur."before"($P110)
     unless $P10, rx102_fail
@@ -1131,7 +1131,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantified_atom"  :subid("29_1267204688.82934") :method
+.sub "!PREFIX__quantified_atom"  :subid("29_1271336383.463") :method
 .annotate "line", 3
     $P104 = self."!PREFIX__!subrule"("atom", "")
     new $P105, "ResizablePMCArray"
@@ -1141,7 +1141,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block109"  :anon :subid("30_1267204688.82934") :method :outer("28_1267204688.82934")
+.sub "_block109"  :anon :subid("30_1271336383.463") :method :outer("28_1271336383.463")
 .annotate "line", 41
     .local string rx111_tgt
     .local int rx111_pos
@@ -1197,9 +1197,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "atom"  :subid("31_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "atom"  :subid("31_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P125 = "33_1267204688.82934" 
+    .const 'Sub' $P125 = "33_1271336383.463" 
     capture_lex $P125
     .local string rx115_tgt
     .local int rx115_pos
@@ -1259,7 +1259,7 @@
   rxquantg122_done:
   # rx subrule "before" subtype=zerowidth negate=
     rx115_cur."!cursor_pos"(rx115_pos)
-    .const 'Sub' $P125 = "33_1267204688.82934" 
+    .const 'Sub' $P125 = "33_1271336383.463" 
     capture_lex $P125
     $P10 = rx115_cur."before"($P125)
     unless $P10, rx115_fail
@@ -1296,7 +1296,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__atom"  :subid("32_1267204688.82934") :method
+.sub "!PREFIX__atom"  :subid("32_1271336383.463") :method
 .annotate "line", 3
     $P117 = self."!PREFIX__!subrule"("metachar", "")
     new $P118, "ResizablePMCArray"
@@ -1307,7 +1307,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block124"  :anon :subid("33_1267204688.82934") :method :outer("31_1267204688.82934")
+.sub "_block124"  :anon :subid("33_1271336383.463") :method :outer("31_1271336383.463")
 .annotate "line", 47
     .local string rx126_tgt
     .local int rx126_pos
@@ -1362,7 +1362,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier"  :subid("34_1267204688.82934") :method
+.sub "quantifier"  :subid("34_1271336383.463") :method
 .annotate "line", 52
     $P130 = self."!protoregex"("quantifier")
     .return ($P130)
@@ -1370,7 +1370,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier"  :subid("35_1267204688.82934") :method
+.sub "!PREFIX__quantifier"  :subid("35_1271336383.463") :method
 .annotate "line", 52
     $P132 = self."!PREFIX__!protoregex"("quantifier")
     .return ($P132)
@@ -1378,7 +1378,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<*>"  :subid("36_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "quantifier:sym<*>"  :subid("36_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx134_tgt
     .local int rx134_pos
@@ -1457,7 +1457,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<*>"  :subid("37_1267204688.82934") :method
+.sub "!PREFIX__quantifier:sym<*>"  :subid("37_1271336383.463") :method
 .annotate "line", 3
     $P136 = self."!PREFIX__!subrule"("backmod", "*")
     new $P137, "ResizablePMCArray"
@@ -1467,7 +1467,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<+>"  :subid("38_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "quantifier:sym<+>"  :subid("38_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx141_tgt
     .local int rx141_pos
@@ -1546,7 +1546,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<+>"  :subid("39_1267204688.82934") :method
+.sub "!PREFIX__quantifier:sym<+>"  :subid("39_1271336383.463") :method
 .annotate "line", 3
     $P143 = self."!PREFIX__!subrule"("backmod", "+")
     new $P144, "ResizablePMCArray"
@@ -1556,7 +1556,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<?>"  :subid("40_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "quantifier:sym<?>"  :subid("40_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx148_tgt
     .local int rx148_pos
@@ -1635,7 +1635,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<?>"  :subid("41_1267204688.82934") :method
+.sub "!PREFIX__quantifier:sym<?>"  :subid("41_1271336383.463") :method
 .annotate "line", 3
     $P150 = self."!PREFIX__!subrule"("backmod", "?")
     new $P151, "ResizablePMCArray"
@@ -1645,7 +1645,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<**>"  :subid("42_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "quantifier:sym<**>"  :subid("42_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx155_tgt
     .local int rx155_pos
@@ -1834,7 +1834,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<**>"  :subid("43_1267204688.82934") :method
+.sub "!PREFIX__quantifier:sym<**>"  :subid("43_1271336383.463") :method
 .annotate "line", 3
     new $P157, "ResizablePMCArray"
     push $P157, "**"
@@ -1843,9 +1843,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backmod"  :subid("44_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backmod"  :subid("44_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P175 = "46_1267204688.82934" 
+    .const 'Sub' $P175 = "46_1271336383.463" 
     capture_lex $P175
     .local string rx167_tgt
     .local int rx167_pos
@@ -1915,7 +1915,7 @@
   alt173_2:
   # rx subrule "before" subtype=zerowidth negate=1
     rx167_cur."!cursor_pos"(rx167_pos)
-    .const 'Sub' $P175 = "46_1267204688.82934" 
+    .const 'Sub' $P175 = "46_1271336383.463" 
     capture_lex $P175
     $P10 = rx167_cur."before"($P175)
     if $P10, rx167_fail
@@ -1939,7 +1939,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backmod"  :subid("45_1267204688.82934") :method
+.sub "!PREFIX__backmod"  :subid("45_1271336383.463") :method
 .annotate "line", 3
     new $P169, "ResizablePMCArray"
     push $P169, ""
@@ -1948,7 +1948,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block174"  :anon :subid("46_1267204688.82934") :method :outer("44_1267204688.82934")
+.sub "_block174"  :anon :subid("46_1271336383.463") :method :outer("44_1271336383.463")
 .annotate "line", 71
     .local string rx176_tgt
     .local int rx176_pos
@@ -2004,7 +2004,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar"  :subid("47_1267204688.82934") :method
+.sub "metachar"  :subid("47_1271336383.463") :method
 .annotate "line", 73
     $P179 = self."!protoregex"("metachar")
     .return ($P179)
@@ -2012,7 +2012,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar"  :subid("48_1267204688.82934") :method
+.sub "!PREFIX__metachar"  :subid("48_1271336383.463") :method
 .annotate "line", 73
     $P181 = self."!PREFIX__!protoregex"("metachar")
     .return ($P181)
@@ -2020,7 +2020,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<ws>"  :subid("49_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<ws>"  :subid("49_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx183_tgt
     .local int rx183_pos
@@ -2076,7 +2076,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<ws>"  :subid("50_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<ws>"  :subid("50_1271336383.463") :method
 .annotate "line", 3
     $P185 = self."!PREFIX__!subrule"("", "")
     new $P186, "ResizablePMCArray"
@@ -2086,7 +2086,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<[ ]>"  :subid("51_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<[ ]>"  :subid("51_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx189_tgt
     .local int rx189_pos
@@ -2158,7 +2158,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<[ ]>"  :subid("52_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<[ ]>"  :subid("52_1271336383.463") :method
 .annotate "line", 3
     $P191 = self."!PREFIX__!subrule"("nibbler", "[")
     new $P192, "ResizablePMCArray"
@@ -2168,7 +2168,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<( )>"  :subid("53_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<( )>"  :subid("53_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx195_tgt
     .local int rx195_pos
@@ -2240,7 +2240,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<( )>"  :subid("54_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<( )>"  :subid("54_1271336383.463") :method
 .annotate "line", 3
     $P197 = self."!PREFIX__!subrule"("nibbler", "(")
     new $P198, "ResizablePMCArray"
@@ -2250,7 +2250,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<'>"  :subid("55_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<'>"  :subid("55_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx201_tgt
     .local int rx201_pos
@@ -2314,7 +2314,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<'>"  :subid("56_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<'>"  :subid("56_1271336383.463") :method
 .annotate "line", 3
     new $P203, "ResizablePMCArray"
     push $P203, "'"
@@ -2323,7 +2323,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<\">"  :subid("57_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<\">"  :subid("57_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx206_tgt
     .local int rx206_pos
@@ -2387,7 +2387,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<\">"  :subid("58_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<\">"  :subid("58_1271336383.463") :method
 .annotate "line", 3
     new $P208, "ResizablePMCArray"
     push $P208, "\""
@@ -2396,7 +2396,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<.>"  :subid("59_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<.>"  :subid("59_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx211_tgt
     .local int rx211_pos
@@ -2468,7 +2468,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<.>"  :subid("60_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<.>"  :subid("60_1271336383.463") :method
 .annotate "line", 3
     new $P213, "ResizablePMCArray"
     push $P213, "."
@@ -2477,7 +2477,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<^>"  :subid("61_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<^>"  :subid("61_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx217_tgt
     .local int rx217_pos
@@ -2549,7 +2549,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<^>"  :subid("62_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<^>"  :subid("62_1271336383.463") :method
 .annotate "line", 3
     new $P219, "ResizablePMCArray"
     push $P219, "^"
@@ -2558,7 +2558,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<^^>"  :subid("63_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<^^>"  :subid("63_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx223_tgt
     .local int rx223_pos
@@ -2630,7 +2630,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<^^>"  :subid("64_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<^^>"  :subid("64_1271336383.463") :method
 .annotate "line", 3
     new $P225, "ResizablePMCArray"
     push $P225, "^^"
@@ -2639,7 +2639,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<$>"  :subid("65_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<$>"  :subid("65_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx229_tgt
     .local int rx229_pos
@@ -2711,7 +2711,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<$>"  :subid("66_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<$>"  :subid("66_1271336383.463") :method
 .annotate "line", 3
     new $P231, "ResizablePMCArray"
     push $P231, "$"
@@ -2720,7 +2720,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<$$>"  :subid("67_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<$$>"  :subid("67_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx235_tgt
     .local int rx235_pos
@@ -2792,7 +2792,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<$$>"  :subid("68_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<$$>"  :subid("68_1271336383.463") :method
 .annotate "line", 3
     new $P237, "ResizablePMCArray"
     push $P237, "$$"
@@ -2801,7 +2801,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<:::>"  :subid("69_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<:::>"  :subid("69_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx241_tgt
     .local int rx241_pos
@@ -2878,7 +2878,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<:::>"  :subid("70_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<:::>"  :subid("70_1271336383.463") :method
 .annotate "line", 3
     $P243 = self."!PREFIX__!subrule"("", ":::")
     new $P244, "ResizablePMCArray"
@@ -2888,7 +2888,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<::>"  :subid("71_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<::>"  :subid("71_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx248_tgt
     .local int rx248_pos
@@ -2965,7 +2965,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<::>"  :subid("72_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<::>"  :subid("72_1271336383.463") :method
 .annotate "line", 3
     $P250 = self."!PREFIX__!subrule"("", "::")
     new $P251, "ResizablePMCArray"
@@ -2975,7 +2975,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<lwb>"  :subid("73_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<lwb>"  :subid("73_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx255_tgt
     .local int rx255_pos
@@ -3060,7 +3060,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<lwb>"  :subid("74_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<lwb>"  :subid("74_1271336383.463") :method
 .annotate "line", 3
     new $P257, "ResizablePMCArray"
     push $P257, unicode:"\x{ab}"
@@ -3070,7 +3070,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<rwb>"  :subid("75_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<rwb>"  :subid("75_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx262_tgt
     .local int rx262_pos
@@ -3155,7 +3155,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<rwb>"  :subid("76_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<rwb>"  :subid("76_1271336383.463") :method
 .annotate "line", 3
     new $P264, "ResizablePMCArray"
     push $P264, unicode:"\x{bb}"
@@ -3165,7 +3165,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<bs>"  :subid("77_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<bs>"  :subid("77_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx269_tgt
     .local int rx269_pos
@@ -3230,7 +3230,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<bs>"  :subid("78_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<bs>"  :subid("78_1271336383.463") :method
 .annotate "line", 3
     $P271 = self."!PREFIX__!subrule"("backslash", "\\")
     new $P272, "ResizablePMCArray"
@@ -3240,7 +3240,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<mod>"  :subid("79_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<mod>"  :subid("79_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx275_tgt
     .local int rx275_pos
@@ -3298,7 +3298,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<mod>"  :subid("80_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<mod>"  :subid("80_1271336383.463") :method
 .annotate "line", 3
     $P277 = self."!PREFIX__!subrule"("mod_internal", "")
     new $P278, "ResizablePMCArray"
@@ -3308,7 +3308,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<~>"  :subid("81_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<~>"  :subid("81_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx281_tgt
     .local int rx281_pos
@@ -3407,7 +3407,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<~>"  :subid("82_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<~>"  :subid("82_1271336383.463") :method
 .annotate "line", 3
     $P283 = self."!PREFIX__!subrule"("", "~")
     new $P284, "ResizablePMCArray"
@@ -3417,7 +3417,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<{*}>"  :subid("83_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<{*}>"  :subid("83_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx288_tgt
     .local int rx288_pos
@@ -3584,7 +3584,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<{*}>"  :subid("84_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<{*}>"  :subid("84_1271336383.463") :method
 .annotate "line", 3
     new $P290, "ResizablePMCArray"
     push $P290, "{*}"
@@ -3593,7 +3593,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<assert>"  :subid("85_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<assert>"  :subid("85_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx305_tgt
     .local int rx305_pos
@@ -3678,7 +3678,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<assert>"  :subid("86_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<assert>"  :subid("86_1271336383.463") :method
 .annotate "line", 3
     $P307 = self."!PREFIX__!subrule"("assertion", "<")
     new $P308, "ResizablePMCArray"
@@ -3688,7 +3688,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<var>"  :subid("87_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<var>"  :subid("87_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx312_tgt
     .local int rx312_pos
@@ -3850,7 +3850,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<var>"  :subid("88_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<var>"  :subid("88_1271336383.463") :method
 .annotate "line", 3
     new $P314, "ResizablePMCArray"
     push $P314, "$"
@@ -3860,7 +3860,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<PIR>"  :subid("89_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "metachar:sym<PIR>"  :subid("89_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx324_tgt
     .local int rx324_pos
@@ -3951,7 +3951,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<PIR>"  :subid("90_1267204688.82934") :method
+.sub "!PREFIX__metachar:sym<PIR>"  :subid("90_1271336383.463") :method
 .annotate "line", 3
     new $P326, "ResizablePMCArray"
     push $P326, ":PIR{{"
@@ -3960,7 +3960,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash"  :subid("91_1267204688.82934") :method
+.sub "backslash"  :subid("91_1271336383.463") :method
 .annotate "line", 120
     $P332 = self."!protoregex"("backslash")
     .return ($P332)
@@ -3968,7 +3968,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash"  :subid("92_1267204688.82934") :method
+.sub "!PREFIX__backslash"  :subid("92_1271336383.463") :method
 .annotate "line", 120
     $P334 = self."!PREFIX__!protoregex"("backslash")
     .return ($P334)
@@ -3976,7 +3976,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<w>"  :subid("93_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<w>"  :subid("93_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx336_tgt
     .local int rx336_pos
@@ -4048,7 +4048,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<w>"  :subid("94_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<w>"  :subid("94_1271336383.463") :method
 .annotate "line", 3
     new $P338, "ResizablePMCArray"
     push $P338, "N"
@@ -4064,7 +4064,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<b>"  :subid("95_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<b>"  :subid("95_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx342_tgt
     .local int rx342_pos
@@ -4136,7 +4136,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<b>"  :subid("96_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<b>"  :subid("96_1271336383.463") :method
 .annotate "line", 3
     new $P344, "ResizablePMCArray"
     push $P344, "B"
@@ -4146,7 +4146,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<e>"  :subid("97_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<e>"  :subid("97_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx348_tgt
     .local int rx348_pos
@@ -4218,7 +4218,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<e>"  :subid("98_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<e>"  :subid("98_1271336383.463") :method
 .annotate "line", 3
     new $P350, "ResizablePMCArray"
     push $P350, "E"
@@ -4228,7 +4228,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<f>"  :subid("99_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<f>"  :subid("99_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx354_tgt
     .local int rx354_pos
@@ -4300,7 +4300,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<f>"  :subid("100_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<f>"  :subid("100_1271336383.463") :method
 .annotate "line", 3
     new $P356, "ResizablePMCArray"
     push $P356, "F"
@@ -4310,7 +4310,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<h>"  :subid("101_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<h>"  :subid("101_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx360_tgt
     .local int rx360_pos
@@ -4382,7 +4382,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<h>"  :subid("102_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<h>"  :subid("102_1271336383.463") :method
 .annotate "line", 3
     new $P362, "ResizablePMCArray"
     push $P362, "H"
@@ -4392,7 +4392,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<r>"  :subid("103_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<r>"  :subid("103_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx366_tgt
     .local int rx366_pos
@@ -4464,7 +4464,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<r>"  :subid("104_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<r>"  :subid("104_1271336383.463") :method
 .annotate "line", 3
     new $P368, "ResizablePMCArray"
     push $P368, "R"
@@ -4474,7 +4474,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<t>"  :subid("105_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<t>"  :subid("105_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx372_tgt
     .local int rx372_pos
@@ -4546,7 +4546,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<t>"  :subid("106_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<t>"  :subid("106_1271336383.463") :method
 .annotate "line", 3
     new $P374, "ResizablePMCArray"
     push $P374, "T"
@@ -4556,7 +4556,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<v>"  :subid("107_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<v>"  :subid("107_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx378_tgt
     .local int rx378_pos
@@ -4628,7 +4628,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<v>"  :subid("108_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<v>"  :subid("108_1271336383.463") :method
 .annotate "line", 3
     new $P380, "ResizablePMCArray"
     push $P380, "V"
@@ -4638,7 +4638,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<o>"  :subid("109_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<o>"  :subid("109_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx384_tgt
     .local int rx384_pos
@@ -4744,7 +4744,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<o>"  :subid("110_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<o>"  :subid("110_1271336383.463") :method
 .annotate "line", 3
     $P386 = self."!PREFIX__!subrule"("octints", "O[")
     $P387 = self."!PREFIX__!subrule"("octint", "O")
@@ -4760,7 +4760,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<x>"  :subid("111_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<x>"  :subid("111_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx395_tgt
     .local int rx395_pos
@@ -4866,7 +4866,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<x>"  :subid("112_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<x>"  :subid("112_1271336383.463") :method
 .annotate "line", 3
     $P397 = self."!PREFIX__!subrule"("hexints", "X[")
     $P398 = self."!PREFIX__!subrule"("hexint", "X")
@@ -4882,7 +4882,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<c>"  :subid("113_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<c>"  :subid("113_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx406_tgt
     .local int rx406_pos
@@ -4961,7 +4961,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<c>"  :subid("114_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<c>"  :subid("114_1271336383.463") :method
 .annotate "line", 3
     $P408 = self."!PREFIX__!subrule"("charspec", "C")
     $P409 = self."!PREFIX__!subrule"("charspec", "c")
@@ -4973,7 +4973,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<A>"  :subid("115_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<A>"  :subid("115_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx414_tgt
     .local int rx414_pos
@@ -5036,7 +5036,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<A>"  :subid("116_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<A>"  :subid("116_1271336383.463") :method
 .annotate "line", 3
     $P416 = self."!PREFIX__!subrule"("", "A")
     new $P417, "ResizablePMCArray"
@@ -5046,7 +5046,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<z>"  :subid("117_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<z>"  :subid("117_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx420_tgt
     .local int rx420_pos
@@ -5109,7 +5109,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<z>"  :subid("118_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<z>"  :subid("118_1271336383.463") :method
 .annotate "line", 3
     $P422 = self."!PREFIX__!subrule"("", "z")
     new $P423, "ResizablePMCArray"
@@ -5119,7 +5119,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<Z>"  :subid("119_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<Z>"  :subid("119_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx426_tgt
     .local int rx426_pos
@@ -5182,7 +5182,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<Z>"  :subid("120_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<Z>"  :subid("120_1271336383.463") :method
 .annotate "line", 3
     $P428 = self."!PREFIX__!subrule"("", "Z")
     new $P429, "ResizablePMCArray"
@@ -5192,7 +5192,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<Q>"  :subid("121_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<Q>"  :subid("121_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx432_tgt
     .local int rx432_pos
@@ -5255,7 +5255,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<Q>"  :subid("122_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<Q>"  :subid("122_1271336383.463") :method
 .annotate "line", 3
     $P434 = self."!PREFIX__!subrule"("", "Q")
     new $P435, "ResizablePMCArray"
@@ -5265,7 +5265,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<misc>"  :subid("123_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "backslash:sym<misc>"  :subid("123_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx438_tgt
     .local int rx438_pos
@@ -5322,7 +5322,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<misc>"  :subid("124_1267204688.82934") :method
+.sub "!PREFIX__backslash:sym<misc>"  :subid("124_1271336383.463") :method
 .annotate "line", 3
     new $P440, "ResizablePMCArray"
     push $P440, ""
@@ -5331,7 +5331,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion"  :subid("125_1267204688.82934") :method
+.sub "assertion"  :subid("125_1271336383.463") :method
 .annotate "line", 138
     $P443 = self."!protoregex"("assertion")
     .return ($P443)
@@ -5339,7 +5339,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion"  :subid("126_1267204688.82934") :method
+.sub "!PREFIX__assertion"  :subid("126_1271336383.463") :method
 .annotate "line", 138
     $P445 = self."!PREFIX__!protoregex"("assertion")
     .return ($P445)
@@ -5347,9 +5347,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<?>"  :subid("127_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "assertion:sym<?>"  :subid("127_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P454 = "129_1267204688.82934" 
+    .const 'Sub' $P454 = "129_1271336383.463" 
     capture_lex $P454
     .local string rx447_tgt
     .local int rx447_pos
@@ -5393,7 +5393,7 @@
     rx447_cur."!mark_push"(0, rx447_pos, $I10)
   # rx subrule "before" subtype=zerowidth negate=
     rx447_cur."!cursor_pos"(rx447_pos)
-    .const 'Sub' $P454 = "129_1267204688.82934" 
+    .const 'Sub' $P454 = "129_1271336383.463" 
     capture_lex $P454
     $P10 = rx447_cur."before"($P454)
     unless $P10, rx447_fail
@@ -5426,7 +5426,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<?>"  :subid("128_1267204688.82934") :method
+.sub "!PREFIX__assertion:sym<?>"  :subid("128_1271336383.463") :method
 .annotate "line", 3
     $P449 = self."!PREFIX__!subrule"("assertion", "?")
     new $P450, "ResizablePMCArray"
@@ -5437,7 +5437,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block453"  :anon :subid("129_1267204688.82934") :method :outer("127_1267204688.82934")
+.sub "_block453"  :anon :subid("129_1271336383.463") :method :outer("127_1271336383.463")
 .annotate "line", 140
     .local string rx455_tgt
     .local int rx455_pos
@@ -5493,9 +5493,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<!>"  :subid("130_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "assertion:sym<!>"  :subid("130_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P465 = "132_1267204688.82934" 
+    .const 'Sub' $P465 = "132_1271336383.463" 
     capture_lex $P465
     .local string rx458_tgt
     .local int rx458_pos
@@ -5539,7 +5539,7 @@
     rx458_cur."!mark_push"(0, rx458_pos, $I10)
   # rx subrule "before" subtype=zerowidth negate=
     rx458_cur."!cursor_pos"(rx458_pos)
-    .const 'Sub' $P465 = "132_1267204688.82934" 
+    .const 'Sub' $P465 = "132_1271336383.463" 
     capture_lex $P465
     $P10 = rx458_cur."before"($P465)
     unless $P10, rx458_fail
@@ -5572,7 +5572,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<!>"  :subid("131_1267204688.82934") :method
+.sub "!PREFIX__assertion:sym<!>"  :subid("131_1271336383.463") :method
 .annotate "line", 3
     $P460 = self."!PREFIX__!subrule"("assertion", "!")
     new $P461, "ResizablePMCArray"
@@ -5583,7 +5583,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block464"  :anon :subid("132_1267204688.82934") :method :outer("130_1267204688.82934")
+.sub "_block464"  :anon :subid("132_1271336383.463") :method :outer("130_1271336383.463")
 .annotate "line", 141
     .local string rx466_tgt
     .local int rx466_pos
@@ -5639,7 +5639,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<method>"  :subid("133_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "assertion:sym<method>"  :subid("133_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx469_tgt
     .local int rx469_pos
@@ -5705,7 +5705,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<method>"  :subid("134_1267204688.82934") :method
+.sub "!PREFIX__assertion:sym<method>"  :subid("134_1271336383.463") :method
 .annotate "line", 3
     $P471 = self."!PREFIX__!subrule"("assertion", ".")
     new $P472, "ResizablePMCArray"
@@ -5715,9 +5715,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<name>"  :subid("135_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "assertion:sym<name>"  :subid("135_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P483 = "137_1267204688.82934" 
+    .const 'Sub' $P483 = "137_1271336383.463" 
     capture_lex $P483
     .local string rx475_tgt
     .local int rx475_pos
@@ -5782,7 +5782,7 @@
 .annotate "line", 150
   # rx subrule "before" subtype=zerowidth negate=
     rx475_cur."!cursor_pos"(rx475_pos)
-    .const 'Sub' $P483 = "137_1267204688.82934" 
+    .const 'Sub' $P483 = "137_1271336383.463" 
     capture_lex $P483
     $P10 = rx475_cur."before"($P483)
     unless $P10, rx475_fail
@@ -5889,7 +5889,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("136_1267204688.82934") :method
+.sub "!PREFIX__assertion:sym<name>"  :subid("136_1271336383.463") :method
 .annotate "line", 3
     new $P477, "ResizablePMCArray"
     push $P477, ""
@@ -5898,7 +5898,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block482"  :anon :subid("137_1267204688.82934") :method :outer("135_1267204688.82934")
+.sub "_block482"  :anon :subid("137_1271336383.463") :method :outer("135_1271336383.463")
 .annotate "line", 150
     .local string rx484_tgt
     .local int rx484_pos
@@ -5954,9 +5954,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<[>"  :subid("138_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "assertion:sym<[>"  :subid("138_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P493 = "140_1267204688.82934" 
+    .const 'Sub' $P493 = "140_1271336383.463" 
     capture_lex $P493
     .local string rx488_tgt
     .local int rx488_pos
@@ -5991,7 +5991,7 @@
 .annotate "line", 158
   # rx subrule "before" subtype=zerowidth negate=
     rx488_cur."!cursor_pos"(rx488_pos)
-    .const 'Sub' $P493 = "140_1267204688.82934" 
+    .const 'Sub' $P493 = "140_1271336383.463" 
     capture_lex $P493
     $P10 = rx488_cur."before"($P493)
     unless $P10, rx488_fail
@@ -6029,7 +6029,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<[>"  :subid("139_1267204688.82934") :method
+.sub "!PREFIX__assertion:sym<[>"  :subid("139_1271336383.463") :method
 .annotate "line", 3
     new $P490, "ResizablePMCArray"
     push $P490, ""
@@ -6038,7 +6038,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block492"  :anon :subid("140_1267204688.82934") :method :outer("138_1267204688.82934")
+.sub "_block492"  :anon :subid("140_1271336383.463") :method :outer("138_1271336383.463")
 .annotate "line", 158
     .local string rx494_tgt
     .local int rx494_pos
@@ -6118,9 +6118,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "cclass_elem"  :subid("141_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "cclass_elem"  :subid("141_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P511 = "143_1267204688.82934" 
+    .const 'Sub' $P511 = "143_1271336383.463" 
     capture_lex $P511
     .local string rx500_tgt
     .local int rx500_pos
@@ -6223,7 +6223,7 @@
 .annotate "line", 164
   # rx subrule $P511 subtype=capture negate=
     rx500_cur."!cursor_pos"(rx500_pos)
-    .const 'Sub' $P511 = "143_1267204688.82934" 
+    .const 'Sub' $P511 = "143_1271336383.463" 
     capture_lex $P511
     $P10 = rx500_cur.$P511()
     unless $P10, rx500_fail
@@ -6304,7 +6304,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__cclass_elem"  :subid("142_1267204688.82934") :method
+.sub "!PREFIX__cclass_elem"  :subid("142_1271336383.463") :method
 .annotate "line", 3
     new $P502, "ResizablePMCArray"
     push $P502, ""
@@ -6315,13 +6315,13 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block510"  :anon :subid("143_1267204688.82934") :method :outer("141_1267204688.82934")
+.sub "_block510"  :anon :subid("143_1271336383.463") :method :outer("141_1271336383.463")
 .annotate "line", 164
-    .const 'Sub' $P526 = "146_1267204688.82934" 
+    .const 'Sub' $P526 = "146_1271336383.463" 
     capture_lex $P526
-    .const 'Sub' $P521 = "145_1267204688.82934" 
+    .const 'Sub' $P521 = "145_1271336383.463" 
     capture_lex $P521
-    .const 'Sub' $P517 = "144_1267204688.82934" 
+    .const 'Sub' $P517 = "144_1271336383.463" 
     capture_lex $P517
     .local string rx512_tgt
     .local int rx512_pos
@@ -6392,7 +6392,7 @@
     add rx512_pos, 1
   # rx subrule $P517 subtype=capture negate=
     rx512_cur."!cursor_pos"(rx512_pos)
-    .const 'Sub' $P517 = "144_1267204688.82934" 
+    .const 'Sub' $P517 = "144_1271336383.463" 
     capture_lex $P517
     $P10 = rx512_cur.$P517()
     unless $P10, rx512_fail
@@ -6403,7 +6403,7 @@
   alt515_1:
   # rx subrule $P521 subtype=capture negate=
     rx512_cur."!cursor_pos"(rx512_pos)
-    .const 'Sub' $P521 = "145_1267204688.82934" 
+    .const 'Sub' $P521 = "145_1271336383.463" 
     capture_lex $P521
     $P10 = rx512_cur.$P521()
     unless $P10, rx512_fail
@@ -6432,7 +6432,7 @@
     add rx512_pos, rx512_off, $I11
   # rx subrule $P526 subtype=capture negate=
     rx512_cur."!cursor_pos"(rx512_pos)
-    .const 'Sub' $P526 = "146_1267204688.82934" 
+    .const 'Sub' $P526 = "146_1271336383.463" 
     capture_lex $P526
     $P10 = rx512_cur.$P526()
     unless $P10, rx512_fail
@@ -6461,7 +6461,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block516"  :anon :subid("144_1267204688.82934") :method :outer("143_1267204688.82934")
+.sub "_block516"  :anon :subid("144_1271336383.463") :method :outer("143_1271336383.463")
 .annotate "line", 166
     .local string rx518_tgt
     .local int rx518_pos
@@ -6513,7 +6513,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block520"  :anon :subid("145_1267204688.82934") :method :outer("143_1267204688.82934")
+.sub "_block520"  :anon :subid("145_1271336383.463") :method :outer("143_1271336383.463")
 .annotate "line", 166
     .local string rx522_tgt
     .local int rx522_pos
@@ -6569,7 +6569,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block525"  :anon :subid("146_1267204688.82934") :method :outer("143_1267204688.82934")
+.sub "_block525"  :anon :subid("146_1271336383.463") :method :outer("143_1271336383.463")
 .annotate "line", 166
     .local string rx527_tgt
     .local int rx527_pos
@@ -6621,9 +6621,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_internal"  :subid("147_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "mod_internal"  :subid("147_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
-    .const 'Sub' $P543 = "149_1267204688.82934" 
+    .const 'Sub' $P543 = "149_1271336383.463" 
     capture_lex $P543
     .local string rx535_tgt
     .local int rx535_pos
@@ -6673,7 +6673,7 @@
   rxquantr541_loop:
   # rx subrule $P543 subtype=capture negate=
     rx535_cur."!cursor_pos"(rx535_pos)
-    .const 'Sub' $P543 = "149_1267204688.82934" 
+    .const 'Sub' $P543 = "149_1271336383.463" 
     capture_lex $P543
     $P10 = rx535_cur.$P543()
     unless $P10, rx535_fail
@@ -6775,7 +6775,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_internal"  :subid("148_1267204688.82934") :method
+.sub "!PREFIX__mod_internal"  :subid("148_1271336383.463") :method
 .annotate "line", 3
     $P537 = self."!PREFIX__!subrule"("mod_ident", ":")
     new $P538, "ResizablePMCArray"
@@ -6786,7 +6786,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block542"  :anon :subid("149_1267204688.82934") :method :outer("147_1267204688.82934")
+.sub "_block542"  :anon :subid("149_1271336383.463") :method :outer("147_1271336383.463")
 .annotate "line", 176
     .local string rx544_tgt
     .local int rx544_pos
@@ -6854,7 +6854,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident"  :subid("150_1267204688.82934") :method
+.sub "mod_ident"  :subid("150_1271336383.463") :method
 .annotate "line", 181
     $P552 = self."!protoregex"("mod_ident")
     .return ($P552)
@@ -6862,7 +6862,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident"  :subid("151_1267204688.82934") :method
+.sub "!PREFIX__mod_ident"  :subid("151_1271336383.463") :method
 .annotate "line", 181
     $P554 = self."!PREFIX__!protoregex"("mod_ident")
     .return ($P554)
@@ -6870,7 +6870,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<ignorecase>"  :subid("152_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "mod_ident:sym<ignorecase>"  :subid("152_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx556_tgt
     .local int rx556_pos
@@ -6955,7 +6955,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<ignorecase>"  :subid("153_1267204688.82934") :method
+.sub "!PREFIX__mod_ident:sym<ignorecase>"  :subid("153_1271336383.463") :method
 .annotate "line", 3
     new $P558, "ResizablePMCArray"
     push $P558, "i"
@@ -6964,7 +6964,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<ratchet>"  :subid("154_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "mod_ident:sym<ratchet>"  :subid("154_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx564_tgt
     .local int rx564_pos
@@ -7049,7 +7049,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<ratchet>"  :subid("155_1267204688.82934") :method
+.sub "!PREFIX__mod_ident:sym<ratchet>"  :subid("155_1271336383.463") :method
 .annotate "line", 3
     new $P566, "ResizablePMCArray"
     push $P566, "r"
@@ -7058,7 +7058,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<sigspace>"  :subid("156_1267204688.82934") :method :outer("11_1267204688.82934")
+.sub "mod_ident:sym<sigspace>"  :subid("156_1271336383.463") :method :outer("11_1271336383.463")
 .annotate "line", 3
     .local string rx572_tgt
     .local int rx572_pos
@@ -7143,7 +7143,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<sigspace>"  :subid("157_1267204688.82934") :method
+.sub "!PREFIX__mod_ident:sym<sigspace>"  :subid("157_1271336383.463") :method
 .annotate "line", 3
     new $P574, "ResizablePMCArray"
     push $P574, "s"
@@ -7153,7 +7153,7 @@
 ### .include 'gen/p6regex-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204695.47543")
+.sub "_block11"  :anon :subid("10_1271336390.22432")
 .annotate "line", 0
     get_hll_global $P14, ["Regex";"P6Regex";"Actions"], "_block13" 
     capture_lex $P14
@@ -7167,9 +7167,9 @@
 
 
 .namespace []
-.sub "" :load :init :subid("post90") :outer("10_1267204695.47543")
+.sub "" :load :init :subid("post90") :outer("10_1271336390.22432")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204695.47543" 
+    .const 'Sub' $P12 = "10_1271336390.22432" 
     .local pmc block
     set block, $P12
     $P1570 = get_root_global ["parrot"], "P6metaclass"
@@ -7178,117 +7178,117 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block13"  :subid("11_1267204695.47543") :outer("10_1267204695.47543")
+.sub "_block13"  :subid("11_1271336390.22432") :outer("10_1271336390.22432")
 .annotate "line", 4
-    .const 'Sub' $P1536 = "89_1267204695.47543" 
+    .const 'Sub' $P1536 = "89_1271336390.22432" 
     capture_lex $P1536
-    .const 'Sub' $P1467 = "85_1267204695.47543" 
+    .const 'Sub' $P1467 = "85_1271336390.22432" 
     capture_lex $P1467
-    .const 'Sub' $P1399 = "83_1267204695.47543" 
+    .const 'Sub' $P1399 = "83_1271336390.22432" 
     capture_lex $P1399
-    .const 'Sub' $P1326 = "80_1267204695.47543" 
+    .const 'Sub' $P1326 = "80_1271336390.22432" 
     capture_lex $P1326
-    .const 'Sub' $P1312 = "79_1267204695.47543" 
+    .const 'Sub' $P1312 = "79_1271336390.22432" 
     capture_lex $P1312
-    .const 'Sub' $P1288 = "78_1267204695.47543" 
+    .const 'Sub' $P1288 = "78_1271336390.22432" 
     capture_lex $P1288
-    .const 'Sub' $P1270 = "77_1267204695.47543" 
+    .const 'Sub' $P1270 = "77_1271336390.22432" 
     capture_lex $P1270
-    .const 'Sub' $P1256 = "76_1267204695.47543" 
+    .const 'Sub' $P1256 = "76_1271336390.22432" 
     capture_lex $P1256
-    .const 'Sub' $P1243 = "75_1267204695.47543" 
+    .const 'Sub' $P1243 = "75_1271336390.22432" 
     capture_lex $P1243
-    .const 'Sub' $P1212 = "74_1267204695.47543" 
+    .const 'Sub' $P1212 = "74_1271336390.22432" 
     capture_lex $P1212
-    .const 'Sub' $P1181 = "73_1267204695.47543" 
+    .const 'Sub' $P1181 = "73_1271336390.22432" 
     capture_lex $P1181
-    .const 'Sub' $P1165 = "72_1267204695.47543" 
+    .const 'Sub' $P1165 = "72_1271336390.22432" 
     capture_lex $P1165
-    .const 'Sub' $P1149 = "71_1267204695.47543" 
+    .const 'Sub' $P1149 = "71_1271336390.22432" 
     capture_lex $P1149
-    .const 'Sub' $P1133 = "70_1267204695.47543" 
+    .const 'Sub' $P1133 = "70_1271336390.22432" 
     capture_lex $P1133
-    .const 'Sub' $P1117 = "69_1267204695.47543" 
+    .const 'Sub' $P1117 = "69_1271336390.22432" 
     capture_lex $P1117
-    .const 'Sub' $P1101 = "68_1267204695.47543" 
+    .const 'Sub' $P1101 = "68_1271336390.22432" 
     capture_lex $P1101
-    .const 'Sub' $P1085 = "67_1267204695.47543" 
+    .const 'Sub' $P1085 = "67_1271336390.22432" 
     capture_lex $P1085
-    .const 'Sub' $P1069 = "66_1267204695.47543" 
+    .const 'Sub' $P1069 = "66_1271336390.22432" 
     capture_lex $P1069
-    .const 'Sub' $P1045 = "65_1267204695.47543" 
+    .const 'Sub' $P1045 = "65_1271336390.22432" 
     capture_lex $P1045
-    .const 'Sub' $P1030 = "64_1267204695.47543" 
+    .const 'Sub' $P1030 = "64_1271336390.22432" 
     capture_lex $P1030
-    .const 'Sub' $P974 = "63_1267204695.47543" 
+    .const 'Sub' $P974 = "63_1271336390.22432" 
     capture_lex $P974
-    .const 'Sub' $P953 = "62_1267204695.47543" 
+    .const 'Sub' $P953 = "62_1271336390.22432" 
     capture_lex $P953
-    .const 'Sub' $P931 = "61_1267204695.47543" 
+    .const 'Sub' $P931 = "61_1271336390.22432" 
     capture_lex $P931
-    .const 'Sub' $P921 = "60_1267204695.47543" 
+    .const 'Sub' $P921 = "60_1271336390.22432" 
     capture_lex $P921
-    .const 'Sub' $P911 = "59_1267204695.47543" 
+    .const 'Sub' $P911 = "59_1271336390.22432" 
     capture_lex $P911
-    .const 'Sub' $P901 = "58_1267204695.47543" 
+    .const 'Sub' $P901 = "58_1271336390.22432" 
     capture_lex $P901
-    .const 'Sub' $P889 = "57_1267204695.47543" 
+    .const 'Sub' $P889 = "57_1271336390.22432" 
     capture_lex $P889
-    .const 'Sub' $P877 = "56_1267204695.47543" 
+    .const 'Sub' $P877 = "56_1271336390.22432" 
     capture_lex $P877
-    .const 'Sub' $P865 = "55_1267204695.47543" 
+    .const 'Sub' $P865 = "55_1271336390.22432" 
     capture_lex $P865
-    .const 'Sub' $P853 = "54_1267204695.47543" 
+    .const 'Sub' $P853 = "54_1271336390.22432" 
     capture_lex $P853
-    .const 'Sub' $P841 = "53_1267204695.47543" 
+    .const 'Sub' $P841 = "53_1271336390.22432" 
     capture_lex $P841
-    .const 'Sub' $P829 = "52_1267204695.47543" 
+    .const 'Sub' $P829 = "52_1271336390.22432" 
     capture_lex $P829
-    .const 'Sub' $P817 = "51_1267204695.47543" 
+    .const 'Sub' $P817 = "51_1271336390.22432" 
     capture_lex $P817
-    .const 'Sub' $P805 = "50_1267204695.47543" 
+    .const 'Sub' $P805 = "50_1271336390.22432" 
     capture_lex $P805
-    .const 'Sub' $P782 = "49_1267204695.47543" 
+    .const 'Sub' $P782 = "49_1271336390.22432" 
     capture_lex $P782
-    .const 'Sub' $P759 = "48_1267204695.47543" 
+    .const 'Sub' $P759 = "48_1271336390.22432" 
     capture_lex $P759
-    .const 'Sub' $P741 = "47_1267204695.47543" 
+    .const 'Sub' $P741 = "47_1271336390.22432" 
     capture_lex $P741
-    .const 'Sub' $P731 = "46_1267204695.47543" 
+    .const 'Sub' $P731 = "46_1271336390.22432" 
     capture_lex $P731
-    .const 'Sub' $P713 = "45_1267204695.47543" 
+    .const 'Sub' $P713 = "45_1271336390.22432" 
     capture_lex $P713
-    .const 'Sub' $P666 = "44_1267204695.47543" 
+    .const 'Sub' $P666 = "44_1271336390.22432" 
     capture_lex $P666
-    .const 'Sub' $P649 = "43_1267204695.47543" 
+    .const 'Sub' $P649 = "43_1271336390.22432" 
     capture_lex $P649
-    .const 'Sub' $P634 = "42_1267204695.47543" 
+    .const 'Sub' $P634 = "42_1271336390.22432" 
     capture_lex $P634
-    .const 'Sub' $P619 = "41_1267204695.47543" 
+    .const 'Sub' $P619 = "41_1271336390.22432" 
     capture_lex $P619
-    .const 'Sub' $P593 = "40_1267204695.47543" 
+    .const 'Sub' $P593 = "40_1271336390.22432" 
     capture_lex $P593
-    .const 'Sub' $P543 = "38_1267204695.47543" 
+    .const 'Sub' $P543 = "38_1271336390.22432" 
     capture_lex $P543
-    .const 'Sub' $P475 = "36_1267204695.47543" 
+    .const 'Sub' $P475 = "36_1271336390.22432" 
     capture_lex $P475
-    .const 'Sub' $P420 = "33_1267204695.47543" 
+    .const 'Sub' $P420 = "33_1271336390.22432" 
     capture_lex $P420
-    .const 'Sub' $P405 = "32_1267204695.47543" 
+    .const 'Sub' $P405 = "32_1271336390.22432" 
     capture_lex $P405
-    .const 'Sub' $P379 = "30_1267204695.47543" 
+    .const 'Sub' $P379 = "30_1271336390.22432" 
     capture_lex $P379
-    .const 'Sub' $P362 = "29_1267204695.47543" 
+    .const 'Sub' $P362 = "29_1271336390.22432" 
     capture_lex $P362
-    .const 'Sub' $P340 = "28_1267204695.47543" 
+    .const 'Sub' $P340 = "28_1271336390.22432" 
     capture_lex $P340
-    .const 'Sub' $P308 = "27_1267204695.47543" 
+    .const 'Sub' $P308 = "27_1271336390.22432" 
     capture_lex $P308
-    .const 'Sub' $P54 = "14_1267204695.47543" 
+    .const 'Sub' $P54 = "14_1271336390.22432" 
     capture_lex $P54
-    .const 'Sub' $P21 = "13_1267204695.47543" 
+    .const 'Sub' $P21 = "13_1271336390.22432" 
     capture_lex $P21
-    .const 'Sub' $P16 = "12_1267204695.47543" 
+    .const 'Sub' $P16 = "12_1271336390.22432" 
     capture_lex $P16
     get_global $P15, "@MODIFIERS"
     unless_null $P15, vivify_91
@@ -7296,23 +7296,23 @@
     set_global "@MODIFIERS", $P15
   vivify_91:
 .annotate "line", 6
-    .const 'Sub' $P16 = "12_1267204695.47543" 
+    .const 'Sub' $P16 = "12_1271336390.22432" 
     capture_lex $P16
     .lex "INIT", $P16
 .annotate "line", 479
-    .const 'Sub' $P21 = "13_1267204695.47543" 
+    .const 'Sub' $P21 = "13_1271336390.22432" 
     capture_lex $P21
     .lex "buildsub", $P21
 .annotate "line", 496
-    .const 'Sub' $P54 = "14_1267204695.47543" 
+    .const 'Sub' $P54 = "14_1271336390.22432" 
     capture_lex $P54
     .lex "capnames", $P54
 .annotate "line", 562
-    .const 'Sub' $P308 = "27_1267204695.47543" 
+    .const 'Sub' $P308 = "27_1271336390.22432" 
     capture_lex $P308
     .lex "backmod", $P308
 .annotate "line", 569
-    .const 'Sub' $P340 = "28_1267204695.47543" 
+    .const 'Sub' $P340 = "28_1271336390.22432" 
     capture_lex $P340
     .lex "subrule_alias", $P340
 .annotate "line", 4
@@ -7329,7 +7329,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "INIT"  :subid("12_1267204695.47543") :outer("11_1267204695.47543")
+.sub "INIT"  :subid("12_1271336390.22432") :outer("11_1271336390.22432")
 .annotate "line", 6
     new $P18, 'ExceptionHandler'
     set_addr $P18, control_17
@@ -7353,7 +7353,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "buildsub"  :subid("13_1267204695.47543") :outer("11_1267204695.47543")
+.sub "buildsub"  :subid("13_1271336390.22432") :outer("11_1271336390.22432")
     .param pmc param_24
     .param pmc param_25 :optional
     .param int has_param_25 :opt_flag
@@ -7430,19 +7430,19 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "capnames"  :subid("14_1267204695.47543") :outer("11_1267204695.47543")
+.sub "capnames"  :subid("14_1271336390.22432") :outer("11_1271336390.22432")
     .param pmc param_57
     .param pmc param_58
 .annotate "line", 496
-    .const 'Sub' $P283 = "25_1267204695.47543" 
+    .const 'Sub' $P283 = "25_1271336390.22432" 
     capture_lex $P283
-    .const 'Sub' $P220 = "22_1267204695.47543" 
+    .const 'Sub' $P220 = "22_1271336390.22432" 
     capture_lex $P220
-    .const 'Sub' $P178 = "20_1267204695.47543" 
+    .const 'Sub' $P178 = "20_1271336390.22432" 
     capture_lex $P178
-    .const 'Sub' $P136 = "18_1267204695.47543" 
+    .const 'Sub' $P136 = "18_1271336390.22432" 
     capture_lex $P136
-    .const 'Sub' $P69 = "15_1267204695.47543" 
+    .const 'Sub' $P69 = "15_1271336390.22432" 
     capture_lex $P69
     new $P56, 'ExceptionHandler'
     set_addr $P56, control_55
@@ -7498,21 +7498,21 @@
     set $S280, $P279
     iseq $I281, $S280, "quant"
     unless $I281, if_278_end
-    .const 'Sub' $P283 = "25_1267204695.47543" 
+    .const 'Sub' $P283 = "25_1271336390.22432" 
     capture_lex $P283
     $P283()
   if_278_end:
     goto if_215_end
   if_215:
 .annotate "line", 534
-    .const 'Sub' $P220 = "22_1267204695.47543" 
+    .const 'Sub' $P220 = "22_1271336390.22432" 
     capture_lex $P220
     $P220()
   if_215_end:
     goto if_168_end
   if_168:
 .annotate "line", 521
-    .const 'Sub' $P178 = "20_1267204695.47543" 
+    .const 'Sub' $P178 = "20_1271336390.22432" 
     capture_lex $P178
     $P178()
   if_168_end:
@@ -7532,7 +7532,7 @@
     unless $P130, loop165_done
     shift $P134, $P130
   loop165_redo:
-    .const 'Sub' $P136 = "18_1267204695.47543" 
+    .const 'Sub' $P136 = "18_1271336390.22432" 
     capture_lex $P136
     $P136($P134)
   loop165_next:
@@ -7551,7 +7551,7 @@
     goto if_64_end
   if_64:
 .annotate "line", 499
-    .const 'Sub' $P69 = "15_1267204695.47543" 
+    .const 'Sub' $P69 = "15_1271336390.22432" 
     capture_lex $P69
     $P69()
   if_64_end:
@@ -7575,9 +7575,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block282"  :anon :subid("25_1267204695.47543") :outer("14_1267204695.47543")
+.sub "_block282"  :anon :subid("25_1271336390.22432") :outer("14_1271336390.22432")
 .annotate "line", 551
-    .const 'Sub' $P294 = "26_1267204695.47543" 
+    .const 'Sub' $P294 = "26_1271336390.22432" 
     capture_lex $P294
 .annotate "line", 552
     $P284 = root_new ['parrot';'Hash']
@@ -7606,7 +7606,7 @@
     unless $P289, loop299_done
     shift $P292, $P289
   loop299_redo:
-    .const 'Sub' $P294 = "26_1267204695.47543" 
+    .const 'Sub' $P294 = "26_1271336390.22432" 
     capture_lex $P294
     $P294($P292)
   loop299_next:
@@ -7636,7 +7636,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block293"  :anon :subid("26_1267204695.47543") :outer("25_1267204695.47543")
+.sub "_block293"  :anon :subid("26_1271336390.22432") :outer("25_1271336390.22432")
     .param pmc param_295
 .annotate "line", 553
     .lex "$_", param_295
@@ -7656,11 +7656,11 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block219"  :anon :subid("22_1267204695.47543") :outer("14_1267204695.47543")
+.sub "_block219"  :anon :subid("22_1271336390.22432") :outer("14_1271336390.22432")
 .annotate "line", 534
-    .const 'Sub' $P260 = "24_1267204695.47543" 
+    .const 'Sub' $P260 = "24_1271336390.22432" 
     capture_lex $P260
-    .const 'Sub' $P232 = "23_1267204695.47543" 
+    .const 'Sub' $P232 = "23_1271336390.22432" 
     capture_lex $P232
 .annotate "line", 535
     new $P221, "Undef"
@@ -7695,7 +7695,7 @@
     unless $P227, loop248_done
     shift $P230, $P227
   loop248_redo:
-    .const 'Sub' $P232 = "23_1267204695.47543" 
+    .const 'Sub' $P232 = "23_1271336390.22432" 
     capture_lex $P232
     $P232($P230)
   loop248_next:
@@ -7734,7 +7734,7 @@
     unless $P255, loop273_done
     shift $P258, $P255
   loop273_redo:
-    .const 'Sub' $P260 = "24_1267204695.47543" 
+    .const 'Sub' $P260 = "24_1271336390.22432" 
     capture_lex $P260
     $P260($P258)
   loop273_next:
@@ -7764,7 +7764,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block231"  :anon :subid("23_1267204695.47543") :outer("22_1267204695.47543")
+.sub "_block231"  :anon :subid("23_1271336390.22432") :outer("22_1271336390.22432")
     .param pmc param_233
 .annotate "line", 541
     .lex "$_", param_233
@@ -7804,7 +7804,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block259"  :anon :subid("24_1267204695.47543") :outer("22_1267204695.47543")
+.sub "_block259"  :anon :subid("24_1271336390.22432") :outer("22_1271336390.22432")
     .param pmc param_261
 .annotate "line", 546
     .lex "$_", param_261
@@ -7844,9 +7844,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block177"  :anon :subid("20_1267204695.47543") :outer("14_1267204695.47543")
+.sub "_block177"  :anon :subid("20_1271336390.22432") :outer("14_1271336390.22432")
 .annotate "line", 521
-    .const 'Sub' $P196 = "21_1267204695.47543" 
+    .const 'Sub' $P196 = "21_1271336390.22432" 
     capture_lex $P196
 .annotate "line", 522
     new $P179, "Undef"
@@ -7889,7 +7889,7 @@
     unless $P191, loop212_done
     shift $P194, $P191
   loop212_redo:
-    .const 'Sub' $P196 = "21_1267204695.47543" 
+    .const 'Sub' $P196 = "21_1271336390.22432" 
     capture_lex $P196
     $P196($P194)
   loop212_next:
@@ -7909,7 +7909,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block195"  :anon :subid("21_1267204695.47543") :outer("20_1267204695.47543")
+.sub "_block195"  :anon :subid("21_1271336390.22432") :outer("20_1271336390.22432")
     .param pmc param_197
 .annotate "line", 529
     .lex "$_", param_197
@@ -7949,10 +7949,10 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block135"  :anon :subid("18_1267204695.47543") :outer("14_1267204695.47543")
+.sub "_block135"  :anon :subid("18_1271336390.22432") :outer("14_1271336390.22432")
     .param pmc param_138
 .annotate "line", 513
-    .const 'Sub' $P147 = "19_1267204695.47543" 
+    .const 'Sub' $P147 = "19_1271336390.22432" 
     capture_lex $P147
 .annotate "line", 514
     $P137 = root_new ['parrot';'Hash']
@@ -7975,7 +7975,7 @@
     unless $P142, loop160_done
     shift $P145, $P142
   loop160_redo:
-    .const 'Sub' $P147 = "19_1267204695.47543" 
+    .const 'Sub' $P147 = "19_1271336390.22432" 
     capture_lex $P147
     $P147($P145)
   loop160_next:
@@ -8005,7 +8005,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block146"  :anon :subid("19_1267204695.47543") :outer("18_1267204695.47543")
+.sub "_block146"  :anon :subid("19_1271336390.22432") :outer("18_1271336390.22432")
     .param pmc param_148
 .annotate "line", 515
     .lex "$_", param_148
@@ -8045,9 +8045,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block68"  :anon :subid("15_1267204695.47543") :outer("14_1267204695.47543")
+.sub "_block68"  :anon :subid("15_1271336390.22432") :outer("14_1271336390.22432")
 .annotate "line", 499
-    .const 'Sub' $P78 = "16_1267204695.47543" 
+    .const 'Sub' $P78 = "16_1271336390.22432" 
     capture_lex $P78
 .annotate "line", 500
     new $P70, "Undef"
@@ -8068,7 +8068,7 @@
     unless $P72, loop122_done
     shift $P76, $P72
   loop122_redo:
-    .const 'Sub' $P78 = "16_1267204695.47543" 
+    .const 'Sub' $P78 = "16_1271336390.22432" 
     capture_lex $P78
     $P78($P76)
   loop122_next:
@@ -8091,10 +8091,10 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block77"  :anon :subid("16_1267204695.47543") :outer("15_1267204695.47543")
+.sub "_block77"  :anon :subid("16_1271336390.22432") :outer("15_1271336390.22432")
     .param pmc param_80
 .annotate "line", 501
-    .const 'Sub' $P89 = "17_1267204695.47543" 
+    .const 'Sub' $P89 = "17_1271336390.22432" 
     capture_lex $P89
 .annotate "line", 502
     $P79 = root_new ['parrot';'Hash']
@@ -8117,7 +8117,7 @@
     unless $P84, loop109_done
     shift $P87, $P84
   loop109_redo:
-    .const 'Sub' $P89 = "17_1267204695.47543" 
+    .const 'Sub' $P89 = "17_1271336390.22432" 
     capture_lex $P89
     $P89($P87)
   loop109_next:
@@ -8166,7 +8166,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block88"  :anon :subid("17_1267204695.47543") :outer("16_1267204695.47543")
+.sub "_block88"  :anon :subid("17_1271336390.22432") :outer("16_1271336390.22432")
     .param pmc param_90
 .annotate "line", 503
     .lex "$_", param_90
@@ -8225,7 +8225,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backmod"  :subid("27_1267204695.47543") :outer("11_1267204695.47543")
+.sub "backmod"  :subid("27_1271336390.22432") :outer("11_1271336390.22432")
     .param pmc param_311
     .param pmc param_312
 .annotate "line", 562
@@ -8299,7 +8299,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "subrule_alias"  :subid("28_1267204695.47543") :outer("11_1267204695.47543")
+.sub "subrule_alias"  :subid("28_1271336390.22432") :outer("11_1271336390.22432")
     .param pmc param_343
     .param pmc param_344
 .annotate "line", 569
@@ -8343,7 +8343,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "arg"  :subid("29_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "arg"  :subid("29_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_365
 .annotate "line", 14
     new $P364, 'ExceptionHandler'
@@ -8399,10 +8399,10 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "arglist"  :subid("30_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "arglist"  :subid("30_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_382
 .annotate "line", 18
-    .const 'Sub' $P392 = "31_1267204695.47543" 
+    .const 'Sub' $P392 = "31_1271336390.22432" 
     capture_lex $P392
     new $P381, 'ExceptionHandler'
     set_addr $P381, control_380
@@ -8436,7 +8436,7 @@
     unless $P386, loop398_done
     shift $P390, $P386
   loop398_redo:
-    .const 'Sub' $P392 = "31_1267204695.47543" 
+    .const 'Sub' $P392 = "31_1271336390.22432" 
     capture_lex $P392
     $P392($P390)
   loop398_next:
@@ -8465,7 +8465,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block391"  :anon :subid("31_1267204695.47543") :outer("30_1267204695.47543")
+.sub "_block391"  :anon :subid("31_1271336390.22432") :outer("30_1271336390.22432")
     .param pmc param_393
 .annotate "line", 20
     .lex "$_", param_393
@@ -8478,7 +8478,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "TOP"  :subid("32_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "TOP"  :subid("32_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_408
 .annotate "line", 24
     new $P407, 'ExceptionHandler'
@@ -8520,14 +8520,14 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "nibbler"  :subid("33_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "nibbler"  :subid("33_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_423
     .param pmc param_424 :optional
     .param int has_param_424 :opt_flag
 .annotate "line", 30
-    .const 'Sub' $P458 = "35_1267204695.47543" 
+    .const 'Sub' $P458 = "35_1271336390.22432" 
     capture_lex $P458
-    .const 'Sub' $P432 = "34_1267204695.47543" 
+    .const 'Sub' $P432 = "34_1271336390.22432" 
     capture_lex $P432
     new $P422, 'ExceptionHandler'
     set_addr $P422, control_421
@@ -8548,7 +8548,7 @@
     set $S429, $P428
     iseq $I430, $S429, "open"
     unless $I430, if_427_end
-    .const 'Sub' $P432 = "34_1267204695.47543" 
+    .const 'Sub' $P432 = "34_1271336390.22432" 
     capture_lex $P432
     $P432()
   if_427_end:
@@ -8611,7 +8611,7 @@
     unless $P452, loop464_done
     shift $P456, $P452
   loop464_redo:
-    .const 'Sub' $P458 = "35_1267204695.47543" 
+    .const 'Sub' $P458 = "35_1271336390.22432" 
     capture_lex $P458
     $P458($P456)
   loop464_next:
@@ -8641,7 +8641,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block431"  :anon :subid("34_1267204695.47543") :outer("33_1267204695.47543")
+.sub "_block431"  :anon :subid("34_1271336390.22432") :outer("33_1271336390.22432")
 .annotate "line", 32
     $P433 = root_new ['parrot';'Hash']
     .lex "%old", $P433
@@ -8681,7 +8681,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block457"  :anon :subid("35_1267204695.47543") :outer("33_1267204695.47543")
+.sub "_block457"  :anon :subid("35_1271336390.22432") :outer("33_1271336390.22432")
     .param pmc param_459
 .annotate "line", 45
     .lex "$_", param_459
@@ -8696,10 +8696,10 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "termish"  :subid("36_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "termish"  :subid("36_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_478
 .annotate "line", 55
-    .const 'Sub' $P491 = "37_1267204695.47543" 
+    .const 'Sub' $P491 = "37_1271336390.22432" 
     capture_lex $P491
     new $P477, 'ExceptionHandler'
     set_addr $P477, control_476
@@ -8742,7 +8742,7 @@
     unless $P485, loop536_done
     shift $P489, $P485
   loop536_redo:
-    .const 'Sub' $P491 = "37_1267204695.47543" 
+    .const 'Sub' $P491 = "37_1271336390.22432" 
     capture_lex $P491
     $P491($P489)
   loop536_next:
@@ -8771,7 +8771,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block490"  :anon :subid("37_1267204695.47543") :outer("36_1267204695.47543")
+.sub "_block490"  :anon :subid("37_1271336390.22432") :outer("36_1271336390.22432")
     .param pmc param_493
 .annotate "line", 59
     new $P492, "Undef"
@@ -8898,10 +8898,10 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantified_atom"  :subid("38_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "quantified_atom"  :subid("38_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_546
 .annotate "line", 76
-    .const 'Sub' $P555 = "39_1267204695.47543" 
+    .const 'Sub' $P555 = "39_1271336390.22432" 
     capture_lex $P555
     new $P545, 'ExceptionHandler'
     set_addr $P545, control_544
@@ -8964,7 +8964,7 @@
     goto if_551_end
   if_551:
 .annotate "line", 78
-    .const 'Sub' $P555 = "39_1267204695.47543" 
+    .const 'Sub' $P555 = "39_1271336390.22432" 
     capture_lex $P555
     $P555()
   if_551_end:
@@ -9018,7 +9018,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block554"  :anon :subid("39_1267204695.47543") :outer("38_1267204695.47543")
+.sub "_block554"  :anon :subid("39_1271336390.22432") :outer("38_1271336390.22432")
 .annotate "line", 80
     new $P556, "Undef"
     .lex "$qast", $P556
@@ -9057,7 +9057,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "atom"  :subid("40_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "atom"  :subid("40_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_596
 .annotate "line", 91
     new $P595, 'ExceptionHandler'
@@ -9135,7 +9135,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantifier:sym<*>"  :subid("41_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "quantifier:sym<*>"  :subid("41_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_622
 .annotate "line", 101
     new $P621, 'ExceptionHandler'
@@ -9175,7 +9175,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantifier:sym<+>"  :subid("42_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "quantifier:sym<+>"  :subid("42_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_637
 .annotate "line", 106
     new $P636, 'ExceptionHandler'
@@ -9215,7 +9215,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantifier:sym<?>"  :subid("43_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "quantifier:sym<?>"  :subid("43_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_652
 .annotate "line", 111
     new $P651, 'ExceptionHandler'
@@ -9259,7 +9259,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "quantifier:sym<**>"  :subid("44_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "quantifier:sym<**>"  :subid("44_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_669
 .annotate "line", 117
     new $P668, 'ExceptionHandler'
@@ -9399,7 +9399,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<ws>"  :subid("45_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<ws>"  :subid("45_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_716
 .annotate "line", 131
     new $P715, 'ExceptionHandler'
@@ -9451,7 +9451,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<[ ]>"  :subid("46_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<[ ]>"  :subid("46_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_734
 .annotate "line", 140
     new $P733, 'ExceptionHandler'
@@ -9483,7 +9483,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<( )>"  :subid("47_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<( )>"  :subid("47_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_744
 .annotate "line", 144
     new $P743, 'ExceptionHandler'
@@ -9531,7 +9531,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<'>"  :subid("48_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<'>"  :subid("48_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_762
 .annotate "line", 151
     new $P761, 'ExceptionHandler'
@@ -9587,7 +9587,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<\">"  :subid("49_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<\">"  :subid("49_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_785
 .annotate "line", 158
     new $P784, 'ExceptionHandler'
@@ -9643,7 +9643,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<.>"  :subid("50_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<.>"  :subid("50_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_808
 .annotate "line", 165
     new $P807, 'ExceptionHandler'
@@ -9674,7 +9674,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<^>"  :subid("51_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<^>"  :subid("51_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_820
 .annotate "line", 170
     new $P819, 'ExceptionHandler'
@@ -9705,7 +9705,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<^^>"  :subid("52_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<^^>"  :subid("52_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_832
 .annotate "line", 175
     new $P831, 'ExceptionHandler'
@@ -9736,7 +9736,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<$>"  :subid("53_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<$>"  :subid("53_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_844
 .annotate "line", 180
     new $P843, 'ExceptionHandler'
@@ -9767,7 +9767,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<$$>"  :subid("54_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<$$>"  :subid("54_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_856
 .annotate "line", 185
     new $P855, 'ExceptionHandler'
@@ -9798,7 +9798,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<:::>"  :subid("55_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<:::>"  :subid("55_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_868
 .annotate "line", 190
     new $P867, 'ExceptionHandler'
@@ -9829,7 +9829,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<lwb>"  :subid("56_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<lwb>"  :subid("56_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_880
 .annotate "line", 195
     new $P879, 'ExceptionHandler'
@@ -9860,7 +9860,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<rwb>"  :subid("57_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<rwb>"  :subid("57_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_892
 .annotate "line", 200
     new $P891, 'ExceptionHandler'
@@ -9891,7 +9891,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<bs>"  :subid("58_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<bs>"  :subid("58_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_904
 .annotate "line", 205
     new $P903, 'ExceptionHandler'
@@ -9923,7 +9923,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<mod>"  :subid("59_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<mod>"  :subid("59_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_914
 .annotate "line", 209
     new $P913, 'ExceptionHandler'
@@ -9955,7 +9955,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<assert>"  :subid("60_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<assert>"  :subid("60_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_924
 .annotate "line", 213
     new $P923, 'ExceptionHandler'
@@ -9987,7 +9987,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<~>"  :subid("61_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<~>"  :subid("61_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_934
 .annotate "line", 217
     new $P933, 'ExceptionHandler'
@@ -10049,7 +10049,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<{*}>"  :subid("62_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<{*}>"  :subid("62_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_956
 .annotate "line", 230
     new $P955, 'ExceptionHandler'
@@ -10110,7 +10110,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<var>"  :subid("63_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<var>"  :subid("63_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_977
 .annotate "line", 237
     new $P976, 'ExceptionHandler'
@@ -10270,7 +10270,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "metachar:sym<PIR>"  :subid("64_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "metachar:sym<PIR>"  :subid("64_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1033
 .annotate "line", 257
     new $P1032, 'ExceptionHandler'
@@ -10309,7 +10309,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<w>"  :subid("65_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<w>"  :subid("65_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1048
 .annotate "line", 265
     new $P1047, 'ExceptionHandler'
@@ -10375,7 +10375,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<b>"  :subid("66_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<b>"  :subid("66_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1072
 .annotate "line", 271
     new $P1071, 'ExceptionHandler'
@@ -10418,7 +10418,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<e>"  :subid("67_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<e>"  :subid("67_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1088
 .annotate "line", 277
     new $P1087, 'ExceptionHandler'
@@ -10443,7 +10443,7 @@
     set $S1093, $P1092
     iseq $I1094, $S1093, "E"
     find_lex $P1095, "$/"
-    $P1096 = $P1090."new"("\\e", "enumcharlist" :named("pasttype"), $I1094 :named("negate"), $P1095 :named("node"))
+    $P1096 = $P1090."new"("\e", "enumcharlist" :named("pasttype"), $I1094 :named("negate"), $P1095 :named("node"))
 .annotate "line", 278
     store_lex "$past", $P1096
 .annotate "line", 280
@@ -10461,7 +10461,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<f>"  :subid("68_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<f>"  :subid("68_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1104
 .annotate "line", 283
     new $P1103, 'ExceptionHandler'
@@ -10486,7 +10486,7 @@
     set $S1109, $P1108
     iseq $I1110, $S1109, "F"
     find_lex $P1111, "$/"
-    $P1112 = $P1106."new"("\\f", "enumcharlist" :named("pasttype"), $I1110 :named("negate"), $P1111 :named("node"))
+    $P1112 = $P1106."new"("\f", "enumcharlist" :named("pasttype"), $I1110 :named("negate"), $P1111 :named("node"))
 .annotate "line", 284
     store_lex "$past", $P1112
 .annotate "line", 286
@@ -10504,7 +10504,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<h>"  :subid("69_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<h>"  :subid("69_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1120
 .annotate "line", 289
     new $P1119, 'ExceptionHandler'
@@ -10547,7 +10547,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<r>"  :subid("70_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<r>"  :subid("70_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1136
 .annotate "line", 295
     new $P1135, 'ExceptionHandler'
@@ -10590,7 +10590,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<t>"  :subid("71_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<t>"  :subid("71_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1152
 .annotate "line", 301
     new $P1151, 'ExceptionHandler'
@@ -10633,7 +10633,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<v>"  :subid("72_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<v>"  :subid("72_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1168
 .annotate "line", 307
     new $P1167, 'ExceptionHandler'
@@ -10676,7 +10676,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<o>"  :subid("73_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<o>"  :subid("73_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1184
 .annotate "line", 314
     new $P1183, 'ExceptionHandler'
@@ -10759,7 +10759,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<x>"  :subid("74_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<x>"  :subid("74_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1215
 .annotate "line", 323
     new $P1214, 'ExceptionHandler'
@@ -10842,7 +10842,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<c>"  :subid("75_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<c>"  :subid("75_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1246
 .annotate "line", 332
     new $P1245, 'ExceptionHandler'
@@ -10877,7 +10877,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "backslash:sym<misc>"  :subid("76_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "backslash:sym<misc>"  :subid("76_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1259
 .annotate "line", 336
     new $P1258, 'ExceptionHandler'
@@ -10910,7 +10910,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<?>"  :subid("77_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "assertion:sym<?>"  :subid("77_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1273
 .annotate "line", 342
     new $P1272, 'ExceptionHandler'
@@ -10970,7 +10970,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<!>"  :subid("78_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "assertion:sym<!>"  :subid("78_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1291
 .annotate "line", 352
     new $P1290, 'ExceptionHandler'
@@ -11038,7 +11038,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<method>"  :subid("79_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "assertion:sym<method>"  :subid("79_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1315
 .annotate "line", 365
     new $P1314, 'ExceptionHandler'
@@ -11081,12 +11081,12 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<name>"  :subid("80_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "assertion:sym<name>"  :subid("80_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1329
 .annotate "line", 372
-    .const 'Sub' $P1387 = "82_1267204695.47543" 
+    .const 'Sub' $P1387 = "82_1271336390.22432" 
     capture_lex $P1387
-    .const 'Sub' $P1351 = "81_1267204695.47543" 
+    .const 'Sub' $P1351 = "81_1271336390.22432" 
     capture_lex $P1351
     new $P1328, 'ExceptionHandler'
     set_addr $P1328, control_1327
@@ -11182,7 +11182,7 @@
     unless $P1378, loop1392_done
     shift $P1385, $P1378
   loop1392_redo:
-    .const 'Sub' $P1387 = "82_1267204695.47543" 
+    .const 'Sub' $P1387 = "82_1271336390.22432" 
     capture_lex $P1387
     $P1387($P1385)
   loop1392_next:
@@ -11222,7 +11222,7 @@
     goto if_1346_end
   if_1346:
 .annotate "line", 379
-    .const 'Sub' $P1351 = "81_1267204695.47543" 
+    .const 'Sub' $P1351 = "81_1271336390.22432" 
     capture_lex $P1351
     $P1351()
   if_1346_end:
@@ -11263,7 +11263,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1386"  :anon :subid("82_1267204695.47543") :outer("80_1267204695.47543")
+.sub "_block1386"  :anon :subid("82_1271336390.22432") :outer("80_1271336390.22432")
     .param pmc param_1388
 .annotate "line", 401
     .lex "$_", param_1388
@@ -11275,7 +11275,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1350"  :anon :subid("81_1267204695.47543") :outer("80_1267204695.47543")
+.sub "_block1350"  :anon :subid("81_1271336390.22432") :outer("80_1271336390.22432")
 .annotate "line", 380
     new $P1352, "Undef"
     .lex "$regexsym", $P1352
@@ -11306,10 +11306,10 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "assertion:sym<[>"  :subid("83_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "assertion:sym<[>"  :subid("83_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1402
 .annotate "line", 407
-    .const 'Sub' $P1437 = "84_1267204695.47543" 
+    .const 'Sub' $P1437 = "84_1271336390.22432" 
     capture_lex $P1437
     new $P1401, 'ExceptionHandler'
     set_addr $P1401, control_1400
@@ -11401,7 +11401,7 @@
     islt $I1435, $N1432, $N1434
     unless $I1435, loop1460_done
   loop1460_redo:
-    .const 'Sub' $P1437 = "84_1267204695.47543" 
+    .const 'Sub' $P1437 = "84_1271336390.22432" 
     capture_lex $P1437
     $P1437()
   loop1460_next:
@@ -11429,7 +11429,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1436"  :anon :subid("84_1267204695.47543") :outer("83_1267204695.47543")
+.sub "_block1436"  :anon :subid("84_1271336390.22432") :outer("83_1271336390.22432")
 .annotate "line", 421
     new $P1438, "Undef"
     .lex "$ast", $P1438
@@ -11480,12 +11480,12 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "cclass_elem"  :subid("85_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "cclass_elem"  :subid("85_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1470
 .annotate "line", 434
-    .const 'Sub' $P1495 = "87_1267204695.47543" 
+    .const 'Sub' $P1495 = "87_1271336390.22432" 
     capture_lex $P1495
-    .const 'Sub' $P1479 = "86_1267204695.47543" 
+    .const 'Sub' $P1479 = "86_1271336390.22432" 
     capture_lex $P1479
     new $P1469, 'ExceptionHandler'
     set_addr $P1469, control_1468
@@ -11534,7 +11534,7 @@
     unless $P1489, loop1520_done
     shift $P1493, $P1489
   loop1520_redo:
-    .const 'Sub' $P1495 = "87_1267204695.47543" 
+    .const 'Sub' $P1495 = "87_1271336390.22432" 
     capture_lex $P1495
     $P1495($P1493)
   loop1520_next:
@@ -11558,7 +11558,7 @@
     goto if_1475_end
   if_1475:
 .annotate "line", 437
-    .const 'Sub' $P1479 = "86_1267204695.47543" 
+    .const 'Sub' $P1479 = "86_1271336390.22432" 
     capture_lex $P1479
     $P1479()
   if_1475_end:
@@ -11590,10 +11590,10 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1494"  :anon :subid("87_1267204695.47543") :outer("85_1267204695.47543")
+.sub "_block1494"  :anon :subid("87_1271336390.22432") :outer("85_1271336390.22432")
     .param pmc param_1496
 .annotate "line", 441
-    .const 'Sub' $P1502 = "88_1267204695.47543" 
+    .const 'Sub' $P1502 = "88_1271336390.22432" 
     capture_lex $P1502
     .lex "$_", param_1496
 .annotate "line", 442
@@ -11622,7 +11622,7 @@
 .annotate "line", 442
     goto if_1498_end
   if_1498:
-    .const 'Sub' $P1502 = "88_1267204695.47543" 
+    .const 'Sub' $P1502 = "88_1271336390.22432" 
     capture_lex $P1502
     $P1515 = $P1502()
     set $P1497, $P1515
@@ -11633,7 +11633,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1501"  :anon :subid("88_1267204695.47543") :outer("87_1267204695.47543")
+.sub "_block1501"  :anon :subid("88_1271336390.22432") :outer("87_1271336390.22432")
 .annotate "line", 443
     new $P1503, "Undef"
     .lex "$a", $P1503
@@ -11697,7 +11697,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1478"  :anon :subid("86_1267204695.47543") :outer("85_1267204695.47543")
+.sub "_block1478"  :anon :subid("86_1271336390.22432") :outer("85_1271336390.22432")
 .annotate "line", 438
     new $P1480, "Undef"
     .lex "$name", $P1480
@@ -11725,7 +11725,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "mod_internal"  :subid("89_1267204695.47543") :method :outer("11_1267204695.47543")
+.sub "mod_internal"  :subid("89_1271336390.22432") :method :outer("11_1271336390.22432")
     .param pmc param_1539
 .annotate "line", 472
     new $P1538, 'ExceptionHandler'

Modified: branches/avl_string_cache/include/parrot/call.h
==============================================================================
--- branches/avl_string_cache/include/parrot/call.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/call.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -157,6 +157,7 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC* Parrot_pcc_build_call_from_c_args(PARROT_INTERP,
     ARGIN_NULLOK(PMC *signature),
@@ -182,8 +183,8 @@
 PARROT_CANNOT_RETURN_NULL
 PMC* Parrot_pcc_build_sig_object_from_op(PARROT_INTERP,
     ARGIN_NULLOK(PMC *signature),
-    ARGIN(PMC * const raw_sig),
-    ARGIN(opcode_t * const raw_args))
+    ARGIN(PMC *raw_sig),
+    ARGIN(opcode_t *raw_args))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4);
@@ -250,15 +251,13 @@
         FUNC_MODIFIES(*arg_flags)
         FUNC_MODIFIES(*return_flags);
 
-PARROT_CAN_RETURN_NULL
-void Parrot_pcc_split_signature_string(PARROT_INTERP,
+void Parrot_pcc_split_signature_string(
     ARGIN(const char *signature),
     ARGMOD(const char **arg_sig),
     ARGMOD(const char **return_sig))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
         FUNC_MODIFIES(*arg_sig)
         FUNC_MODIFIES(*return_sig);
 
@@ -306,8 +305,7 @@
     , PARROT_ASSERT_ARG(return_flags))
 #define ASSERT_ARGS_Parrot_pcc_split_signature_string \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(signature) \
+       PARROT_ASSERT_ARG(signature) \
     , PARROT_ASSERT_ARG(arg_sig) \
     , PARROT_ASSERT_ARG(return_sig))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -321,10 +319,10 @@
 
 /* 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 (*(pc) == PARROT_OP_set_args_pc       \
+    ||  *(pc) == PARROT_OP_get_results_pc    \
+    ||  *(pc) == PARROT_OP_get_params_pc     \
+    ||  *(pc) == PARROT_OP_set_returns_pc) { \
         PMC * const sig = (seg)->const_table->constants[(pc)[1]]->u.key; \
         (n) += VTABLE_elements((interp), sig); \
     } \

Modified: branches/avl_string_cache/include/parrot/charset.h
==============================================================================
--- branches/avl_string_cache/include/parrot/charset.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/charset.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -34,19 +34,17 @@
 #define PARROT_UNICODE_CHARSET Parrot_unicode_charset_ptr
 
 typedef STRING *(*charset_get_graphemes_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset, UINTVAL count);
-typedef STRING *(*charset_get_graphemes_inplace_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset, UINTVAL count, STRING *dest_string);
-typedef void (*charset_set_graphemes_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset, UINTVAL replace_count, STRING *insert_string);
 
-typedef STRING * (*charset_to_charset_t)(PARROT_INTERP, STRING *source_string, STRING *dest);
-typedef STRING * (*charset_from_unicode_t)(PARROT_INTERP, STRING *source_string, STRING *dest);
+typedef STRING * (*charset_to_charset_t)(PARROT_INTERP, STRING *source_string);
+typedef STRING * (*charset_from_unicode_t)(PARROT_INTERP, STRING *source_string);
 typedef STRING* (*charset_compose_t)(PARROT_INTERP, STRING *source_string);
 typedef STRING* (*charset_decompose_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_upcase_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_downcase_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_titlecase_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_upcase_first_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_downcase_first_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_titlecase_first_t)(PARROT_INTERP, STRING *source_string);
+typedef STRING* (*charset_upcase_t)(PARROT_INTERP, const STRING *source_string);
+typedef STRING* (*charset_downcase_t)(PARROT_INTERP, const STRING *source_string);
+typedef STRING* (*charset_titlecase_t)(PARROT_INTERP, const STRING *source_string);
+typedef STRING* (*charset_upcase_first_t)(PARROT_INTERP, const STRING *source_string);
+typedef STRING* (*charset_downcase_first_t)(PARROT_INTERP, const STRING *source_string);
+typedef STRING* (*charset_titlecase_first_t)(PARROT_INTERP, const STRING *source_string);
 typedef INTVAL (*charset_compare_t)(PARROT_INTERP, const STRING *lhs, const STRING *rhs);
 typedef INTVAL (*charset_index_t)(PARROT_INTERP, STRING *source_string, STRING *search_string, UINTVAL offset);
 typedef INTVAL (*charset_rindex_t)(PARROT_INTERP, STRING *source_string, STRING *search_string, UINTVAL offset);
@@ -73,7 +71,7 @@
 typedef STRING *(*charset_string_from_codepoint_t)(PARROT_INTERP, UINTVAL codepoint);
 typedef size_t (*charset_compute_hash_t)(PARROT_INTERP, const STRING *, size_t seed);
 
-typedef STRING* (*charset_converter_t)(PARROT_INTERP, STRING *src, STRING *dst);
+typedef STRING* (*charset_converter_t)(PARROT_INTERP, STRING *src);
 
 /* HEADERIZER BEGIN: src/string/charset.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -86,7 +84,7 @@
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-STRING* Parrot_charset_name(SHIM_INTERP, INTVAL number_of_charset);
+STRING * Parrot_charset_name(SHIM_INTERP, INTVAL number_of_charset);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -137,18 +135,19 @@
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-CHARSET * Parrot_load_charset(PARROT_INTERP, ARGIN(const char *charsetname))
+const CHARSET * Parrot_load_charset(PARROT_INTERP,
+    ARGIN(const char *charsetname))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 INTVAL Parrot_make_default_charset(SHIM_INTERP,
     SHIM(const char *charsetname),
-    ARGIN(CHARSET *charset))
+    ARGIN(const CHARSET *charset))
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 PARROT_MALLOC
 CHARSET * Parrot_new_charset(PARROT_INTERP)
         __attribute__nonnull__(1);
@@ -164,7 +163,7 @@
 PARROT_EXPORT
 void Parrot_register_charset_converter(PARROT_INTERP,
     ARGIN(const CHARSET *lhs),
-    ARGIN(CHARSET *rhs),
+    ARGIN(const CHARSET *rhs),
     ARGIN(charset_converter_t func))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -214,8 +213,6 @@
 struct _charset {
     const char *name;
     charset_get_graphemes_t get_graphemes;
-    charset_get_graphemes_inplace_t get_graphemes_inplace;
-    charset_set_graphemes_t set_graphemes;
     charset_to_charset_t to_charset;
     charset_compose_t compose;
     charset_decompose_t decompose;
@@ -238,8 +235,6 @@
 };
 
 #define CHARSET_GET_GRAPEMES(interp, source, offset, count) ((source)->charset)->get_graphemes((interp), (source), (offset), (count))
-#define CHARSET_GET_GRAPHEMES_INPLACE(interp, source, dest, offset, count) ((source)->charset)->get_graphemes((interp), (source), (dest), (offset), (count))
-#define CHARSET_SET_GRAPHEMES(interp, source, offset, replace_count, insert) ((source)->charset)->set_graphemes((interp), (source), (offset), (replace_count), (insert))
 #define CHARSET_TO_UNICODE(interp, source, dest) ((source)->charset)->to_unicode((interp), (source), (dest))
 #define CHARSET_COMPOSE(interp, source) ((source)->charset)->compose((interp), (source))
 #define CHARSET_DECOMPOSE(interp, source) ((source)->charset)->decompose((interp), (source))
@@ -262,16 +257,10 @@
 #define CHARSET_TO_ENCODING(interp, source) ((source)->encoding)->to_encoding((interp), (source))
 #define CHARSET_COPY_TO_ENCODING(interp, source) ((source)->encoding)->copy_to_encoding((interp), (source))
 #define CHARSET_GET_CODEPOINT(interp, source, offset) ((source)->encoding)->get_codepoint((interp), (source), (offset))
-#define CHARSET_SET_CODEPOINT(interp, source, offset, codepoint) ((source)->encoding)->set_codepoint((interp), (source), (offset), (codepoint))
 #define CHARSET_GET_BYTE(interp, source, offset) ((source)->encoding)->get_byte((interp), (source), (offset))
 #define CHARSET_SET_BYTE(interp, source, offset, value) ((source)->encoding)->set_byte((interp), (source), (offset), (value))
 #define CHARSET_GET_CODEPOINTS(interp, source, offset, count) ((source)->encoding)->get_codepoints((interp), (source), (offset), (count))
-#define CHARSET_GET_CODEPOINTS_INPLACE(interp, source, dest, offset, count) ((source)->encoding)->get_codepoints_inplace((interp), (source), (dest), (offset), (count))
 #define CHARSET_GET_BYTES(interp, source, offset, count) ((source)->encoding)->get_bytes((interp), (source), (offset), (count))
-#define CHARSET_GET_BYTES_INPLACE(interp, source, offset, count, dest) ((source)->encoding)->get_bytes((interp), (source), (offset), (count), (dest))
-#define CHARSET_SET_CODEPOINTS(interp, source, offset, count, newdata) ((source)->encoding)->set_codepoints((interp), (source), (offset), (count), (newdata))
-#define CHARSET_SET_BYTES(interp, source, offset, count, newdata) ((source)->encoding)->set_bytes((interp), (source), (offset), (count), (newdata))
-#define CHARSET_BECOME_ENCODING(interp, source) ((source)->encoding)->become_encoding((interp), (source))
 #define CHARSET_CODEPOINTS(interp, source) ((source)->encoding)->codepoints((interp), (source))
 #define CHARSET_BYTES(interp, source) ((source)->encoding)->bytes((interp), (source))
 

Modified: branches/avl_string_cache/include/parrot/compiler.h
==============================================================================
--- branches/avl_string_cache/include/parrot/compiler.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/compiler.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /* compiler.h
- *  Copyright (C) 2007-2008, Parrot Foundation.
+ *  Copyright (C) 2007-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -25,7 +25,7 @@
 #  endif
 #endif
 #ifdef HASATTRIBUTE_FORMAT
-#  define __attribute__format__(x, y, z)    __attribute__((__format__((x), (y), (z))))
+#  define __attribute__format__(x, y, z)    __attribute__((format((x), (y), (z))))
 #endif
 #ifdef HASATTRIBUTE_MALLOC
 #  define __attribute__malloc__             __attribute__((__malloc__))
@@ -59,6 +59,12 @@
 #ifdef HASATTRIBUTE_WARN_UNUSED_RESULT
 #  define __attribute__warn_unused_result__ __attribute__((__warn_unused_result__))
 #endif
+#ifdef HASATTRIBUTE_HOT
+#  define __attribute__hot__                __attribute__((__hot__))
+#endif
+#ifdef HASATTRIBUTE_COLD
+#  define __attribute__cold__               __attribute__((__cold__))
+#endif
 
 /* If we haven't defined the attributes yet, define them to blank. */
 #ifndef __attribute__deprecated__
@@ -88,6 +94,12 @@
 #ifndef __attribute__warn_unused_result__
 #  define __attribute__warn_unused_result__
 #endif
+#ifndef __attribute__hot__
+#  define __attribute__hot__
+#endif
+#ifndef __attribute__cold__
+#  define __attribute__cold__
+#endif
 
 
 /* Shim arguments are arguments that must be included in your function,
@@ -134,6 +146,10 @@
 #define PARROT_DOES_NOT_RETURN_WHEN_FALSE   /*@noreturnwhenfalse@*/
 #define PARROT_MALLOC                       /*@only@*/ __attribute__malloc__ __attribute__warn_unused_result__
 
+/* Hot functions can be optimized by the compiler. */
+#define PARROT_HOT                          __attribute__hot__
+#define PARROT_COLD                         __attribute__cold__
+
 /* Macros for exposure tracking for splint. */
 /* See http://www.splint.org/manual/html/all.html section 6.2 */
 #define PARROT_OBSERVER                     /*@observer@*/
@@ -200,6 +216,7 @@
     /* may not pass in a reference to a shared object.  There is nothing */
     /* special about malloc and free --  their behavior can be described */
     /* entirely in terms of the provided annotations. */
+#define ARGFREE_NOTNULL(x)                  /*@only@*/ /*@out@*/ /*@notnull@*/ x
 
 #endif /* PARROT_COMPILER_H_GUARD */
 

Modified: branches/avl_string_cache/include/parrot/embed.h
==============================================================================
--- branches/avl_string_cache/include/parrot/embed.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/embed.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -56,11 +56,7 @@
 
 PARROT_EXPORT void Parrot_pbc_fixup_loaded(Parrot_Interp);
 
-PARROT_EXPORT void Parrot_setup_argv(Parrot_Interp, int argc, const char **argv);
-
-PARROT_EXPORT void Parrot_setup_opt(Parrot_Interp, int n, char *argv);
-
-PARROT_EXPORT void Parrot_runcode(Parrot_Interp, int argc, char **argv);
+PARROT_EXPORT void Parrot_runcode(Parrot_Interp, int argc, const char **argv);
 
 PARROT_EXPORT Parrot_PMC Parrot_compile_string(Parrot_Interp,
         Parrot_String type, const char *code, Parrot_String *error);
@@ -82,8 +78,6 @@
    addition to libparrot */
 void Parrot_set_config_hash(void);
 
-int Parrot_revision(void);
-
 #endif /* PARROT_EMBED_H_GUARD */
 
 /*

Modified: branches/avl_string_cache/include/parrot/encoding.h
==============================================================================
--- branches/avl_string_cache/include/parrot/encoding.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/encoding.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -15,21 +15,16 @@
 
 #include "parrot/parrot.h"
 
-typedef STRING * (*encoding_to_encoding_t)(PARROT_INTERP, NOTNULL(STRING *src), NULLOK(STRING *dest));
+typedef STRING * (*encoding_to_encoding_t)(PARROT_INTERP, NOTNULL(const STRING *src));
 typedef UINTVAL (*encoding_get_codepoint_t)(PARROT_INTERP, const STRING *src, UINTVAL offset);
-typedef void (*encoding_set_codepoint_t)(PARROT_INTERP, STRING *src, UINTVAL offset, UINTVAL codepoint);
 typedef UINTVAL (*encoding_get_byte_t)(PARROT_INTERP, const STRING *src, UINTVAL offset);
 typedef void (*encoding_set_byte_t)(PARROT_INTERP, const STRING *src, UINTVAL offset, UINTVAL count);
 typedef STRING *(*encoding_get_codepoints_t)(PARROT_INTERP, STRING *src, UINTVAL offset, UINTVAL count);
 typedef STRING *(*encoding_get_bytes_t)(PARROT_INTERP, STRING *src, UINTVAL offset, UINTVAL count);
-typedef STRING *(*encoding_get_codepoints_inplace_t)(PARROT_INTERP, STRING *src, UINTVAL offset, UINTVAL count, STRING *dest_string);
-typedef STRING *(*encoding_get_bytes_inplace_t)(PARROT_INTERP, STRING *src, UINTVAL offset, UINTVAL count, STRING *dest_string);
-typedef void (*encoding_set_codepoints_t)(PARROT_INTERP, STRING *src, UINTVAL offset, UINTVAL count, STRING *new_bytes);
-typedef void (*encoding_set_bytes_t)(PARROT_INTERP, STRING *src, UINTVAL offset, UINTVAL count, STRING *new_bytes);
-typedef void (*encoding_become_encoding_t)(PARROT_INTERP, STRING *src);
-typedef UINTVAL (*encoding_codepoints_t)(PARROT_INTERP, STRING *src);
-typedef UINTVAL (*encoding_bytes_t)(PARROT_INTERP, STRING *src);
+typedef UINTVAL (*encoding_codepoints_t)(PARROT_INTERP, ARGIN(const STRING *src));
+typedef UINTVAL (*encoding_bytes_t)(PARROT_INTERP, ARGIN(const STRING *src));
 typedef UINTVAL (*encoding_find_cclass_t)(PARROT_INTERP, STRING *s, const INTVAL *typetable, INTVAL flags, UINTVAL offset, UINTVAL count);
+typedef size_t (*encoding_hash_t)(PARROT_INTERP, const STRING *s, size_t hashval);
 
 /* iterator support */
 
@@ -43,20 +38,15 @@
     UINTVAL max_bytes_per_codepoint;
     encoding_to_encoding_t              to_encoding;
     encoding_get_codepoint_t            get_codepoint;
-    encoding_set_codepoint_t            set_codepoint;
     encoding_get_byte_t                 get_byte;
     encoding_set_byte_t                 set_byte;
     encoding_get_codepoints_t           get_codepoints;
-    encoding_get_codepoints_inplace_t   get_codepoints_inplace;
     encoding_get_bytes_t                get_bytes;
-    encoding_get_bytes_inplace_t        get_bytes_inplace;
-    encoding_set_codepoints_t           set_codepoints;
-    encoding_set_bytes_t                set_bytes;
-    encoding_become_encoding_t          become_encoding;
     encoding_codepoints_t               codepoints;
     encoding_bytes_t                    bytes;
     encoding_iter_init_t                iter_init;
     encoding_find_cclass_t              find_cclass;
+    encoding_hash_t                     hash;
 };
 
 typedef struct _encoding ENCODING;
@@ -79,21 +69,25 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 const ENCODING * Parrot_default_encoding(SHIM_INTERP);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const char * Parrot_encoding_c_name(SHIM_INTERP, INTVAL number_of_encoding);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 STRING* Parrot_encoding_name(SHIM_INTERP, INTVAL number_of_encoding);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_encoding_number(PARROT_INTERP,
     ARGIN(const STRING *encodingname))
@@ -101,11 +95,13 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_encoding_number_of_str(SHIM_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const ENCODING * Parrot_find_encoding(SHIM_INTERP,
@@ -122,6 +118,7 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const ENCODING* Parrot_get_encoding(SHIM_INTERP, INTVAL number_of_encoding);
@@ -199,26 +196,14 @@
     ((src)->encoding)->max_bytes_per_codepoint
 #define ENCODING_GET_CODEPOINT(i, src, offset) \
     ((src)->encoding)->get_codepoint((i), (src), (offset))
-#define ENCODING_SET_CODEPOINT(i, src, offset, codepoint) \
-    ((src)->encoding)->set_codepoint((i), (src), (offset), (codepoint))
 #define ENCODING_GET_BYTE(i, src, offset) \
     ((src)->encoding)->get_byte((i), (src), (offset))
 #define ENCODING_SET_BYTE(i, src, offset, value) \
     ((src)->encoding)->set_byte((i), (src), (offset), (value))
 #define ENCODING_GET_CODEPOINTS(i, src, offset, count) \
     ((src)->encoding)->get_codepoints((i), (src), (offset), (count))
-#define ENCODING_GET_CODEPOINTS_INPLACE(i, src, offset, count, dest) \
-    ((src)->encoding)->get_codepoints_inplace((i), (src), (offset), (count), (dest))
 #define ENCODING_GET_BYTES(i, src, offset, count) \
     ((src)->encoding)->get_bytes((i), (src), (offset), (count))
-#define ENCODING_GET_BYTES_INPLACE(i, src, offset, count, dest) \
-    ((src)->encoding)->get_bytes_inplace((i), (src), (offset), (count), (dest))
-#define ENCODING_SET_CODEPOINTS(i, src, offset, count, newdata) \
-    ((src)->encoding)->set_codepoints((i), (src), (offset), (count), (newdata))
-#define ENCODING_SET_BYTES(i, src, offset, count, newdata) \
-    ((src)->encoding)->set_bytes((i), (src), (offset), (count), (newdata))
-#define ENCODING_BECOME_ENCODING(i, src) \
-    ((src)->encoding)->become_encoding((i), (src))
 #define ENCODING_CODEPOINTS(i, src) \
     ((src)->encoding)->codepoints((i), (src))
 #define ENCODING_BYTES(i, src) \
@@ -227,6 +212,8 @@
     ((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) \
+    ((src)->encoding)->hash((i), (src), (seed))
 
 #endif /* PARROT_ENCODING_H_GUARD */
 

Modified: branches/avl_string_cache/include/parrot/exceptions.h
==============================================================================
--- branches/avl_string_cache/include/parrot/exceptions.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/exceptions.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -118,6 +118,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void exit_fatal(int exitcode, ARGIN(const char *format), ...)
         __attribute__nonnull__(2);
 
@@ -133,6 +134,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_confess(
     ARGIN(const char *cond),
     ARGIN(const char *file),
@@ -160,6 +162,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_ex_rethrow_from_c(PARROT_INTERP, ARGIN(PMC *exception))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -173,12 +176,14 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_ex_throw_from_c(PARROT_INTERP, ARGIN(PMC *exception))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_ex_throw_from_c_args(PARROT_INTERP,
     SHIM(void *ret_addr),
     int exitcode,
@@ -206,11 +211,13 @@
         __attribute__nonnull__(4);
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void die_from_exception(PARROT_INTERP, ARGIN(PMC *exception))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void do_panic(
     NULLOK_INTERP,
     ARGIN_NULLOK(const char *message),

Modified: branches/avl_string_cache/include/parrot/exit.h
==============================================================================
--- branches/avl_string_cache/include/parrot/exit.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/exit.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -29,6 +29,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_exit(PARROT_INTERP, int status)
         __attribute__nonnull__(1);
 

Modified: branches/avl_string_cache/include/parrot/extend.h
==============================================================================
--- branches/avl_string_cache/include/parrot/extend.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/extend.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -88,7 +88,7 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-void Parrot_free_cstring(ARGIN_NULLOK(char *string));
+void Parrot_free_cstring(ARGFREE(char *string));
 
 PARROT_EXPORT
 Parrot_Int Parrot_get_intreg(PARROT_INTERP, Parrot_Int regnum)
@@ -131,13 +131,15 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 char * Parrot_PMC_get_cstring(PARROT_INTERP, Parrot_PMC pmc)
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char * Parrot_PMC_get_cstring_intkey(PARROT_INTERP,
     Parrot_PMC pmc,
     Parrot_Int key)
@@ -145,7 +147,8 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char * Parrot_PMC_get_cstringn(PARROT_INTERP,
     ARGIN(Parrot_PMC pmc),
     ARGOUT(Parrot_Int *length))
@@ -156,7 +159,8 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char * Parrot_PMC_get_cstringn_intkey(PARROT_INTERP,
     ARGIN(Parrot_PMC pmc),
     ARGOUT(Parrot_Int *length),

Modified: branches/avl_string_cache/include/parrot/gc_api.h
==============================================================================
--- branches/avl_string_cache/include/parrot/gc_api.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/gc_api.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /* gc_api.h
- *  Copyright (C) 2001-2009, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -136,9 +136,8 @@
         FUNC_MODIFIES(*obj);
 
 PARROT_EXPORT
-void Parrot_gc_mark_STRING_alive_fun(PARROT_INTERP,
+void Parrot_gc_mark_STRING_alive_fun(SHIM_INTERP,
     ARGMOD_NULLOK(STRING *obj))
-        __attribute__nonnull__(1)
         FUNC_MODIFIES(*obj);
 
 PARROT_EXPORT
@@ -349,8 +348,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(obj))
 #define ASSERT_ARGS_Parrot_gc_mark_STRING_alive_fun \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_gc_reallocate_memory_chunk \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -470,8 +468,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/gc/api.c */
 
-void Parrot_gc_inf_init(PARROT_INTERP);
-
 #if defined(NDEBUG) && defined(PARROT_IN_CORE)
 #  define Parrot_gc_mark_STRING_alive(interp, obj) \
           do if (! STRING_IS_NULL(obj)) PObj_live_SET(obj); while (0)

Modified: branches/avl_string_cache/include/parrot/global_setup.h
==============================================================================
--- branches/avl_string_cache/include/parrot/global_setup.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/global_setup.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -17,6 +17,13 @@
 #include "parrot/config.h"
 #include "parrot/interpreter.h"
 
+void Parrot_register_core_pmcs(PARROT_INTERP, ARGIN(PMC *registry))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void Parrot_initialize_core_pmcs(PARROT_INTERP, int pass)
+        __attribute__nonnull__(1);
+
 /* HEADERIZER BEGIN: src/global_setup.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 

Modified: branches/avl_string_cache/include/parrot/hash.h
==============================================================================
--- branches/avl_string_cache/include/parrot/hash.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/hash.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -113,10 +113,9 @@
         FUNC_MODIFIES(*hash);
 
 PARROT_EXPORT
-void parrot_hash_destroy(PARROT_INTERP, ARGMOD(Hash *hash))
+void parrot_hash_destroy(PARROT_INTERP, ARGFREE_NOTNULL(Hash *hash))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*hash);
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -131,7 +130,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 void * parrot_hash_get(PARROT_INTERP,
-    ARGIN(Hash *hash),
+    ARGIN(const Hash *hash),
     ARGIN(const void *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -185,9 +184,10 @@
         FUNC_MODIFIES(*pinfo);
 
 PARROT_EXPORT
-void parrot_mark_hash(PARROT_INTERP, ARGIN(Hash *hash))
+void parrot_mark_hash(PARROT_INTERP, ARGMOD(Hash *hash))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*hash);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -224,15 +224,13 @@
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
-void* hash_key_from_int(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
-    INTVAL key)
+void* hash_key_from_int(PARROT_INTERP, ARGIN(const Hash *hash), INTVAL key)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_key_from_pmc(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN(PMC *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -240,14 +238,14 @@
 
 PARROT_CAN_RETURN_NULL
 void* hash_key_from_string(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN(STRING *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 INTVAL hash_key_to_int(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -262,61 +260,61 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING* hash_key_to_string(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_value_from_int(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     INTVAL value)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_value_from_number(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     FLOATVAL value)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_value_from_pmc(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(PMC *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_value_from_string(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(STRING *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 INTVAL hash_value_to_int(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 FLOATVAL hash_value_to_number(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
 PMC* hash_value_to_pmc(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
 STRING* hash_value_to_string(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -374,15 +372,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
-int PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN_NULLOK(PMC *b))
+int PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-int pointer_compare(SHIM_INTERP,
-    ARGIN_NULLOK(const void *a),
-    ARGIN_NULLOK(const void *b));
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 int STRING_compare(PARROT_INTERP,
@@ -511,8 +504,8 @@
     , PARROT_ASSERT_ARG(keyhash))
 #define ASSERT_ARGS_PMC_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(a))
-#define ASSERT_ARGS_pointer_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+    , 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))

Modified: branches/avl_string_cache/include/parrot/imcc.h
==============================================================================
--- branches/avl_string_cache/include/parrot/imcc.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/imcc.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -9,7 +9,7 @@
 PARROT_EXPORT void imcc_initialize(PARROT_INTERP);
 PARROT_EXPORT void imcc_start_handling_flags(PARROT_INTERP);
 PARROT_EXPORT int imcc_handle_flag(PARROT_INTERP, struct longopt_opt_info *opt, Parrot_Run_core_t *core);
-PARROT_EXPORT int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, char **argv);
+PARROT_EXPORT int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, const char **argv);
 
 #endif /* PARROT_IMCC_H_GUARD */
 

Modified: branches/avl_string_cache/include/parrot/interpreter.h
==============================================================================
--- branches/avl_string_cache/include/parrot/interpreter.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/interpreter.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -315,6 +315,8 @@
     IGLOBALS_COMPREG_HASH,
     IGLOBALS_ARGV_LIST,
     IGLOBALS_NCI_FUNCS,
+    IGLOBALS_NCI_FB_CB,
+    IGLOBALS_NCI_FB_UD,
     IGLOBALS_INTERPRETER,       /* this interpreter as ParrotInterpreter PMC */
     IGLOBALS_DYN_LIBS,          /* Hash of ParrotLibrary loaded dynamic ext */
     IGLOBALS_CONFIG_HASH,
@@ -330,30 +332,28 @@
 #define PNCONST   PF_NCONST(interp->code)
 
 /* TODO - Make this a config option */
-/* Splint complains about PMCNULL's storage, so don't use it. */
-#ifdef S_SPLINT_S
-#  define PARROT_CATCH_NULL 0
-#else
-#  define PARROT_CATCH_NULL 1
+#ifndef PARROT_CATCH_NULL
+#  ifdef S_SPLINT_S
+#    define PARROT_CATCH_NULL 0
+#  else
+#    define PARROT_CATCH_NULL 1
+#  endif
 #endif
 
+/* Maybe PMC_IS_NULL(interp, pmc) ? */
 #if PARROT_CATCH_NULL
 PARROT_DATA PMC    *PMCNULL;    /* Holds single Null PMC */
+PARROT_DATA STRING *STRINGNULL; /* a single Null STRING */
+#  define PMC_IS_NULL(pmc)  ((pmc) == PMCNULL || (pmc) == NULL)
+#  define STRING_IS_NULL(s) ((s) == STRINGNULL || (s) == NULL)
 #else
-#  define PMCNULL         ((PMC *)NULL)
+#  define PMCNULL ((PMC *)NULL)
+#  define STRINGNULL ((STRING *)NULL)
+#  define PMC_IS_NULL(pmc)       ((pmc) == NULL)
+#  define STRING_IS_NULL(string) ((string) == NULL)
 #endif /* PARROT_CATCH_NULL */
 
-/* Maybe PMC_IS_NULL(interp, pmc) ? */
-#if PARROT_CATCH_NULL
-#  define PMC_IS_NULL(pmc) ((pmc) == PMCNULL || (pmc) == NULL)
-#else
-#  define PMC_IS_NULL(pmc) (pmc) == NULL
-#endif
-
-PARROT_DATA STRING *STRINGNULL; /* a single Null STRING */
-
-#define STRING_IS_NULL(s) ((s) == STRINGNULL || (s) == NULL)
-#define STRING_IS_EMPTY(s) !(int)(s)->strlen
+#define STRING_IS_EMPTY(s) ((s)->strlen == 0)
 
 /* &gen_from_def(sysinfo.pasm) prefix(SYSINFO_) */
 
@@ -581,21 +581,10 @@
 /* HEADERIZER END: src/interp/inter_misc.c */
 
 
-/* interpreter.c */
-void runops_int(Interp *, size_t offset);
-void exec_init_prederef(PARROT_INTERP,
-    void *prederef_arena);
-void prepare_for_run(PARROT_INTERP);
-PARROT_EXPORT void dynop_register(PARROT_INTERP, PMC *op_lib);
-
-/* interpreter.pmc */
+/* parrotinterpreter.pmc */
+/* XXX Would be nice if this could live in some headerized grouping */
 void clone_interpreter(Parrot_Interp dest, Parrot_Interp self, INTVAL flags);
 
-void Parrot_setup_event_func_ptrs(PARROT_INTERP);
-
-PARROT_EXPORT void disable_event_checking(PARROT_INTERP);
-PARROT_EXPORT void enable_event_checking(PARROT_INTERP);
-
 #else /* !PARROT_IN_CORE */
 
 typedef void * *(*native_func_t)(PARROT_INTERP,

Modified: branches/avl_string_cache/include/parrot/io.h
==============================================================================
--- branches/avl_string_cache/include/parrot/io.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/io.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /* io.h
- *  Copyright (C) 2001-2003, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -453,14 +453,17 @@
         FUNC_MODIFIES(*filehandle)
         FUNC_MODIFIES(*buf);
 
+PARROT_WARN_UNUSED_RESULT
 size_t Parrot_io_read_buffer(PARROT_INTERP,
     ARGMOD(PMC *filehandle),
-    ARGIN(STRING **buf))
+    ARGMOD(STRING **buf))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        FUNC_MODIFIES(*filehandle);
+        FUNC_MODIFIES(*filehandle)
+        FUNC_MODIFIES(*buf);
 
+PARROT_WARN_UNUSED_RESULT
 size_t Parrot_io_readline_buffer(PARROT_INTERP,
     ARGMOD(PMC *filehandle),
     ARGOUT(STRING **buf))
@@ -584,24 +587,29 @@
         FUNC_MODIFIES(*pmc);
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 unsigned char * Parrot_io_get_buffer_end(SHIM_INTERP,
-    ARGIN_NULLOK(PMC *filehandle));
+    ARGIN(const PMC *filehandle))
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 unsigned char * Parrot_io_get_buffer_next(SHIM_INTERP,
-    ARGIN(PMC *filehandle))
+    ARGIN(const PMC *filehandle))
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 unsigned char * Parrot_io_get_buffer_start(SHIM_INTERP,
     ARGIN(PMC *filehandle))
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-PIOOFF_T Parrot_io_get_file_position(SHIM_INTERP, ARGIN(PMC *filehandle))
+PARROT_WARN_UNUSED_RESULT
+PIOOFF_T Parrot_io_get_file_position(SHIM_INTERP,
+    ARGIN(const PMC *filehandle))
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
@@ -613,24 +621,26 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PIOOFF_T Parrot_io_get_last_file_position(SHIM_INTERP,
-    ARGIN(PMC *filehandle))
+    ARGIN(const PMC *filehandle))
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-PIOHANDLE Parrot_io_get_os_handle(SHIM_INTERP, ARGIN(PMC *filehandle))
+PARROT_WARN_UNUSED_RESULT
+PIOHANDLE Parrot_io_get_os_handle(SHIM_INTERP, ARGIN(const PMC *filehandle))
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-INTVAL Parrot_io_is_closed_filehandle(PARROT_INTERP, ARGMOD(PMC *pmc))
+PARROT_WARN_UNUSED_RESULT
+INTVAL Parrot_io_is_closed_filehandle(PARROT_INTERP, ARGIN(const PMC *pmc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*pmc);
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_io_is_encoding(PARROT_INTERP,
-    ARGIN(PMC *filehandle),
+    ARGIN(const PMC *filehandle),
     ARGIN(STRING *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -639,14 +649,15 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_io_parse_open_flags(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *mode_str))
+    ARGIN_NULLOK(const STRING *mode_str))
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
 void Parrot_io_set_file_position(SHIM_INTERP,
-    ARGIN(PMC *filehandle),
+    ARGMOD(PMC *filehandle),
     PIOOFF_T file_pos)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*filehandle);
 
 PARROT_EXPORT
 void Parrot_io_set_file_size(SHIM_INTERP,
@@ -660,21 +671,24 @@
 
 PARROT_EXPORT
 void Parrot_io_set_os_handle(SHIM_INTERP,
-    ARGIN(PMC *filehandle),
+    ARGMOD(PMC *filehandle),
     PIOHANDLE file_descriptor)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*filehandle);
 
 PARROT_CAN_RETURN_NULL
-void Parrot_io_clear_buffer(PARROT_INTERP, ARGIN(PMC *filehandle))
+void Parrot_io_clear_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*filehandle);
 
 PARROT_CAN_RETURN_NULL
-INTVAL Parrot_io_get_buffer_flags(SHIM_INTERP, ARGIN(PMC *filehandle))
+INTVAL Parrot_io_get_buffer_flags(SHIM_INTERP, ARGIN(const PMC *filehandle))
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
-size_t Parrot_io_get_buffer_size(SHIM_INTERP, ARGIN(PMC *filehandle))
+PARROT_WARN_UNUSED_RESULT
+size_t Parrot_io_get_buffer_size(SHIM_INTERP, ARGIN(const PMC *filehandle))
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
@@ -687,29 +701,34 @@
         FUNC_MODIFIES(*buf);
 
 void Parrot_io_set_buffer_end(SHIM_INTERP,
-    ARGIN(PMC *filehandle),
+    ARGMOD(PMC *filehandle),
     ARGIN_NULLOK(unsigned char *new_end))
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*filehandle);
 
 void Parrot_io_set_buffer_flags(SHIM_INTERP,
-    ARGIN(PMC *filehandle),
+    ARGMOD(PMC *filehandle),
     INTVAL new_flags)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*filehandle);
 
 void Parrot_io_set_buffer_next(SHIM_INTERP,
-    ARGIN(PMC *filehandle),
+    ARGMOD(PMC *filehandle),
     ARGIN_NULLOK(unsigned char *new_next))
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*filehandle);
 
 void Parrot_io_set_buffer_size(SHIM_INTERP,
-    ARGIN(PMC *filehandle),
+    ARGMOD(PMC *filehandle),
     size_t new_size)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*filehandle);
 
 void Parrot_io_set_buffer_start(SHIM_INTERP,
-    ARGIN(PMC *filehandle),
+    ARGMOD(PMC *filehandle),
     ARGIN_NULLOK(unsigned char *new_start))
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*filehandle);
 
 #define ASSERT_ARGS_Parrot_io_close_filehandle __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -717,7 +736,8 @@
 #define ASSERT_ARGS_Parrot_io_flush_filehandle __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
-#define ASSERT_ARGS_Parrot_io_get_buffer_end __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_Parrot_io_get_buffer_end __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(filehandle))
 #define ASSERT_ARGS_Parrot_io_get_buffer_next __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(filehandle))
 #define ASSERT_ARGS_Parrot_io_get_buffer_start __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -895,25 +915,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/io/socket_api.c */
 
-/* Put platform specific macros here if you must */
-#ifdef PIO_OS_WIN32
-extern STRING          *PIO_sockaddr_in(PARROT_INTERP, unsigned short, STRING *);
-extern INTVAL           PIO_win32_getblksize(PIOHANDLE fd);
-#  define PIO_getblksize(x)   PIO_win32_getblksize(x)
-#endif
-
-#ifdef PIO_OS_UNIX
-extern STRING          *PIO_sockaddr_in(PARROT_INTERP, unsigned short, STRING *);
-extern INTVAL           PIO_unix_getblksize(PIOHANDLE fd);
-#  define PIO_getblksize(x)   PIO_unix_getblksize(x)
-#endif
-
-#ifdef PIO_OS_STDIO
-extern INTVAL           PIO_stdio_getblksize(PIOHANDLE fd);
-#  define PIO_sockaddr_in(i, p, a)
-#  define PIO_getblksize(x)   PIO_stdio_getblksize(x)
-#endif
-
 /*
  * pioctl argument constants. These don't have to
  * be unique across io commands.

Modified: branches/avl_string_cache/include/parrot/io_unix.h
==============================================================================
--- branches/avl_string_cache/include/parrot/io_unix.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/io_unix.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -39,11 +39,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_io_fdopen_unix(PARROT_INTERP,
-    ARGMOD(PMC *filehandle),
+    ARGMOD_NULLOK(PMC *filehandle),
     PIOHANDLE fd,
     INTVAL flags)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         FUNC_MODIFIES(*filehandle);
 
 INTVAL Parrot_io_flush_unix(PARROT_INTERP, ARGMOD(PMC *filehandle))
@@ -55,7 +54,7 @@
 INTVAL Parrot_io_init_unix(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(PMC *filehandle))
+INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(const PMC *filehandle))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -133,8 +132,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(filehandle))
 #define ASSERT_ARGS_Parrot_io_fdopen_unix __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(filehandle))
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_io_flush_unix __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(filehandle))

Modified: branches/avl_string_cache/include/parrot/key.h
==============================================================================
--- branches/avl_string_cache/include/parrot/key.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/key.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -161,6 +161,7 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL key_type(SHIM_INTERP, ARGIN(const PMC *key))
         __attribute__nonnull__(2);

Modified: branches/avl_string_cache/include/parrot/misc.h
==============================================================================
--- branches/avl_string_cache/include/parrot/misc.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/misc.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -321,12 +321,6 @@
 
 #endif /* IN_SPF_SYSTEM */
 
-
-/*
- * generated src/revision.c
- */
-PARROT_EXPORT int Parrot_config_revision(void);
-
 #endif /* PARROT_MISC_H_GUARD */
 
 /*

Modified: branches/avl_string_cache/include/parrot/nci.h
==============================================================================
--- branches/avl_string_cache/include/parrot/nci.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/nci.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -15,14 +15,26 @@
 
 #include "parrot/parrot.h"
 
+typedef PMC *(*nci_fb_func_t)(PMC *user_data, STRING *signature);
 typedef void (*nci_thunk_t)(PARROT_INTERP, PMC *, PMC *);
 
-PMC *build_call_func(PARROT_INTERP, NOTNULL(STRING *signature));
-
 void Parrot_nci_load_core_thunks(PARROT_INTERP);
-
 void Parrot_nci_load_extra_thunks(PARROT_INTERP);
 
+/* HEADERIZER BEGIN: src/nci/api.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_CANNOT_RETURN_NULL
+PMC * build_call_func(PARROT_INTERP, ARGIN(STRING *signature))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_build_call_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(signature))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: src/nci/api.c */
+
 #endif /* PARROT_NCI_H_GUARD */
 
 /*

Modified: branches/avl_string_cache/include/parrot/oo.h
==============================================================================
--- branches/avl_string_cache/include/parrot/oo.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/oo.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -148,11 +148,9 @@
 PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_oo_clone_object(PARROT_INTERP,
     ARGIN(PMC *pmc),
-    ARGMOD_NULLOK(PMC *class_),
     ARGMOD_NULLOK(PMC *dest))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        FUNC_MODIFIES(*class_)
         FUNC_MODIFIES(*dest);
 
 void Parrot_oo_extract_methods_from_namespace(PARROT_INTERP,

Modified: branches/avl_string_cache/include/parrot/packfile.h
==============================================================================
--- branches/avl_string_cache/include/parrot/packfile.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/packfile.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -453,11 +453,12 @@
 PARROT_EXPORT
 void PackFile_add_segment(PARROT_INTERP,
     ARGMOD(PackFile_Directory *dir),
-    ARGIN(PackFile_Segment *seg))
+    ARGMOD(PackFile_Segment *seg))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        FUNC_MODIFIES(*dir);
+        FUNC_MODIFIES(*dir)
+        FUNC_MODIFIES(*seg);
 
 PARROT_EXPORT
 void PackFile_Annotations_add_entry(PARROT_INTERP,
@@ -562,8 +563,9 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-void PackFile_destroy(PARROT_INTERP, ARGMOD_NULLOK(PackFile *pf))
+void PackFile_destroy(PARROT_INTERP, ARGMOD(PackFile *pf))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         FUNC_MODIFIES(*pf);
 
 PARROT_EXPORT
@@ -580,7 +582,7 @@
 PARROT_CAN_RETURN_NULL
 PackFile_Segment * PackFile_find_segment(PARROT_INTERP,
     ARGIN_NULLOK(PackFile_Directory *dir),
-    ARGIN(STRING *name),
+    ARGIN(const STRING *name),
     int sub_dir)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
@@ -808,10 +810,9 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-opcode_t * PackFile_Annotations_pack(PARROT_INTERP,
+opcode_t * PackFile_Annotations_pack(SHIM_INTERP,
     ARGIN(PackFile_Segment *seg),
     ARGMOD(opcode_t *cursor))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*cursor);
@@ -880,7 +881,8 @@
     , PARROT_ASSERT_ARG(seg) \
     , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_PackFile_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pf))
 #define ASSERT_ARGS_PackFile_find_fixup_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
@@ -976,8 +978,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self))
 #define ASSERT_ARGS_PackFile_Annotations_pack __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(seg) \
+       PARROT_ASSERT_ARG(seg) \
     , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_PackFile_Annotations_packed_size \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/avl_string_cache/include/parrot/pmc.h
==============================================================================
--- branches/avl_string_cache/include/parrot/pmc.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/pmc.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -54,6 +54,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_HOT
 INTVAL Parrot_pmc_is_null(SHIM_INTERP, ARGIN_NULLOK(const PMC *pmc));
 
 PARROT_EXPORT
@@ -76,6 +77,13 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PMC * Parrot_pmc_new_constant_init_int(PARROT_INTERP,
+    INTVAL base_type,
+    INTVAL init)
+        __attribute__nonnull__(1);
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_pmc_new_constant_noinit(PARROT_INTERP, INTVAL base_type)
         __attribute__nonnull__(1);
 
@@ -109,7 +117,7 @@
 PMC * Parrot_pmc_reuse(PARROT_INTERP,
     ARGIN(PMC *pmc),
     INTVAL new_type,
-    UINTVAL flags)
+    NULLOK(UINTVAL flags))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -132,7 +140,7 @@
     ARGIN(PMC *pmc),
     INTVAL new_type,
     ARGIN(PMC *init),
-    UINTVAL flags)
+    NULLOK(UINTVAL flags))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(4);
@@ -176,6 +184,9 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pmc_new_constant_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_Parrot_pmc_new_constant_init_int \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pmc_new_constant_noinit \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))

Modified: branches/avl_string_cache/include/parrot/runcore_api.h
==============================================================================
--- branches/avl_string_cache/include/parrot/runcore_api.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/runcore_api.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -83,6 +83,11 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+void dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
 void enable_event_checking(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -97,10 +102,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 void Parrot_runcore_destroy(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -118,6 +119,9 @@
 
 #define ASSERT_ARGS_disable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_dynop_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(lib_pmc))
 #define ASSERT_ARGS_enable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_runcore_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -126,9 +130,6 @@
 #define ASSERT_ARGS_Parrot_runcore_switch __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_dynop_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(lib_pmc))
 #define ASSERT_ARGS_Parrot_runcore_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_runcore_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -147,9 +148,8 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-oplib_init_f get_core_op_lib_init(PARROT_INTERP,
+oplib_init_f get_core_op_lib_init(SHIM_INTERP,
     ARGIN(Parrot_runcore_t *runcore))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
@@ -186,8 +186,7 @@
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_get_core_op_lib_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore))
+       PARROT_ASSERT_ARG(runcore))
 #define ASSERT_ARGS_init_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(runcore))

Modified: branches/avl_string_cache/include/parrot/string_funcs.h
==============================================================================
--- branches/avl_string_cache/include/parrot/string_funcs.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/string_funcs.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,6 +1,5 @@
-#define ASSERT_ARGS_STRING_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* string_funcs.h
- *  Copyright (C) 2001-2008, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -28,48 +27,31 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-STRING * Parrot_str_append(PARROT_INTERP,
-    ARGMOD_NULLOK(STRING *a),
-    ARGIN_NULLOK(STRING *b))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*a);
-
-PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_and(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
-    ARGIN_NULLOK(const STRING *s2),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s2))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_not(PARROT_INTERP,
-    ARGIN_NULLOK(const STRING *s),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_or(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
-    ARGIN_NULLOK(const STRING *s2),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s2))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_xor(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
-    ARGIN_NULLOK(const STRING *s2),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s2))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -85,21 +67,17 @@
 PARROT_CAN_RETURN_NULL
 STRING* Parrot_str_change_charset(PARROT_INTERP,
     ARGMOD_NULLOK(STRING *src),
-    INTVAL charset_nr,
-    ARGOUT_NULLOK(STRING *dest))
+    INTVAL charset_nr)
         __attribute__nonnull__(1)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*dest);
+        FUNC_MODIFIES(*src);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 STRING* Parrot_str_change_encoding(PARROT_INTERP,
     ARGIN_NULLOK(STRING *src),
-    INTVAL encoding_nr,
-    ARGOUT_NULLOK(STRING *dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    INTVAL encoding_nr)
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -109,12 +87,6 @@
         FUNC_MODIFIES(*s);
 
 PARROT_EXPORT
-void Parrot_str_chopn_inplace(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_str_compare(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
@@ -131,8 +103,7 @@
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_concat(PARROT_INTERP,
     ARGIN_NULLOK(STRING *a),
-    ARGIN_NULLOK(STRING *b),
-    UINTVAL Uflags)
+    ARGIN_NULLOK(STRING *b))
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
@@ -150,11 +121,6 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_downcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_str_equal(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
@@ -214,7 +180,7 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-void Parrot_str_free_cstring(ARGIN_NULLOK(char *p));
+void Parrot_str_free_cstring(ARGFREE(char *p));
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -250,6 +216,8 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
 
 PARROT_EXPORT
@@ -262,12 +230,9 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-PARROT_IGNORABLE_RESULT
-INTVAL /*@alt void@*/
-Parrot_str_length(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
+PARROT_WARN_UNUSED_RESULT
+INTVAL Parrot_str_length(SHIM_INTERP, ARGIN(const STRING *s))
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -299,14 +264,6 @@
         __attribute__nonnull__(5);
 
 PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING * Parrot_str_new_COW(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
@@ -345,8 +302,7 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_pin(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
+void Parrot_str_pin(SHIM_INTERP, ARGMOD(STRING *s))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*s);
 
@@ -360,46 +316,19 @@
 
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 STRING * Parrot_str_replace(PARROT_INTERP,
-    ARGIN(STRING *src),
+    ARGIN(const STRING *src),
     INTVAL offset,
     INTVAL length,
-    ARGIN(STRING *rep),
-    ARGOUT_NULLOK(STRING **d))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*d);
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING * Parrot_str_resize(PARROT_INTERP, ARGMOD(STRING *s), UINTVAL addlen)
+    ARGIN(const STRING *rep))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING * Parrot_str_reuse_COW(SHIM_INTERP,
-    ARGMOD(STRING *s),
-    ARGOUT(STRING *d))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*s)
-        FUNC_MODIFIES(*d);
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING * Parrot_str_set(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *dest),
-    ARGMOD(STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*src);
+        __attribute__nonnull__(5);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
+PARROT_CAN_RETURN_NULL
 PMC* Parrot_str_split(PARROT_INTERP,
     ARGIN_NULLOK(STRING *delim),
     ARGIN_NULLOK(STRING *str))
@@ -411,11 +340,8 @@
 STRING * Parrot_str_substr(PARROT_INTERP,
     ARGIN_NULLOK(STRING *src),
     INTVAL offset,
-    INTVAL length,
-    ARGOUT_NULLOK(STRING **d),
-    int replace_dest)
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*d);
+    INTVAL length)
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -424,11 +350,6 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_titlecase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 char * Parrot_str_to_cstring(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
@@ -473,29 +394,12 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_upcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
-void Parrot_str_write_COW(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 const char * Parrot_string_cstring(SHIM_INTERP, ARGIN(const STRING *str))
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-UINTVAL string_capacity(SHIM_INTERP, ARGIN(const STRING *s))
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING * string_chr(PARROT_INTERP, UINTVAL character)
@@ -509,6 +413,8 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL STRING_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
 
 PARROT_EXPORT
@@ -533,6 +439,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
 INTVAL string_max_bytes(SHIM_INTERP, ARGIN(const STRING *s), UINTVAL nchars)
         __attribute__nonnull__(2);
 
@@ -556,6 +463,12 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
+STRING* Parrot_str_clone(PARROT_INTERP, ARGIN(const STRING *s))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_from_int_base(PARROT_INTERP,
     ARGOUT(char *tc),
     HUGEINTVAL num,
@@ -581,8 +494,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-#define ASSERT_ARGS_Parrot_str_append __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_bitwise_and __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_bitwise_not __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -601,9 +512,6 @@
 #define ASSERT_ARGS_Parrot_str_chopn __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_Parrot_str_chopn_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_compose __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -615,8 +523,6 @@
     , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_downcase_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_escape __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -654,8 +560,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ar))
 #define ASSERT_ARGS_Parrot_str_length __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
+       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_new __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_new_constant __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -665,9 +570,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(encoding) \
     , PARROT_ASSERT_ARG(charset))
-#define ASSERT_ARGS_Parrot_str_new_COW __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_new_from_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(buffer))
@@ -680,8 +582,7 @@
 #define ASSERT_ARGS_Parrot_str_not_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_pin __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
+       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_repeat __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
@@ -689,23 +590,12 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src) \
     , PARROT_ASSERT_ARG(rep))
-#define ASSERT_ARGS_Parrot_str_resize __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_Parrot_str_reuse_COW __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(s) \
-    , PARROT_ASSERT_ARG(d))
-#define ASSERT_ARGS_Parrot_str_set __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_Parrot_str_split __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_substr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_titlecase_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_to_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_to_hashval __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -723,15 +613,8 @@
     , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_upcase_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_write_COW __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_string_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(str))
-#define ASSERT_ARGS_string_capacity __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_string_chr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_string_increment __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -750,6 +633,9 @@
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_string_to_cstring_nullable __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_Parrot_str_clone __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_from_int_base __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(tc))

Modified: branches/avl_string_cache/include/parrot/string_primitives.h
==============================================================================
--- branches/avl_string_cache/include/parrot/string_primitives.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/string_primitives.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -36,12 +36,11 @@
 PARROT_EXPORT
 Parrot_UInt4 string_unescape_one(PARROT_INTERP,
     ARGMOD(UINTVAL *offset),
-    ARGMOD(STRING *string))
+    ARGIN(const STRING *string))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        FUNC_MODIFIES(*offset)
-        FUNC_MODIFIES(*string);
+        FUNC_MODIFIES(*offset);
 
 #define ASSERT_ARGS_Parrot_char_digit_value __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_str_dup_remove_quotes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/avl_string_cache/include/parrot/sub.h
==============================================================================
--- branches/avl_string_cache/include/parrot/sub.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/sub.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -64,6 +64,7 @@
 typedef enum {
     SUB_COMP_FLAG_BIT_0     = SUB_FLAG(0),
     SUB_COMP_FLAG_BIT_1     = SUB_FLAG(1),
+    SUB_COMP_FLAG_VTABLE    = SUB_COMP_FLAG_BIT_1,
     SUB_COMP_FLAG_BIT_2     = SUB_FLAG(2),
     SUB_COMP_FLAG_METHOD    = SUB_COMP_FLAG_BIT_2,
     SUB_COMP_FLAG_BIT_3     = SUB_FLAG(3),
@@ -76,6 +77,7 @@
     SUB_COMP_FLAG_BIT_10    = SUB_FLAG(10),
     SUB_COMP_FLAG_PF_INIT   = SUB_COMP_FLAG_BIT_10,
     SUB_COMP_FLAG_BIT_11    = SUB_FLAG(11),
+    SUB_COMP_FLAG_NSENTRY   = SUB_COMP_FLAG_BIT_11,
     SUB_COMP_FLAG_BIT_12    = SUB_FLAG(12),
     SUB_COMP_FLAG_BIT_13    = SUB_FLAG(13),
     SUB_COMP_FLAG_BIT_14    = SUB_FLAG(14),
@@ -95,7 +97,7 @@
     SUB_COMP_FLAG_BIT_28    = SUB_FLAG(28),
     SUB_COMP_FLAG_BIT_29    = SUB_FLAG(29),
     SUB_COMP_FLAG_BIT_30    = SUB_FLAG(30),
-    SUB_COMP_FLAG_MASK      = 0x00000404
+    SUB_COMP_FLAG_MASK      = SUB_COMP_FLAG_VTABLE | SUB_COMP_FLAG_METHOD | SUB_COMP_FLAG_NSENTRY | SUB_COMP_FLAG_PF_INIT
 } sub_comp_flags_enum;
 #undef SUB_FLAG
 
@@ -170,13 +172,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-PMC * new_ret_continuation_pmc(PARROT_INTERP,
-    ARGIN_NULLOK(opcode_t *address))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
 void Parrot_capture_lex(PARROT_INTERP, ARGMOD(PMC *sub_pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -217,11 +212,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void invalidate_retc_context(PARROT_INTERP, ARGMOD(PMC *cont))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*cont);
-
 void mark_context_start(void);
 void Parrot_continuation_check(PARROT_INTERP, ARGIN(const PMC *pmc))
         __attribute__nonnull__(1)
@@ -260,8 +250,6 @@
     ARGIN_NULLOK(opcode_t *pc))
         __attribute__nonnull__(1);
 
-#define ASSERT_ARGS_new_ret_continuation_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_capture_lex __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub_pmc))
@@ -281,9 +269,6 @@
 #define ASSERT_ARGS_parrot_new_closure __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub_pmc))
-#define ASSERT_ARGS_invalidate_retc_context __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(cont))
 #define ASSERT_ARGS_mark_context_start __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_continuation_check __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \

Modified: branches/avl_string_cache/include/parrot/vtables.h
==============================================================================
--- branches/avl_string_cache/include/parrot/vtables.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/include/parrot/vtables.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -26,10 +26,9 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-void Parrot_destroy_vtable(PARROT_INTERP, ARGMOD(VTABLE *vtable))
+void Parrot_destroy_vtable(PARROT_INTERP, ARGFREE_NOTNULL(VTABLE *vtable))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*vtable);
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 void Parrot_initialize_core_vtables(PARROT_INTERP)

Modified: branches/avl_string_cache/lib/Parrot/Configure/Options/Conf.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Configure/Options/Conf.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Configure/Options/Conf.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -99,8 +99,6 @@
 
 External Library Options:
 
-   --without-crypto     Build parrot without crypto support (libssl)
-   --without-gdbm       Build parrot without GDBM support
    --without-gettext    Build parrot without gettext support
    --without-gmp        Build parrot without GMP support
    --without-opengl     Build parrot without OpenGL support (GL/GLU/GLUT)

Modified: branches/avl_string_cache/lib/Parrot/Configure/Options/Test/Prepare.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Configure/Options/Test/Prepare.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Configure/Options/Test/Prepare.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -78,6 +78,8 @@
                 ? qq|$secondlevel-$number|
                 : $number;
             $steps_tests_complex{$category}{$class}{$final}++;
+
+            return;
         }
     } # END wanted()
     finddepth( \&wanted, ( $steps_dir ) );

Modified: branches/avl_string_cache/lib/Parrot/Configure/Step/List.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Configure/Step/List.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Configure/Step/List.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -52,10 +52,8 @@
     auto::thread
     auto::gmp
     auto::readline
-    auto::gdbm
     auto::pcre
     auto::opengl
-    auto::crypto
     auto::gettext
     auto::snprintf
     auto::perldoc
@@ -65,7 +63,6 @@
     auto::icu
     gen::config_h
     gen::core_pmcs
-    gen::crypto
     gen::opengl
     gen::makefiles
     gen::platform

Modified: branches/avl_string_cache/lib/Parrot/Distribution.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Distribution.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Distribution.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2009, Parrot Foundation.
+# Copyright (C) 2004-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -248,13 +248,13 @@
                 # and make a hash out of the directories
                 my %dirs =
                     map { ( ( File::Spec->splitpath($_) )[1] => 1 ) }
-                    grep { m|(?i)(?:$filter_ext)| } $self->_dist_files;
+                    grep { m/(?i)(?:$filter_ext)/ } $self->_dist_files;
 
                 # Filter out ignored directories
                 # and return the results
                 my @dirs = sort
                     map  { $self->directory_with_name($_) }
-                    grep { !m|(?:$filter_dir)| }
+                    grep { !m/(?:$filter_dir)/ }
                     keys %dirs;
                 return @dirs;
             };
@@ -293,7 +293,7 @@
                 # and return a sorted list of filenames
                 my @files = sort
                     map  { $self->file_with_name($_) }
-                    grep { m|(?i)(?:$filter_ext)| }
+                    grep { m/(?i)(?:$filter_ext)/ }
                     $self->_dist_files;
                 return @files;
             };
@@ -334,7 +334,7 @@
     # and return a sorted list of filenames
     my @files = sort
         map  { $self->file_with_name($_) }
-        grep { m|[/\\]makefiles[/\\][a-z]+\.in$| }
+        grep { m{[/\\]makefiles[/\\][a-z]+\.in$} }
         $self->_dist_files;
     return @files;
 }
@@ -614,7 +614,7 @@
     my $line = <$file_handle>;
     close $file_handle;
 
-    if ( $line && $line =~ /^#!.*parrot/ ) {
+    if ( $line && $line =~ /^#!.*parrot(?:\s|$)/ ) {
         # something that specifies a pir or pbc is probably a HLL, skip it
         return 0 if $line =~ /\.(?:pir|pbc)/;
         return 1;

Modified: branches/avl_string_cache/lib/Parrot/Harness/Smoke.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Harness/Smoke.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Harness/Smoke.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -116,6 +116,7 @@
           . '/app/projects/process_add_report/'
           . $project_id;
     my $ua = LWP::UserAgent->new();
+    $ua->timeout(360);
     $ua->agent( 'Parrot::Harness::Smoke' );
     $ua->env_proxy();
 

Modified: branches/avl_string_cache/lib/Parrot/Headerizer.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Headerizer.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Headerizer.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,6 +1,8 @@
-# Copyright (C) 2004-2007, Parrot Foundation.
+# Copyright (C) 2004-2010, Parrot Foundation.
 # $Id$
 
+package Parrot::Headerizer;
+
 =head1 NAME
 
 Parrot::Headerizer - Parrot Header Generation functionality
@@ -13,8 +15,8 @@
 
 =head1 DESCRIPTION
 
-C<Parrot::Headerizer> knows how to strip all kinds of information out of
-C-language files.
+C<Parrot::Headerizer> knows how to extract all kinds of information out
+of C-language files.
 
 =head2 Class Methods
 
@@ -22,8 +24,6 @@
 
 =cut
 
-package Parrot::Headerizer;
-
 use strict;
 use warnings;
 
@@ -33,39 +33,68 @@
 
 Contructor of headerizer objects
 
-Don't blame me too much, I've never done OO in Perl before.
-
 =cut
 
-## i'm a singleton
-my $headerizer;
-
 sub new {
     my ($class) = @_;
 
-    return $headerizer if defined $headerizer;
+    my $self = bless {
+        warnings => {},
+    }, $class;
+
+    $self->{valid_macros} = { map { ( $_, 1 ) } qw(
+        PARROT_EXPORT
+        PARROT_INLINE
+
+        PARROT_CAN_RETURN_NULL
+        PARROT_CANNOT_RETURN_NULL
 
-    my $self = bless {}, $class;
+        PARROT_IGNORABLE_RESULT
+        PARROT_WARN_UNUSED_RESULT
+
+        PARROT_PURE_FUNCTION
+        PARROT_CONST_FUNCTION
+
+        PARROT_DOES_NOT_RETURN
+        PARROT_DOES_NOT_RETURN_WHEN_FALSE
+
+        PARROT_MALLOC
+        PARROT_OBSERVER
+
+        PARROT_HOT
+        PARROT_COLD
+        )
+    };
 
     return $self;
 }
 
-my %warnings;
-my %valid_macros = map { ( $_, 1 ) } qw(
-    PARROT_EXPORT
-    PARROT_INLINE
-    PARROT_CAN_RETURN_NULL
-    PARROT_CANNOT_RETURN_NULL
-    PARROT_IGNORABLE_RESULT
-    PARROT_WARN_UNUSED_RESULT
-    PARROT_PURE_FUNCTION
-    PARROT_CONST_FUNCTION
-    PARROT_DOES_NOT_RETURN
-    PARROT_MALLOC
-    PARROT_OBSERVER
-);
+=item $headerizer->valid_macro( $macro )
+
+Returns a boolean saying wither I<$macro> is a valid PARROT_XXX macro.
 
-=item C<extract_function_declarations($text)>
+=cut
+
+sub valid_macro {
+    my $self = shift;
+    my $macro = shift;
+
+    return exists $self->{valid_macros}{$macro};
+}
+
+=item $headerizer->valid_macros()
+
+Returns a list of all the valid PARROT_XXX macros.
+
+=cut
+
+sub valid_macros {
+    my $self = shift;
+
+    return sort keys %{$self->{valid_macros}};
+}
+
+=item $headerizer->extract_function_declarations($text)
 
 Extracts the function declarations from the text argument, and returns an
 array of strings containing the function declarations.
@@ -76,12 +105,16 @@
     my $self = shift;
     my $text = shift;
 
+    # Only check the YACC C code if we find what looks like YACC file
+    $text =~ s/%\{(.*)%\}.*/$1/sm;
+
+    # Drop all text after HEADERIZER STOP
     $text =~ s{/\*\s*HEADERIZER STOP.+}{}s;
 
     # Strip blocks of comments
     $text =~ s{^/\*.*?\*/}{}mxsg;
 
-    # Strip # compiler directives (Thanks, Audrey!)
+    # Strip # compiler directives
     $text =~ s{^#(\\\n|.)*}{}mg;
 
     # Strip code blocks
@@ -108,6 +141,9 @@
     # Ignore anything with magic words HEADERIZER SKIP
     @funcs = grep { !m{/\*\s*HEADERIZER SKIP\s*\*/} } @funcs;
 
+    # pmclass declarations in PMC files are no good
+    @funcs = grep { !m{^pmclass } } @funcs;
+
     # Variables are of no use to us
     @funcs = grep { !/=/ } @funcs;
 
@@ -135,14 +171,15 @@
 
 Returns an anonymous hash of function components:
 
-        file        => $file,
-        name        => $name,
-        args        => \@args,
-        macros      => \@macros,
-        is_static   => $is_static,
-        is_inline   => $parrot_inline,
-        is_api      => $parrot_api,
-        return_type => $return_type,
+        file         => $file,
+        name         => $name,
+        args         => \@args,
+        macros       => \@macros,
+        is_static    => $is_static,
+        is_inline    => $parrot_inline,
+        is_api       => $parrot_api,
+        is_ignorable => $is_ignorable,
+        return_type  => $return_type,
 
 =cut
 
@@ -174,7 +211,7 @@
 
     $args =~ s/\s+/ /g;
     $args =~ s{([^(]+)\s*\((.+)\);?}{$2}
-        or die qq{Couldn't handle "$proto"};
+        or die qq{Couldn't handle "$proto" in $file\n};
 
     my $name = $1;
     $args = $2;
@@ -190,6 +227,7 @@
             or die "Bad args in $proto";
     }
 
+    my $is_ignorable = 0;
     my $is_static = 0;
     $is_static = $2 if $return_type =~ s/^((static)\s+)?//i;
 
@@ -198,9 +236,12 @@
     my %macros;
     for my $macro (@macros) {
         $macros{$macro} = 1;
-        if ( not $valid_macros{$macro} ) {
+        if (not $self->valid_macro($macro)) {
             $self->squawk( $file, $name, "Invalid macro $macro" );
         }
+        if ( $macro eq 'PARROT_IGNORABLE_RESULT' ) {
+            $is_ignorable = 1;
+        }
     }
     if ( $return_type =~ /\*/ ) {
         if ( !$macros{PARROT_CAN_RETURN_NULL} && !$macros{PARROT_CANNOT_RETURN_NULL} ) {
@@ -214,14 +255,15 @@
     }
 
     return {
-        file        => $file,
-        name        => $name,
-        args        => \@args,
-        macros      => \@macros,
-        is_static   => $is_static,
-        is_inline   => $parrot_inline,
-        is_api      => $parrot_api,
-        return_type => $return_type,
+        file         => $file,
+        name         => $name,
+        args         => \@args,
+        macros       => \@macros,
+        is_static    => $is_static,
+        is_inline    => $parrot_inline,
+        is_api       => $parrot_api,
+        is_ignorable => $is_ignorable,
+        return_type  => $return_type,
     };
 }
 
@@ -237,7 +279,7 @@
     my $function_decl = shift;
 
     # strip out any PARROT_* function modifiers
-    foreach my $key (%valid_macros) {
+    foreach my $key ($self->valid_macros) {
         $function_decl =~ s/^$key$//m;
     }
 
@@ -245,7 +287,7 @@
     $function_decl =~ s/\s+/ /g;
 
     # strip out any ARG* modifiers
-    $function_decl =~ s/ARG(?:IN|IN_NULLOK|OUT|OUT_NULLOK|MOD|MOD_NULLOK|FREE)\((.*?)\)/$1/g;
+    $function_decl =~ s/ARG(?:IN|IN_NULLOK|OUT|OUT_NULLOK|MOD|MOD_NULLOK|FREE|FREE_NOTNULL)\((.*?)\)/$1/g;
 
     # strip out the SHIM modifier
     $function_decl =~ s/SHIM\((.*?)\)/$1/g;
@@ -301,7 +343,7 @@
     my $func  = shift;
     my $error = shift;
 
-    push( @{ $warnings{$file}->{$func} }, $error );
+    push( @{ $self->{warnings}{$file}{$func} }, $error );
 
     return;
 }

Modified: branches/avl_string_cache/lib/Parrot/Manifest.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Manifest.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Manifest.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -68,7 +68,7 @@
     my %data = (
         id         => '$' . 'Id$',
         time       => scalar gmtime,
-        cmd        => -d '.svn' ? 'svn' : 'svk',
+        cmd        => 'svn',
         script     => $argsref->{script},
         file       => $argsref->{file}      ? $argsref->{file}      : q{MANIFEST},
         skip       => $argsref->{skip}      ? $argsref->{skip}      : q{MANIFEST.SKIP},

Modified: branches/avl_string_cache/lib/Parrot/Ops2c/Utils.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Ops2c/Utils.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Ops2c/Utils.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -479,6 +479,7 @@
     print $fh <<END_C;
 #include "parrot/parrot.h"
 #include "parrot/oplib.h"
+#include "parrot/runcore_api.h"
 
 $self->{sym_export} op_lib_t *$self->{init_func}(PARROT_INTERP, long init);
 
@@ -893,8 +894,8 @@
 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 size_t hash_str(ARGIN_NULLOK(const char *str));
+static void store_op(PARROT_INTERP, ARGIN(op_info_t *info), int full);
 
 /* XXX on changing interpreters, this should be called,
    through a hook */
@@ -911,7 +912,8 @@
  * returns >= 0 (found idx into info_table), -1 if not
  */
 
-static size_t hash_str(const char *str) {
+static size_t hash_str(ARGIN_NULLOK(const char *str))
+{
     size_t      key = 0;
     const char *s   = str;
 
@@ -923,8 +925,9 @@
     return key;
 }
 
-static void store_op(PARROT_INTERP, op_info_t *info, int full) {
-    HOP * const p     = mem_gc_allocate_zeroed_typed(interp, HOP);
+static void store_op(PARROT_INTERP, ARGIN(op_info_t *info), int full)
+{
+    HOP * const p     = mem_gc_allocate_typed(interp, HOP);
     const size_t hidx =
         hash_str(full ? info->full_name : info->name) % OP_HASH_SIZE;
 
@@ -932,30 +935,40 @@
     p->next   = hop[hidx];
     hop[hidx] = p;
 }
+
 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 = 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 - $self->{bs}op_lib.op_info_table;
     }
+
     return -1;
 }
-static void hop_init(PARROT_INTERP) {
+
+static void hop_init(PARROT_INTERP)
+{
     size_t i;
     op_info_t * const info = $self->{bs}op_lib.op_info_table;
+
     /* store full names */
     for (i = 0; i < $self->{bs}op_lib.op_count; i++)
         store_op(interp, info + i, 1);
+
     /* plus one short name */
     for (i = 0; i < $self->{bs}op_lib.op_count; i++)
         if (get_op(interp, info[i].name, 0) == -1)
             store_op(interp, info + i, 0);
 }
+
 static void hop_deinit(PARROT_INTERP)
 {
     if (hop) {

Modified: branches/avl_string_cache/lib/Parrot/Pmc2c/PCCMETHOD.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Pmc2c/PCCMETHOD.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Pmc2c/PCCMETHOD.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -258,8 +258,8 @@
     /*BEGIN RETURN $returns */
 END
         $e->emit( <<"END", __FILE__, __LINE__ + 1 );
-    Parrot_pcc_build_call_from_c_args(interp, _call_object, "$returns_signature",
-            $returns_varargs);
+    _ret_object = Parrot_pcc_build_call_from_c_args(interp, _call_object,
+        "$returns_signature", $returns_varargs);
     return;
     /*END RETURN $returns */
     }
@@ -415,6 +415,7 @@
     PMC * const _ctx         = CURRENT_CONTEXT(interp);
     PMC * const _ccont       = Parrot_pcc_get_continuation(interp, _ctx);
     PMC * const _call_object = Parrot_pcc_get_signature(interp, _ctx);
+    PMC * _ret_object        = PMCNULL;
 
     { /* BEGIN PARMS SCOPE */
 END
@@ -427,11 +428,11 @@
             $params_varargs);
 END
     }
-    $e->emit( <<"END", __FILE__, __LINE__ + 1 );
+    $e->emit( <<'END', __FILE__, __LINE__ + 1 );
     { /* BEGIN PMETHOD BODY */
 END
 
-    $e_post->emit( <<"END", __FILE__, __LINE__ + 1 );
+    $e_post->emit( <<'END', __FILE__, __LINE__ + 1 );
 
     } /* END PMETHOD BODY */
     } /* END PARAMS SCOPE */
@@ -449,10 +450,6 @@
     return 1;
 }
 
-sub isquoted {
-    1;
-}
-
 sub rewrite_pccinvoke {
     my ( $method, $pmc ) = @_;
     my $body             = $method->body;

Modified: branches/avl_string_cache/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Pmc2c/PMCEmitter.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Pmc2c/PMCEmitter.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -570,7 +570,7 @@
         vt->base_type    = entry;
         vt->whoami       = string_make(interp, "$classname", @{[length($classname)]},
                                        "ascii", PObj_constant_FLAG|PObj_external_FLAG);
-        vt->provides_str = Parrot_str_append(interp, vt->provides_str,
+        vt->provides_str = Parrot_str_concat(interp, vt->provides_str,
             string_make(interp, "$provides", @{[length($provides)]}, "ascii",
             PObj_constant_FLAG|PObj_external_FLAG));
 

Modified: branches/avl_string_cache/lib/Parrot/Pmc2c/Pmc2cMain.pm
==============================================================================
--- branches/avl_string_cache/lib/Parrot/Pmc2c/Pmc2cMain.pm	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/lib/Parrot/Pmc2c/Pmc2cMain.pm	Thu Apr 22 09:55:26 2010	(r45889)
@@ -240,8 +240,11 @@
         return $path if -e $path;
     }
 
-    print Carp::longmess;
-    die "cannot find file '$file' in path '", join( "', '", @includes ), "'" if $die_unless_found;
+    if ($die_unless_found) {
+        my $includes_list = join q|', '| => @includes;
+        Carp::confess("cannot find file '$file' in path '$includes_list'");
+    }
+
     return;
 }
 

Modified: branches/avl_string_cache/ports/debian/control.in
==============================================================================
--- branches/avl_string_cache/ports/debian/control.in	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/ports/debian/control.in	Thu Apr 22 09:55:26 2010	(r45889)
@@ -3,7 +3,7 @@
 Priority: optional
 Maintainer: Debian Parrot Maintainers <pkg-parrot-devel at lists.alioth.debian.org>
 Uploaders: Allison Randal <allison at parrot.org>, Nuno Carvalho <mestre.smash at gmail.com>, Patrick Michaud <pmichaud at pobox.com>
-Build-Depends: debhelper (>= 5.0.0), perl, perl-doc, libgdbm-dev, libreadline-dev, quilt
+Build-Depends: debhelper (>= 5.0.0), perl, perl-doc, libreadline-dev, quilt
 Standards-Version: 3.8.4
 
 Package: parrot

Added: branches/avl_string_cache/ports/fedora/2.3.0/parrot.desk.in.tar.gz
==============================================================================
Files /dev/null	00:00:00 1970	(empty, because file is newly added) and branches/avl_string_cache/ports/fedora/2.3.0/parrot.desk.in.tar.gz	Thu Apr 22 09:55:26 2010	(r45889) differ

Added: branches/avl_string_cache/ports/fedora/2.3.0/parrot.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/ports/fedora/2.3.0/parrot.patch	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,19 @@
+--- lib/Parrot/Install.pm	2009-06-01 09:29:57.000000000 +0200
++++ lib/Parrot/Install.pm	2009-06-03 08:41:22.000000000 +0200
+@@ -220,6 +220,16 @@
+         else {
+             next unless -e $src;
+             next if $^O eq 'cygwin' and -e "$src.exe"; # stat works, copy not
++            if (-l $src) { 
++                # check if the system supports symbolic linking 
++                use Config; 
++                if ($Config{d_symlink} && $Config{d_readlink}) { 
++                # copy as symbolic link 
++                    symlink(readlink($src), $dest); 
++                    print "$dest\n"; 
++                    next; 
++                } 
++            } 
+             copy( $src, $dest ) or die "Error: couldn't copy $src to $dest: $!\n";
+             print "$dest\n";
+         }

Copied and modified: branches/avl_string_cache/ports/fedora/2.3.0/parrot.spec (from r45357, branches/avl_string_cache/ports/fedora/parrot.spec.fedora)
==============================================================================
--- branches/avl_string_cache/ports/fedora/parrot.spec.fedora	Wed Mar 31 13:36:15 2010	(r45357, copy source)
+++ branches/avl_string_cache/ports/fedora/2.3.0/parrot.spec	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 Name:           parrot
-Version:        2.0.0
+Version:        2.3.0
 Release:        1%{?dist}
 Summary:        a virtual machine
 License:        Artistic 2.0
@@ -7,13 +7,9 @@
 URL:            http://www.parrot.org/
 
 Source0:        ftp://ftp.parrot.org/pub/parrot/releases/stable/%{version}/parrot-%{version}.tar.gz
+Source1:        %{name}.desk.in.tar.gz
 
 Patch0:         parrot.patch
-# patched file:           tools/dev/install_files.pl
-# It is responsible to have no subdirectory under pkgconfig.
-#
-# patched file:           config/gen/makefiles/parrot_pc.in
-# So "pkg-config parrot --cflags" works correct
 #
 # see for upstream:       https://trac.parrot.org/parrot/ticket/509
 # patched file:           lib/Parrot/Install.pm
@@ -33,6 +29,10 @@
 BuildRequires:  openssl-devel
 BuildRequires:  flex
 BuildRequires:  bison
+# Needed to generate the Parrot PDF book
+BuildRequires:  perl(Pod::PseudoPod::LaTeX), texlive-latex
+# Needed to desktop-file-install usage
+BuildRequires:  desktop-file-utils
  
 
 %package docs
@@ -40,6 +40,8 @@
 Group:          Documentation
 Requires:       perl(strict)
 Requires:       perl(warnings)
+# Provides the executable in the desktop file (xdg-open)
+Requires:       xdg-utils
 BuildArch:      noarch
 
 #--
@@ -113,6 +115,11 @@
     RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
 %endif
 
+# there are problems in this version with the optimize="-O2" option on ppc64
+%ifarch ppc64
+    RPM_OPT_FLAGS=`echo "$RPM_OPT_FLAGS" | %{__perl} -pi -e 's/-O2//'`
+%endif
+
 %{__perl} Configure.pl \
     --prefix=%{_usr} \
     --libdir=%{_libdir} \
@@ -124,6 +131,7 @@
     --optimize="$RPM_OPT_FLAGS" \
     --parrot_is_shared \
     --disable-rpath \
+    --pkgconfigdir=pkgconfig \
     --lex=%{_bindir}/flex
 
 # The LD_LIBRARY_PATH hack is needed for "miniparrot"
@@ -132,9 +140,7 @@
 
 # pbc_to_exe would not build if %{_smp_mflags} would used
 make
-make parrot_utils
-make installable
-make html
+make html pdf
 
 
 %install
@@ -144,9 +150,7 @@
 # to find his parrot-library in "blib/lib" 
 export LD_LIBRARY_PATH=$( pwd )/blib/lib
 
-# install-dev: Same as 'install' taget but also install support for 
-#              language development 
-make install-dev DESTDIR=$RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT
 
 # Creating man-pages
 %{__install} -d $RPM_BUILD_ROOT%{_mandir}/man1
@@ -221,6 +225,18 @@
 find examples -wholename 'examples/languages/abc/t/harness' \
     -exec %{__perl} -pi -e 's/\r$//' {} \;
 
+#install desktop file
+%{__mkdir} ${RPM_BUILD_ROOT}%{_datadir}/applications/
+%{__tar} xzf %{SOURCE1} parrot_html.desk.in --to-stdout | %{__sed} "s|@DOCDIR@|%{_docdir}/%{name}-docs-%{version}|g" > ${RPM_BUILD_ROOT}%{_datadir}/applications/parrot_html.desktop
+%{__tar} xzf %{SOURCE1} parrot_pdf.desk.in --to-stdout | %{__sed} "s|@DOCDIR@|%{_docdir}/%{name}-docs-%{version}|g" > ${RPM_BUILD_ROOT}%{_datadir}/applications/parrot_pdf.desktop
+
+desktop-file-install --delete-original --add-category="Documentation"  \
+    --dir=${RPM_BUILD_ROOT}%{_datadir}/applications                    \
+    ${RPM_BUILD_ROOT}%{_datadir}/applications/parrot_html.desktop
+desktop-file-install --delete-original --add-category="Documentation"  \
+    --dir=${RPM_BUILD_ROOT}%{_datadir}/applications                    \
+    ${RPM_BUILD_ROOT}%{_datadir}/applications/parrot_pdf.desktop
+
 
 %check
 # 'make fulltest' is done by default; it take a lot of time
@@ -251,16 +267,20 @@
 %files docs
 %defattr(-,root,root,-)
 %doc docs examples
+%{_datadir}/applications/parrot_html.desktop
+%{_datadir}/applications/parrot_pdf.desktop
 
 %files devel
 %defattr(-,root,root,-)
 %{_bindir}/parrot_config
 %{_bindir}/parrot_debugger
+%{_bindir}/parrot_nci_thunk_gen
 %{_bindir}/parrot-nqp
 %{_bindir}/pbc_disassemble
 %{_bindir}/pbc_merge
 %{_bindir}/pbc_to_exe
 %{_bindir}/pbc_dump
+%{_bindir}/tapir
 %{_includedir}/parrot
 %{_libdir}/libparrot.so
 %exclude %{_libdir}/libparrot.a
@@ -282,13 +302,18 @@
 
 
 %changelog
+* Tue Apr 20 2010 Gerd Pokorra <gp at zimt.uni-siegen.de> 2.3.0-1
+- updated to 2.3.0
+- add desktop files to access the documentation for reading
+- add the tapir binary
+
+* Tue Mar 16 2010 Gerd Pokorra <gp at zimt.uni-siegen.de> 2.2.0-1
+- add the parrot_nci_thunk_gen binary
+
 * Wed Jan 20 2010 Gerd Pokorra <gp at zimt.uni-siegen.de> 2.0.0-1
 - new upstream version
 - add the parrot-nqp binary, with generating of the man-page
 
-* Sat Aug 22 2009 Tomas Mraz <tmraz at redhat.com> 1.5.0-2
-- rebuilt with new openssl
-
 * Fri Aug 21 2009 Gerd Pokorra <gp at zimt.uni-siegen.de> 1.5.0-1
 - add man pages
 
@@ -306,7 +331,6 @@
 - change the group of the subpackage "-docs" to Documentation
 - put the main-documentation from the docs-package to the main package
 - LICENSE file added
-- change 'make install' to 'make install-dev' to also install support for development (tools)
 - add Provides-lines
 - add patch for the file "tools/dev/install_files.pl"
 - add commands to reduce output of errors when using rpmlint
@@ -326,7 +350,6 @@
 - updated to 1.0.0
 
 * Tue Jan 23 2009 Reini Urban <rurban at x-ray.at> 0.9.0
-- added make installable
 - added parrot_utils to devel
 
 * Tue Dec 16 2008 Whiteknight <wknight8111 at gmail.com> 0.8.2

Deleted: branches/avl_string_cache/ports/fedora/parrot.patch
==============================================================================
--- branches/avl_string_cache/ports/fedora/parrot.patch	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,38 +0,0 @@
---- tools/dev/install_files.pl	2009-07-13 10:26:40.000000000 +0200
-+++ tools/dev/install_files.pl	2009-07-13 13:37:49.000000000 +0200
-@@ -163,7 +163,7 @@
-             # libdir as it is typically done with automake installed packages.
-             # If there is a use case to make this configurable we'll add a
-             # seperate --pkgconfigdir option.
--            $filehash->{DestDirs} = ['pkgconfig', $parrotdir];
-+            $filehash->{DestDirs} = ['pkgconfig'];
-             return($filehash);
-         },
-     },
---- config/gen/makefiles/parrot_pc.in	2009-06-06 16:33:32.000000000 +0200
-+++ config/gen/makefiles/parrot_pc.in.new	2009-07-13 23:09:45.000000000 +0200
-@@ -7,4 +7,4 @@
- Description: virtual machine to execute bytecode for interpreted languages
- Version: @VERSION@
- Libs: -L${libdir} -lparrot @icu_shared@ @libs@
--Cflags: -I${includedir}
-+Cflags: -I${includedir}@versiondir@
---- lib/Parrot/Install.pm	2009-06-01 09:29:57.000000000 +0200
-+++ lib/Parrot/Install.pm	2009-06-03 08:41:22.000000000 +0200
-@@ -220,6 +220,16 @@
-         else {
-             next unless -e $src;
-             next if $^O eq 'cygwin' and -e "$src.exe"; # stat works, copy not
-+            if (-l $src) { 
-+                # check if the system supports symbolic linking 
-+                use Config; 
-+                if ($Config{d_symlink} && $Config{d_readlink}) { 
-+                # copy as symbolic link 
-+                    symlink(readlink($src), $dest); 
-+                    print "$dest\n"; 
-+                    next; 
-+                } 
-+            } 
-             copy( $src, $dest ) or die "Error: couldn't copy $src to $dest: $!\n";
-             print "$dest\n";
-         }

Deleted: branches/avl_string_cache/ports/fedora/parrot.spec.fedora
==============================================================================
--- branches/avl_string_cache/ports/fedora/parrot.spec.fedora	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,356 +0,0 @@
-Name:           parrot
-Version:        2.0.0
-Release:        1%{?dist}
-Summary:        a virtual machine
-License:        Artistic 2.0
-Group:          Development/Libraries
-URL:            http://www.parrot.org/
-
-Source0:        ftp://ftp.parrot.org/pub/parrot/releases/stable/%{version}/parrot-%{version}.tar.gz
-
-Patch0:         parrot.patch
-# patched file:           tools/dev/install_files.pl
-# It is responsible to have no subdirectory under pkgconfig.
-#
-# patched file:           config/gen/makefiles/parrot_pc.in
-# So "pkg-config parrot --cflags" works correct
-#
-# see for upstream:       https://trac.parrot.org/parrot/ticket/509
-# patched file:           lib/Parrot/Install.pm
-# is to have the symlink:    libparrot.so  ->  libparrot.so.%{version}
-# Without this %{_libdir}/libparrot.so would not be a symbolic link to
-# %{_libdir}/libparrot.so.%{version}  
-
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildRequires:  readline-devel
-BuildRequires:  ncurses-devel
-BuildRequires:  gmp-devel
-BuildRequires:  gdbm-devel
-BuildRequires:  libicu-devel
-BuildRequires:  perl(Test::Harness)
-BuildRequires:  perl(Test::Simple)
-BuildRequires:  ctags
-BuildRequires:  openssl-devel
-BuildRequires:  flex
-BuildRequires:  bison
- 
-
-%package docs
-Summary:        Parrot Virtual Machine documentation
-Group:          Documentation
-Requires:       perl(strict)
-Requires:       perl(warnings)
-BuildArch:      noarch
-
-#--
-
-%package devel
-Summary:        Parrot Virtual Machine development headers and libraries
-Group:          Development/Libraries
-Requires:       %{name} = %{version}-%{release}
-Requires:       pkgconfig
-
-#--
-
-%package tools
-Summary:        Parrot Virtual Machine development for languages
-Group:          Development/Libraries
-Requires:       %{name} = %{version}-%{release}
-Requires:       perl(Pod::Simple)
-Requires:       perl(File::Which) >= 0.05
-Requires:       perl(Parrot::OpLib::core)
-# It is necessary to have installed the package "perl-Perl-Critic" to install
-# the parrot-tools
-Provides:       perl(Parrot::Pmc2c::MethodEmitter) = %{version}
-Provides:       perl(Parrot::Pmc2c::PCCMETHOD_BITS) = %{version}
-Provides:       perl(Parrot::Pmc2c::PMCEmitter) = %{version}
-Provides:       perl(Parrot::OpLib::core) = %{version}
-
-
-%description
-Parrot is a virtual machine designed to efficiently compile and execute
-bytecode for dynamic languages. Parrot is the target for Rakudo Perl 6,
-as well as variety of other languages.
-
-#--
-
-%description docs
-Documentation in text-, POD- and HTML-format (docs/html-subdirectory) and also
-examples about the Parrot Virtual Machine.
-
-#--
-
-%description devel
-Parrot Virtual Machine development headers and libraries.
-
-#--
-
-%description tools
-Parrot Virtual Machine development files for building languages.
-
-
-%prep
-%setup -q
-%patch0 -p0
-
-
-cat << \EOF > %{name}-prov
-#!/bin/sh
-%{__perl_provides} $* | %{__sed} -e '/perl(A)/d' -e '/perl(B)/d' \
-                            -e '/perl(DB)/d' -e '/perl(Parrot::OpLib::core)/d'
-EOF
-
-%global __perl_provides %{_builddir}/%{name}-%{version}/%{name}-prov
-chmod +x %{__perl_provides}
-
-
-%build
-%ifarch %{ix86} x86_64
-    RPM_OPT_FLAGS="$RPM_OPT_FLAGS -maccumulate-outgoing-args"
-%else
-# The PowerPC-architecture do not build with the '-maccumulate-outgoing-args'
-# option.
-    RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
-%endif
-
-%{__perl} Configure.pl \
-    --prefix=%{_usr} \
-    --libdir=%{_libdir} \
-    --sysconfdir=%{_sysconfdir} \
-    --infodir=%{_datadir}/info \
-    --mandir=%{_mandir} \
-    --cc="%{__cc}" \
-    --cxx=%{__cxx} \
-    --optimize="$RPM_OPT_FLAGS" \
-    --parrot_is_shared \
-    --disable-rpath \
-    --lex=%{_bindir}/flex
-
-# The LD_LIBRARY_PATH hack is needed for "miniparrot"
-# to find his parrot-library in "blib/lib" 
-export LD_LIBRARY_PATH=$( pwd )/blib/lib
-
-# pbc_to_exe would not build if %{_smp_mflags} would used
-make
-make parrot_utils
-make installable
-make html
-
-
-%install
-rm -rf $RPM_BUILD_ROOT
-
-# The LD_LIBRARY_PATH hack is needed for the command "pbc_to_exe parrot-nqp.pbc"
-# to find his parrot-library in "blib/lib" 
-export LD_LIBRARY_PATH=$( pwd )/blib/lib
-
-# install-dev: Same as 'install' taget but also install support for 
-#              language development 
-make install-dev DESTDIR=$RPM_BUILD_ROOT
-
-# Creating man-pages
-%{__install} -d $RPM_BUILD_ROOT%{_mandir}/man1
-for var in 'parrot docs/running.pod' 'parrot_debugger src/parrot_debugger.c' \
-           'pbc_disassemble src/pbc_disassemble.c' 'pbc_dump src/pbc_dump.c' \
-           'pbc_merge src/pbc_merge.c' 'pbc_to_exe tools/dev/pbc_to_exe.pir' \
-           'parrot_config tools/build/parrot_config_c.pl' \
-           'parrot-nqp compilers/nqp/README.pod'
-do
-    MAN_NAME=`echo $var | %{__perl} -na -e 'print $F[0]'`
-    MAN_SOURCE=`echo $var | %{__perl} -na -e 'print $F[1]'`
-    pod2man --section=1 --name=$MAN_NAME $MAN_SOURCE | %{__gzip} -c > $RPM_BUILD_ROOT%{_mandir}/man1/${MAN_NAME}.1.gz
-done
-
-# Drop the docs so rpm can pick them up itself.
-rm -rf $RPM_BUILD_ROOT%{_defaultdocdir}/%{name}
-
-# Force permissions on doc directories.
-find docs examples -type d -exec chmod 755 {} \;
-find docs examples -type f -exec chmod 644 {} \;
-
-
-%define RPM_PAR_LIB_DIR $RPM_BUILD_ROOT%{_libdir}/%{name}/%{version}/
-
-
-# Force permissions on shared versioned libs so they get stripped.
-# The parrot-install-script don't set the permissions right
-# With changed permissions the dependencies will be found
-find %{RPM_PAR_LIB_DIR}dynext -type f -name '*.so' -exec chmod 755 {} \;
-
-# Remove module that should be install instead (perl(File::Which))
-rm -rf %{RPM_PAR_LIB_DIR}tools/lib/File
-
-
-# Added to reduce output errors when using rpmlint
-
-# Force permission on perl-scripts in the "tools" subdirctory
-find %{RPM_PAR_LIB_DIR}tools -type f -name "*.pl" -exec chmod 755 {} \; \
-    -exec %{__sed} -i -e '1 s&#! perl&#!/usr/bin/perl&' {} \;
-# Set path to parrot binary and Force permission
-find %{RPM_PAR_LIB_DIR}tools/dev -type f -name "pbc_to_exe.pir" \
-    -exec %{__sed} -i -e '1 s&#! parrot&#!/usr/bin/parrot&' {} \; \
-    -exec chmod 755 {} \;
-
-# Remove doc-files with zero-length
-find docs/html -type f -size 0 -exec rm -f {} \;
-find docs -wholename 'docs/doc-prep' -type f -size 0 -exec rm -f {} \;
-
-# Set path for installed programs in docs package
-find examples/json -type f -name "*.pir" \
-    -exec %{__sed} -i -e '1 s&#!../../parrot&#!/usr/bin/parrot&' {} \;
-find examples -type f -path 'examples/*/*/setup.pir' \
-    -exec %{__sed} -i -e '1 s&#! ../../../parrot&#!/usr/bin/parrot&' {} \;
-find examples -type f \( -name '*.pl' -o \
-                         -wholename 'examples/pir/befunge/t/basic.t' -o  \
-                         -path 'examples/languages/*/harness'               \) \
-    -exec %{__sed} -i -e '1 s&#! perl&#!/usr/bin/perl&' {} \;
-find examples -type f -name "*.py" \
-    -exec %{__sed} -i -e '1 s&#! python&#!/usr/bin/python&' {} \;
-find examples -type f -name "*.rb" \
-    -exec %{__sed} -i -e '1 s&#! ruby&#!/usr/bin/ruby&' {} \;
-
-find examples -type f \( -name "*.pir" -o \
-                         -wholename 'examples/shootout/random.pasm' \)  \
-    -exec %{__sed} -i -e '1 s&#!./parrot&#!/usr/bin/parrot&' {} \;
-
-find examples -wholename 'examples/languages/abc/t/01-tests.t' \
-    -exec %{__sed} -i -e '1 s&#!perl&#!/usr/bin/perl&' {} \;
-find examples -wholename 'examples/shootout/revcomp.pir' \
-    -exec %{__sed} -i -e '1 s&#!parrot&#!/usr/bin/parrot&' {} \;
-
-find examples -wholename 'examples/languages/abc/t/harness' \
-    -exec %{__perl} -pi -e 's/\r$//' {} \;
-
-
-%check
-# 'make fulltest' is done by default; it take a lot of time
-export LD_LIBRARY_PATH=$( pwd )/blib/lib
-FULL='full'
-%{?_without_fulltest: FULL=''}
-%{?!_without_tests: make ${FULL}test}
-
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
-%files
-%defattr(-,root,root,-)
-%doc ChangeLog CREDITS NEWS PBC_COMPAT PLATFORMS README
-%doc RESPONSIBLE_PARTIES TODO LICENSE
-%{_bindir}/parrot
-%{_libdir}/parrot/
-%exclude %{_libdir}/parrot/%{version}/tools
-%exclude %{_libdir}/parrot/%{version}/VERSION
-%{_libdir}/libparrot.so.*
-%{_mandir}/man1/parrot.1.gz
-
-%files docs
-%defattr(-,root,root,-)
-%doc docs examples
-
-%files devel
-%defattr(-,root,root,-)
-%{_bindir}/parrot_config
-%{_bindir}/parrot_debugger
-%{_bindir}/parrot-nqp
-%{_bindir}/pbc_disassemble
-%{_bindir}/pbc_merge
-%{_bindir}/pbc_to_exe
-%{_bindir}/pbc_dump
-%{_includedir}/parrot
-%{_libdir}/libparrot.so
-%exclude %{_libdir}/libparrot.a
-%{_libdir}/pkgconfig/*
-%{_mandir}/man1/parrot_config.1.gz
-%{_mandir}/man1/parrot_debugger.1.gz
-%{_mandir}/man1/pbc_disassemble.1.gz
-%{_mandir}/man1/pbc_merge.1.gz
-%{_mandir}/man1/pbc_to_exe.1.gz
-%{_mandir}/man1/pbc_dump.1.gz
-%{_mandir}/man1/parrot-nqp.1.gz
-
-%files tools
-%defattr(-,root,root,-)
-# Files for building languages
-%{_libdir}/parrot/%{version}/tools/*
-%{_libdir}/parrot/%{version}/VERSION
-%{_usr}/src/parrot/*
-
-
-%changelog
-* Wed Jan 20 2010 Gerd Pokorra <gp at zimt.uni-siegen.de> 2.0.0-1
-- new upstream version
-- add the parrot-nqp binary, with generating of the man-page
-
-* Sat Aug 22 2009 Tomas Mraz <tmraz at redhat.com> 1.5.0-2
-- rebuilt with new openssl
-
-* Fri Aug 21 2009 Gerd Pokorra <gp at zimt.uni-siegen.de> 1.5.0-1
-- add man pages
-
-* Sat Aug 1 2009 Gerd Pokorra <gp at zimt.uni-siegen.de> 1.4.0-9
-- include the necessary module Parrot::OpLib::core
-- change the place of header files to /usr/include/parrot/<version>
-- install the files /usr/src/parrot/*
-- add the new disable-rpath configure option
-
-* Wed Mar 25 2009 Gerd Pokorra <gp at zimt.uni-siegen.de> 1.0.0-6
-- add a list of changes from Lubomir Rintel
-- add filtering Provides
-- change requires for docs-subpackage
-- enable test suite
-- change the group of the subpackage "-docs" to Documentation
-- put the main-documentation from the docs-package to the main package
-- LICENSE file added
-- change 'make install' to 'make install-dev' to also install support for development (tools)
-- add Provides-lines
-- add patch for the file "tools/dev/install_files.pl"
-- add commands to reduce output of errors when using rpmlint
-- define RPM_PAR_LIB_DIR added
-- add subpackage "tools"
-- exclude tools directory from main-package
-- added make html
-
-* Sun Mar 22 2009 Fabien Georget <fabien.georget at gmail.com> 1.0.0-4
-- add tools
-
-* Sun Mar 22 2009 David Fetter <david at fetter.org> 1.0.0-3
-- Removed wrong prefix from pkgconfig per Christoph Wickert
-- Changed i386 to ix86 per Christoph Wickert
-
-* Tue Mar 17 2009 Allison Randal <allison at parrot.org> 1.0.0
-- updated to 1.0.0
-
-* Tue Jan 23 2009 Reini Urban <rurban at x-ray.at> 0.9.0
-- added make installable
-- added parrot_utils to devel
-
-* Tue Dec 16 2008 Whiteknight <wknight8111 at gmail.com> 0.8.2
-- updated to 0.8.2
-
-* Wed Feb 20 2008 Patrick Michaud <pmichaud at pobox.com> 0.5.3
-- Update to 0.5.3.
-
-* Sat Mar 10 2007 Steven Pritchard <steve at kspei.com> 0.4.9-1
-- Update to 0.4.9.
-- BuildRequires ncurses-devel.
-- For some reason now I need to force -lm too.
-- Remove some files/directories that shouldn't be included.
-- Override lib_dir and make various substitutions to try to fix multilib.
-- Remove rpath use from Makefile.
-- Fix a pod error in src/ops/experimental.ops.
-- Enable "make test" since t/doc/pod.t won't fail now.
-- Force permissions on shared libraries so rpmbuild strips them.
-- Fix URL, description, summary, etc.
-- Add post/postun.
-- Move parrot-config to the devel sub-package.
-- Force permissions on the doc directories.
-- Add -lcurses to get readline detection to work.
-- Add BuildRequires libicu-devel.
-
-* Tue Mar 18 2003 Steve Fink <sfink at foxglove.localdomain> 0.0.11
-- first .spec file created

Added: branches/avl_string_cache/ports/suse/2.2.0/parrot.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/ports/suse/2.2.0/parrot.diff	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,47 @@
+--- ./src/packfile.c.orig	2010-03-16 05:15:34.000000000 +0000
++++ ./src/packfile.c	2010-03-17 13:44:10.000000000 +0000
+@@ -4442,8 +4442,7 @@ PackFile_Annotations_add_group(PARROT_IN
+ 
+     /* Allocate extra space for the group in the groups array. */
+     if (self->groups)
+-        self->groups =
+-            self->groups = mem_gc_realloc_n_typed_zeroed(interp, self->groups,
++	self->groups = mem_gc_realloc_n_typed_zeroed(interp, self->groups,
+                 1 + self->num_groups, self->num_groups, PackFile_Annotations_Group *);
+     else
+         self->groups = mem_gc_allocate_n_typed(interp,
+--- ./src/pmc.c.orig	2010-03-16 05:15:34.000000000 +0000
++++ ./src/pmc.c	2010-03-17 13:32:50.000000000 +0000
+@@ -584,7 +584,7 @@ Parrot_pmc_new_init_int(PARROT_INTERP, I
+     if (!PMC_IS_NULL(classobj) && PObj_is_class_TEST(classobj)) {
+         PMC *initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+         VTABLE_set_integer_native(interp, initial, init);
+-        VTABLE_instantiate(interp, classobj, initial);
++        return VTABLE_instantiate(interp, classobj, initial);
+     }
+     else {
+         PMC * const pmc = get_new_pmc_header(interp, base_type, 0);
+--- ./tools/dev/pbc_to_exe.pir.orig	2010-03-17 14:04:34.000000000 +0000
++++ ./tools/dev/pbc_to_exe.pir	2010-03-17 14:05:34.000000000 +0000
+@@ -510,10 +510,11 @@ END_OF_FUNCTION
+     .param int install :optional
+ 
+     $P0 = '_config'()
+-    .local string cc, ccflags, cc_o_out, osname, build_dir, slash
++    .local string cc, ccflags, optimize, cc_o_out, osname, build_dir, slash
+     .local string installed, includepath, versiondir
+     cc        = $P0['cc']
+     ccflags   = $P0['ccflags']
++    optimize  = $P0['optimize']
+     cc_o_out  = $P0['cc_o_out']
+     osname    = $P0['osname']
+     build_dir = $P0['build_dir']
+@@ -547,6 +548,8 @@ END_OF_FUNCTION
+     compile .= pathquote
+     compile .= ' '
+     compile .= ccflags
++    compile .= ' '
++    compile .= optimize
+     compile .= ' -c '
+     compile .= cfile
+ 

Added: branches/avl_string_cache/ports/suse/2.2.0/parrot.spec
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/ports/suse/2.2.0/parrot.spec	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,226 @@
+#
+# spec file for package parrot (Version 2.2.0)
+#
+# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
+#
+
+
+
+Name:           parrot
+Version:        2.2.0
+Release:        1.10
+%define pversion 2_2_0
+Summary:        Parrot Virtual Machine
+License:        Artistic 2.0
+Group:          Development/Libraries
+Url:            http://www.parrot.org/
+Source0:        parrot-%{version}.tar.bz2
+Patch0:         parrot.diff
+BuildRoot:      %{_tmppath}/%{name}-%{version}-build
+BuildRequires:  readline-devel
+BuildRequires:  ncurses-devel
+BuildRequires:  gmp-devel
+BuildRequires:  gdbm-devel
+BuildRequires:  libicu-devel
+%if ! 0%{?suse_version}
+BuildRequires:  perl-Test-Harness
+%endif
+
+%package docs
+Summary:        Parrot Virtual Machine documentation
+License:        Artistic 2.0
+Group:          Development/Libraries
+%if ! 0%{?suse_version}
+BuildRequires:  /usr/bin/perldoc
+%endif
+
+%package -n libparrot%pversion
+
+
+Summary:        Parrot Virtual Machine Library
+License:        Artistic 2.0
+Group:          Development/Libraries
+
+%package devel
+Summary:        Parrot Virtual Machine development headers and libraries
+License:        Artistic 2.0
+Group:          Development/Libraries
+Requires:       %{name} = %{version}
+Requires:       readline-devel
+Requires:       ncurses-devel
+Requires:       gmp-devel
+Requires:       gdbm-devel
+Requires:       libicu-devel
+%if ! 0%{?suse_version}
+Requires:       %{_libdir}/pkgconfig
+%endif
+
+%description
+Parrot is a virtual machine designed to efficiently compile and execute
+bytecode for dynamic languages. Parrot is the target for Rakudo Perl 6,
+as well as variety of other languages.
+
+%description -n libparrot%pversion
+Parrot is a virtual machine designed to efficiently compile and execute
+bytecode for dynamic languages. Parrot is the target for Rakudo Perl 6,
+as well as variety of other languages.
+
+%description docs
+Documentation in text-, POD- and HTML-format (docs/html-subdirectory) and also
+examples about the Parrot Virtual Machine
+
+%description devel
+Parrot Virtual Machine development headers and libraries.
+
+%prep
+%setup -q
+%patch0
+%{__perl} -pi -e 's,"lib/,"%{_lib}/, if (/CONST_STRING\(interp,/)' \
+    src/library.c
+%{__perl} -pi -e "s,'/usr/lib','%{_libdir}',;s,runtime/lib/,runtime/%{_lib}/," \
+    tools/dev/install_files.pl
+%{__perl} -pi -e "s,'/usr/lib','%{_libdir}',;s,runtime/lib/,runtime/%{_lib}/," \
+    tools/dev/install_dev_files.pl
+
+%build
+if test "%{_vendor}" = "suse"
+then
+    LIBS='-lncurses -lm -lrt'
+else
+    LIBS='-lcurses -lm -lrt'
+fi
+OPTIMIZE="$RPM_OPT_FLAGS -fno-strict-aliasing"
+OPTIMIZE="$RPM_OPT_FLAGS"
+%ifarch %ix86 %x86_64
+OPTIMIZE="$OPTIMIZE -maccumulate-outgoing-args"
+%endif
+%ifarch ppc ia64
+OPTIMIZE="-O0"
+%endif
+%{__perl} Configure.pl \
+    --prefix=%{_usr} \
+    --libdir=%{_libdir} \
+    --sysconfdir=%{_sysconfdir} \
+    --infodir=%{_datadir}/info \
+    --mandir=%{_mandir} \
+    --cc="%{__cc}" \
+    --cxx=%{__cxx} \
+    --optimize="$OPTIMIZE" \
+    --parrot_is_shared \
+    --disable-rpath \
+    --lex=/usr/bin/flex \
+    --yacc=/usr/bin/yacc \
+    --libs="$LIBS"
+export LD_LIBRARY_PATH=$( pwd )/blib/lib
+make
+make parrot_utils
+make installable
+make html
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir $RPM_BUILD_ROOT
+export LD_LIBRARY_PATH=$( pwd )/blib/lib
+make install-dev DESTDIR=$RPM_BUILD_ROOT
+PARROT_LIB=%{_libdir}`./parrot_config versiondir`
+PARROT_INC=%{_includedir}`./parrot_config versiondir`
+wd=`pwd`
+for i in $RPM_BUILD_ROOT$PARROT_LIB/tools/build/* ; do
+    perl -pi -e "s@$wd/include@$PARROT_INC at g" $i
+    perl -pi -e "s@$wd/src/pmc@$PARROT_INC/pmc at g" $i
+    perl -pi -e "s@(-Wl,)?-L$wd/blib/lib@@" $i
+    perl -pi -e "s@$wd@$PARROT_LIB at g" $i
+done
+perl -pi -e 's@^(use lib ..FindBin::Bin/\.\./)\.\."@$1lib"@' $RPM_BUILD_ROOT$PARROT_LIB/tools/build/dynpmc.pl
+# Drop the docs so rpm can pick them up itself.
+rm -rf $RPM_BUILD_ROOT%{_usr}/share/doc/parrot    # necessary for SuSE
+#rm -rf $RPM_BUILD_ROOT/%{_docdir}/parrot         # for Solaris?
+# Force permissions on doc directories.
+find docs examples -type d -exec chmod 755 {} \;
+find docs examples -type f -exec chmod 644 {} \;
+# Force permissions on shared libs so they get stripped.
+find $RPM_BUILD_ROOT%{_libdir} -type f \( -name '*.so' -o -name '*.so.*' \) \
+    -exec chmod 755 {} \;
+# make libparrot.so a symlink
+(cd $RPM_BUILD_ROOT%{_libdir} ; ln -fs libparrot.so.* libparrot.so)
+
+%check
+export LD_LIBRARY_PATH=$( pwd )/blib/lib
+# make test < /dev/null
+# %{?_with_fulltest:make fulltest < /dev/null}
+# make test || :
+# %{?_with_fulltest:make fulltest || :}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post -n libparrot%pversion -p /sbin/ldconfig
+
+%postun -n libparrot%pversion -p /sbin/ldconfig
+
+%files
+%defattr(-,root,root,-)
+%exclude %{_bindir}/parrot_config
+%exclude %{_bindir}/parrot_debugger
+%exclude %{_bindir}/pbc_*
+%{_bindir}/*
+
+%files -n libparrot%pversion
+%defattr(-,root,root,-)
+%dir %{_libdir}/parrot
+%dir %{_libdir}/parrot/*
+%{_libdir}/parrot/*/[^st]*
+%{_libdir}/libparrot.so.*
+
+%files docs
+%defattr(-,root,root,-)
+%doc ChangeLog CREDITS NEWS PBC_COMPAT PLATFORMS README
+%doc RESPONSIBLE_PARTIES TODO
+%doc docs examples
+
+%files devel
+%defattr(-,root,root,-)
+%{_bindir}/parrot_config
+%{_bindir}/parrot_debugger
+%{_bindir}/pbc_disassemble
+%{_bindir}/pbc_merge
+%{_bindir}/pbc_to_exe
+%{_bindir}/pbc_dump
+%{_includedir}/parrot
+%{_libdir}/libparrot.so
+%{_libdir}/libparrot.a
+%{_libdir}/pkgconfig/*
+%{_libdir}/parrot/*/[st]*
+%{_usrsrc}/parrot
+
+%changelog
+* Wed Mar 17 2010 mls at suse.de
+- update to parrot-2.2.0
+  * Most internal allocations now use the GC
+  * RNG non-randomness fixes
+  * Elimination of much dead code
+* Fri Feb 19 2010 mls at suse.de
+- update to parrot-2.1.1
+* Fri Oct 23 2009 mls at suse.de
+- update to October version
+* Mon Sep 21 2009 mls at suse.de
+- update to September version
+* Thu Aug 27 2009 mls at suse.de
+- update to August version
+* Fri Jun 26 2009 mls at suse.de
+- update to June version
+* Thu Apr 23 2009 mls at suse.de
+- update to April version
+* Fri Apr  3 2009 mls at suse.de
+- initial revision

Deleted: branches/avl_string_cache/ports/suse/parrot.spec.suse
==============================================================================
--- branches/avl_string_cache/ports/suse/parrot.spec.suse	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,244 +0,0 @@
-Name:           parrot
-Version:        1.1.0
-Release:        1%{dist}
-Summary:        Parrot Virtual Machine
-License:        Artistic 2.0
-Group:          Development/Libraries
-URL:            http://www.parrot.org/
-Source0:        ftp://ftp.parrot.org/pub/parrot/releases/stable/%{version}/parrot-%{version}.tar.gz
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildRequires:  readline-devel
-BuildRequires:  ncurses-devel
-BuildRequires:  gmp-devel
-BuildRequires:  gdbm-devel
-BuildRequires:  libicu-devel
-BuildRequires:  perl-Test-Harness
-
-%package docs
-Summary:        Parrot Virtual Machine documentation
-License:        Artistic 2.0
-Group:          Development/Libraries
-BuildRequires:  /usr/bin/perldoc
-
-%package devel
-Summary:        Parrot Virtual Machine development headers and libraries
-License:        Artistic 2.0
-Group:          Development/Libraries
-Requires:       %{name} = %{version}-%{release}
-Requires:       %{_libdir}/pkgconfig
-
-%description
-Parrot is a virtual machine designed to efficiently compile and execute
-bytecode for dynamic languages. Parrot is the target for Rakudo Perl 6,
-as well as variety of other languages.
-
-%description docs
-Documentation in text-, POD- and HTML-format (docs/html-subdirectory) and also
-examples about the Parrot Virtual Machine
-
-%description devel
-Parrot Virtual Machine development headers and libraries.
-
-%prep
-%setup -q
-
-%{__perl} -pi -e 's,"lib/,"%{_lib}/, if (/CONST_STRING\(interp,/)' \
-    src/library.c
-%{__perl} -pi -e "s,'/usr/lib','%{_libdir}',;s,runtime/lib/,runtime/%{_lib}/," \
-    tools/dev/install_files.pl
-
-%build
-
-%ifarch i386 x86_64
-%{__perl} Configure.pl \
-    --prefix=%{_usr} \
-    --libdir=%{_libdir} \
-    --sysconfdir=%{_sysconfdir} \
-    --infodir=%{_datadir}/info \
-    --mandir=%{_mandir} \
-    --cc="%{__cc}" \
-    --cxx=%{__cxx} \
-    --optimize="$RPM_OPT_FLAGS -maccumulate-outgoing-args" \
-    --parrot_is_shared \
-    --lex=/usr/bin/flex \
-    --yacc=/usr/bin/yacc \
-    --libs="-lncurses -lm"
-%else
-# PowerPC
-%{__perl} Configure.pl \
-    --prefix=%{_usr} \
-    --libdir=%{_libdir}
-%endif
-
-export LD_LIBRARY_PATH=$( pwd )/blib/lib
-make
-make parrot_utils
-make installable
-make html
-
-%install
-rm -rf $RPM_BUILD_ROOT
-
-export LD_LIBRARY_PATH=$( pwd )/blib/lib
-make install DESTDIR=$RPM_BUILD_ROOT
-
-# Drop the docs so rpm can pick them up itself.
-rm -rf $RPM_BUILD_ROOT%{_usr}/share/doc/parrot    # necessary for SuSE
-#rm -rf $RPM_BUILD_ROOT/%{_docdir}/parrot         # for Solaris?
-
-# Force permissions on doc directories.
-find docs examples -type d -exec chmod 755 {} \;
-find docs examples -type f -exec chmod 644 {} \;
-
-# Force permissions on shared libs so they get stripped.
-find $RPM_BUILD_ROOT%{_libdir} -type f \( -name '*.so' -o -name '*.so.*' \) \
-    -exec chmod 755 {} \;
-
-# These files *probably* aren't needed.
-rm -rf $RPM_BUILD_ROOT%{_usr}/config \
-    $RPM_BUILD_ROOT%{_includedir}/src \
-    $RPM_BUILD_ROOT%{_usr}/src \
-    $RPM_BUILD_ROOT%{_usr}/tools
-
-%check
-export LD_LIBRARY_PATH=$( pwd )/blib/lib
-# make test < /dev/null
-# %{?_with_fulltest:make fulltest < /dev/null}
-# make test || :
-# %{?_with_fulltest:make fulltest || :}
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
-%files
-%defattr(-,root,root,-)
-%exclude %{_bindir}/parrot_config
-%exclude %{_bindir}/parrot_debugger
-%exclude %{_bindir}/pbc_*
-%{_bindir}/*
-%{_libdir}/parrot
-%{_libdir}/libparrot.so.*
-
-%files docs
-%defattr(-,root,root,-)
-%doc ChangeLog CREDITS NEWS PBC_COMPAT PLATFORMS README
-%doc RESPONSIBLE_PARTIES TODO
-%doc docs examples
-
-%files devel
-%defattr(-,root,root,-)
-%{_bindir}/parrot_config
-%{_bindir}/parrot_debugger
-%{_bindir}/pbc_disassemble
-%{_bindir}/pbc_merge
-%{_bindir}/pbc_to_exe
-%{_bindir}/pbc_dump
-%{_includedir}/parrot
-%{_libdir}/libparrot.so
-%{_libdir}/libparrot.a
-%{_libdir}/pkgconfig/*
-
-%changelog
-* Tue Apr 21 2009 Francois Perrad <francois.perrad at gadz.org> 1.1.0
-- updated to 1.1.0
-
-* Tue Mar 17 2009 Allison Randal <allison at parrot.org> 1.0.0
-- updated to 1.0.0
-
-* Tue Jan 23 2009 Reini Urban <rurban at x-ray.at> 0.9.0
-- added make installable, perl6 is still not installable
-- added parrot_utils to devel
-- fixed Source0 url
-
-* Tue Jan 23 2009 Gerd Pokorra <gp at zimt.uni-siegen.de> 0.9.0
-- added make html
-- make reallyinstall => make install
-
-* Tue Jan 20 2009 chromatic <chromatic at wgz.org> 0.9.0
-- updated to 0.9.0
-
-* Tue Dec 16 2008 Whiteknight <wknight8111 at gmail.com> 0.8.2
-- updated to 0.8.2
-
-* Tue Nov 18 2008 chromatic <chromatic at parrot.org> 0.8.1
-- updated to 0.8.1
-
-* Tue Oct 21 2008 particle <particle at parrot.org> 0.8.0
-- updated to 0.8.0
-
-* Tue Sep 16 2008 pmichaud <pmichaud at pobox.com> 0.7.1
-- updated to 0.7.1
-
-* Wed Sep  3 2008 chromatic <chromatic at wgz.org> 0.7.0
-- install parrot_config (not parrot-config)
-
-* Tue Jun 17 2008 Nuno Carvalho <smash at cpan.org> 0.6.3
-- updated to 0.6.3
-
-* Tue May 20 2008 chromatic <chromatic at wgz.org>> 0.6.2
-- updated to 0.6.2
-
-* Mon Apr 28 2008 chromatic <chromatic at wgz.org> 0.6.1
-- minor fixes; tested with Fedora 7, 8, and 9-beta
-
-* Tue Mar 18 2008 Bernhard Schmalhofer <Bernhard.Schmalhofer at gmx.de> 0.6.0
-- Update to 0.5.3.
-
-* Wed Feb 20 2008 Patrick Michaud <pmichaud at pobox.com> 0.5.3
-- Update to 0.5.3.
-
-* Tue Jan 15 2008 Bob Rogers <rogers at rgrjr.dyndns.org> 0.5.2
-- Update to 0.5.2.
-
-* Tue Dec 18 2007 Jonathan Worthington <jnthn at jnthn.net> 0.5.1
-- Update to 0.5.1.
-
-* Tue Nov 20 2007 chromatic <chromatic at wgz.org> 0.5.0
-- Update to 0.5.0.
-
-* Fri May 25 2007 David Fetter <david at fetter.org> 0.4.12-1
-- Update to 0.4.12.
-
-* Wed Apr 18 2007 Steven Pritchard <steve at kspei.com> 0.4.11-1
-- Update to 0.4.11.
-
-* Wed Mar 21 2007 Steven Pritchard <steve at kspei.com> 0.4.10-1
-- Update to 0.4.10.
-
-* Sat Mar 10 2007 Steven Pritchard <steve at kspei.com> 0.4.9-1
-- Update to 0.4.9.
-- BR ncurses-devel.
-- For some reason now I need to force -lm too.
-- Remove some files/directories that shouldn't be included.
-
-* Wed Jan 17 2007 Steven Pritchard <steve at kspei.com> 0.4.8-1
-- Attempt update to 0.4.8.
-
-* Fri Jun 30 2006 Steven Pritchard <steve at kspei.com> 0.4.5-5
-- Override lib_dir and make various substitutions to try to fix multilib.
-- Remove rpath use from Makefile.
-- Fix a pod error in src/ops/experimental.ops.
-- Enable "make test" since t/doc/pod.t won't fail now.
-
-* Wed Jun 28 2006 Steven Pritchard <steve at kspei.com> 0.4.5-4
-- Force permissions on shared libraries so rpmbuild strips them.
-
-* Wed Jun 28 2006 Steven Pritchard <steve at kspei.com> 0.4.5-3
-- Fix URL, description, summary, etc.
-- Add post/postun.
-- Move parrot-config to the devel sub-package.
-- Force permissions on the doc directories.
-
-* Tue Jun 27 2006 Steven Pritchard <steve at kspei.com> 0.4.5-2
-- Add -lcurses to get readline detection to work.
-- BR libicu-devel.
-
-* Tue Jun 27 2006 Steven Pritchard <steve at kspei.com> 0.4.5-1
-- Initial packaging attempt.
-
-* Tue Mar 18 2003 Steve Fink <sfink at foxglove.localdomain> 0.0.11
-- first .spec file created

Modified: branches/avl_string_cache/ports/ubuntu/control.in
==============================================================================
--- branches/avl_string_cache/ports/ubuntu/control.in	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/ports/ubuntu/control.in	Thu Apr 22 09:55:26 2010	(r45889)
@@ -4,7 +4,7 @@
 Maintainer: Ubuntu Developers <ubuntu-devel-discuss at lists.ubuntu.com>
 XSBC-Original-Maintainer: Debian Parrot Maintainers <pkg-parrot-devel at lists.alioth.debian.org>
 Uploaders: Allison Randal <allison at parrot.org>, Nuno Carvalho <mestre.smash at gmail.com>, Patrick Michaud <pmichaud at pobox.com>
-Build-Depends: debhelper (>= 5.0.0), perl, perl-doc, libgdbm-dev, libreadline-dev
+Build-Depends: debhelper (>= 5.0.0), perl, perl-doc, libreadline-dev
 Standards-Version: 3.8.1
 
 Package: parrot

Modified: branches/avl_string_cache/runtime/parrot/library/P6object.pir
==============================================================================
--- branches/avl_string_cache/runtime/parrot/library/P6object.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/runtime/parrot/library/P6object.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -95,7 +95,7 @@
 
 =cut
 
-.sub 'HOW' :method
+.sub 'HOW' :method :nsentry
     $P0 = typeof self
     $P1 = getprop 'metaclass', $P0
     .return ($P1)
@@ -108,7 +108,7 @@
 
 =cut
 
-.sub 'WHAT' :method
+.sub 'WHAT' :method :nsentry
     .local pmc how, what
     how = self.'HOW'()
     .tailcall how.'WHAT'()
@@ -121,7 +121,7 @@
 
 =cut
 
-.sub 'WHERE' :method
+.sub 'WHERE' :method :nsentry
     $I0 = get_addr self
     .return ($I0)
 .end
@@ -133,7 +133,7 @@
 
 =cut
 
-.sub 'WHO' :method
+.sub 'WHO' :method :nsentry
     $P0 = typeof self
     $P0 = getprop 'metaclass', $P0
     $P0 = getattribute $P0, 'parrotclass'
@@ -170,7 +170,7 @@
 
 .namespace ['P6metaclass']
 
-.sub 'WHAT' :method
+.sub 'WHAT' :method :nsentry
     $P0 = getattribute self, 'protoobject'
     .return ($P0)
 .end

Modified: branches/avl_string_cache/runtime/parrot/library/ProfTest/Matcher.nqp
==============================================================================
--- branches/avl_string_cache/runtime/parrot/library/ProfTest/Matcher.nqp	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/runtime/parrot/library/ProfTest/Matcher.nqp	Thu Apr 22 09:55:26 2010	(r45889)
@@ -24,21 +24,31 @@
     my $start_line := 0;
     my $max_line   := +$profile.profile_array;
 
-    my $curr_line;
+    my %curr_line;
     my $curr_want;
 
     while ($line_idx < $max_line) {
 
-        $curr_line := $profile.profile_array[$line_idx];
+        %curr_line := $profile.profile_array[$line_idx];
         $curr_want := self<wants>[$want_idx];
         self.say("current want: "~$curr_want.get_str);
-        self.say("current line: "~ ~$curr_line);
+        my $line_desc;
+        if self<debugging> {
+            $line_desc := "current line: " ~ %curr_line<type> ~'(';
+            for %curr_line -> $k {
+                unless $k eq 'type' {
+                    $line_desc := "$line_desc :$k(" ~ %curr_line{$k} ~") ";
+                }
+            }
+            $line_desc := $line_desc ~ ")";
+        }
+        self.say($line_desc);
 
         if $curr_want.goal {
             self.say("SUCCESS\n");
             return 1;
         }
-        elsif ($curr_want.accepts($curr_line)) {
+        elsif ($curr_want.accepts(%curr_line)) {
 
             self.say("ACCEPTED");
             $line_idx++;

Modified: branches/avl_string_cache/runtime/parrot/library/ProfTest/PIRProfile.nqp
==============================================================================
--- branches/avl_string_cache/runtime/parrot/library/ProfTest/PIRProfile.nqp	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/runtime/parrot/library/ProfTest/PIRProfile.nqp	Thu Apr 22 09:55:26 2010	(r45889)
@@ -21,39 +21,56 @@
     my @pprof_lines := pir::split("\n", self<profile>);
     self<profile_array> := ();
 
-    grammar pprof_line {
-        rule TOP { ^^ [ <variable_line> | <fixed_line> ] $$ }
-
-        rule line_type { [ 'VERSION' | 'CLI' | 'END_OF_RUNLOOP' | 'CS' | 'OP' ] }
-
-        rule fixed_line { <line_type> ':' <fixed_data> }
-        rule fixed_data { \N* }
-
-        rule variable_line { <line_type> ':' <variable_data>* }
-        rule variable_data { '{x{' <field_name> ':' <field_data> '}x}' }
-        rule field_name    { <.ident> }
-        #XXX: really need to find something better 
-        rule field_data    { <[a..zA..Z0..9_\-;\/.]>* }
-    }
-
     for @pprof_lines -> $line {
-        my $line_match := pprof_line.parse($line);
+        my $line_match := self.make_line_hash($line);
         #pir::say($line);
         #_dumper($line_match);
         self<profile_array>.push($line_match);
     }
 }
 
+method make_line_hash($line) {
+
+    my %line_hash := {};
+
+    my $colon_idx := pir::index($line, ":");
+    #if the line starts with "VERSION, CLI or END_OF_RUNLOOP, 
+    if ($colon_idx >= 3) {
+        my $type := pir::substr($line, 0, $colon_idx);
+        my $data := pir::substr($line, $colon_idx+1);
+        %line_hash<type> := $type;
+        %line_hash<data> := $data;
+    }
+    else {
+        my $type := pir::substr($line, 0, $colon_idx);
+        %line_hash<type> := $type;
+        $line := pir::substr($line, $colon_idx+1);
+        while ($line) {
+            $line := pir::substr($line, 3);
+            my $colon_idx := pir::index($line, ":");
+            my $split_idx := pir::index($line, "}x}");
+            my $name  := pir::substr($line, 0, $colon_idx);
+            my $value := pir::substr($line, $colon_idx+1, $split_idx-$colon_idx-1);
+            %line_hash{ $name } := $value;
+            $line := pir::substr($line, $split_idx+3);
+        }
+    }
+    %line_hash;
+}
+
+
 method build_pir_profile() {
 
-    my $tmp_pir := '/tmp/test.pir';
-    my $tmp_pprof := '/tmp/test.pprof';
+    my %config    := self.get_config();
+    #XXX(cotto) use a random filename (requires randomness from pir)
+    my $tmp_pir   := %config<tempdir> ~ %config<slash> ~ 'test.pir';
+    my $tmp_pprof := %config<tempdir> ~ %config<slash> ~ 'test.pprof';
+
     my $fh := pir::new__p_sc('FileHandle');
     $fh.open($tmp_pir, "w");
     $fh.puts(self<pir_code>);
     $fh.close();
 
-    my %config := self.get_config();
     my $parrot_exe := %config<prefix> ~ %config<slash> ~ %config<test_prog>;
     my $hash_seed_opt := '';
 

Modified: branches/avl_string_cache/runtime/parrot/library/ProfTest/Want.nqp
==============================================================================
--- branches/avl_string_cache/runtime/parrot/library/ProfTest/Want.nqp	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/runtime/parrot/library/ProfTest/Want.nqp	Thu Apr 22 09:55:26 2010	(r45889)
@@ -8,14 +8,6 @@
 
 method accepts() { 1; }
 
-method hashify_profile_data($data) {
-    my %h := {};
-    for $data -> $match {
-        %h{ $match<field_name> } := $match<field_data>;
-    }
-    %h;
-}
-
 method goal() { 0; }
 
 
@@ -36,13 +28,9 @@
     self;
 }
 
-method accepts($prof_line) {
-    my $line_type := $prof_line<variable_line> ?? 
-        $prof_line<variable_line><line_type> !! 
-        $prof_line<variable_line><line_type> ;
-
+method accepts(%prof_line) {
     for self<except> -> $except_type {
-        if $except_type eq $line_type {
+        if $except_type eq %prof_line<type>{
             return 0;
         }
     }
@@ -63,13 +51,12 @@
 class ProfTest::Want::Version is ProfTest::Want;
 
 method new($version?) {
-    self<version>   := $version;
+    self<version> := $version;
     self;
 }
 
-method accepts($prof_line) {
-    if $prof_line<fixed_line> &&
-        $prof_line<fixed_line><line_type> eq 'VERSION' {
+method accepts(%prof_line) {
+    if %prof_line<type> eq 'VERSION' {
         return 1;
     }
 }
@@ -87,13 +74,10 @@
 
 class ProfTest::Want::CLI is ProfTest::Want;
 
-method new() { 
-    self;
-}
+method new() { self }
 
-method accepts($prof_line) {
-    if $prof_line<fixed_line> &&
-        $prof_line<fixed_line><line_type> eq 'CLI' {
+method accepts(%prof_line) {
+    if %prof_line<type> eq 'CLI' {
         return 1;
     }
 }
@@ -106,9 +90,8 @@
 
 method new() { self; }
 
-method accepts($prof_line) {
-    if $prof_line<fixed_line> &&
-        $prof_line<fixed_line><line_type> eq 'END_OF_RUNLOOP' {
+method accepts(%prof_line) {
+    if %prof_line<type> eq 'END_OF_RUNLOOP' {
         return 1;
     }
 }
@@ -127,13 +110,12 @@
     self;
 }
 
-method accepts($prof_line) {
-    if $prof_line<variable_line> && $prof_line<variable_line><line_type> eq 'OP' {
-        my %variable_data := self.hashify_profile_data($prof_line<variable_line><variable_data>);
-        if self<name> ne %variable_data<op> {
+method accepts(%prof_line) {
+    if %prof_line<type> eq 'OP' {
+        if self<name> ne %prof_line<op> {
             return 0;
         }
-        if self<line> && self<line> != %variable_data<line> {
+        if self<line> && self<line> != %prof_line<line> {
             return 0;
         }
         return 1;
@@ -163,20 +145,19 @@
     self;
 }
 
-method accepts($prof_line) {
+method accepts(%prof_line) {
     if self<found_cs> && self<slurp_until> {
-        if pir::downcase($prof_line<variable_line><line_type>) ne self<slurp_until> {
+        if pir::downcase(%prof_line<type>) ne self<slurp_until> {
             return 1;
         }
         return 0;
     }
-    elsif $prof_line<variable_line> && $prof_line<variable_line><line_type> eq 'CS' {
+    elsif %prof_line<type> eq 'CS' {
         if !self<ns> {
             self<found_cs> := 1;
             return 1;
         }
-        my %h := self.hashify_profile_data($prof_line<variable_line><variable_data>);
-        if %h<ns> eq self<ns> {
+        if %prof_line<ns> eq self<ns> {
             self<found_cs> := 1;
             return 1;
         }

Deleted: branches/avl_string_cache/runtime/parrot/library/SQLite3.pir
==============================================================================
--- branches/avl_string_cache/runtime/parrot/library/SQLite3.pir	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,135 +0,0 @@
-# Copyright (C) 2008-2009, Parrot Foundation.
-# $Id$
-
-.namespace ['SQLite3']
-
-.const int SQLITE_OK         =   0   # Successful result
-# beginning-of-error-codes
-.const int SQLITE_ERROR      =   1   # SQL error or missing database
-.const int SQLITE_INTERNAL   =   2   # Internal logic error in SQLite
-.const int SQLITE_PERM       =   3   # Access permission denied
-.const int SQLITE_ABORT      =   4   # Callback routine requested an abort
-.const int SQLITE_BUSY       =   5   # The database file is locked
-.const int SQLITE_LOCKED     =   6   # A table in the database is locked
-.const int SQLITE_NOMEM      =   7   # A malloc() failed
-.const int SQLITE_READONLY   =   8   # Attempt to write a readonly database
-.const int SQLITE_INTERRUPT  =   9   # Operation terminated by sqlite3_interrupt()
-.const int SQLITE_IOERR      =  10   # Some kind of disk I/O error occurred
-.const int SQLITE_CORRUPT    =  11   # The database disk image is malformed
-.const int SQLITE_NOTFOUND   =  12   # NOT USED. Table or record not found
-.const int SQLITE_FULL       =  13   # Insertion failed because database is full
-.const int SQLITE_CANTOPEN   =  14   # Unable to open the database file
-.const int SQLITE_PROTOCOL   =  15   # NOT USED. Database lock protocol error
-.const int SQLITE_EMPTY      =  16   # Database is empty
-.const int SQLITE_SCHEMA     =  17   # The database schema changed
-.const int SQLITE_TOOBIG     =  18   # String or BLOB exceeds size limit
-.const int SQLITE_CONSTRAINT =  19   # Abort due to constraint violation
-.const int SQLITE_MISMATCH   =  20   # Data type mismatch
-.const int SQLITE_MISUSE     =  21   # Library used incorrectly
-.const int SQLITE_NOLFS      =  22   # Uses OS features not supported on host
-.const int SQLITE_AUTH       =  23   # Authorization denied
-.const int SQLITE_FORMAT     =  24   # Auxiliary database format error
-.const int SQLITE_RANGE      =  25   # 2nd parameter to sqlite3_bind out of range
-.const int SQLITE_NOTADB     =  26   # File opened that is not a database file
-.const int SQLITE_ROW        =  100  # sqlite3_step() has another row ready
-.const int SQLITE_DONE       =  101  # sqlite3_step() has finished executing
-
-.sub '_sqlite_init' :load
-    .local pmc libname
-    .local pmc function
-    .local pmc sqlite_funcs
-
-    libname = loadlib 'libsqlite3'
-    set_global '_sqlite3', libname
-
-    sqlite_funcs = new 'ResizableStringArray'
-    push sqlite_funcs, 'step'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'finalize'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'close'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'errmsg'
-    push sqlite_funcs, 'tp'
-    push sqlite_funcs, 'errcode'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'bind_int'
-    push sqlite_funcs, 'ipii'
-    push sqlite_funcs, 'bind_double'
-    push sqlite_funcs, 'ipid'
-    push sqlite_funcs, 'bind_text'
-    push sqlite_funcs, 'ipitii'
-    push sqlite_funcs, 'column_name'
-    push sqlite_funcs, 'tpi'
-    push sqlite_funcs, 'column_count'
-    push sqlite_funcs, 'ip'
-    push sqlite_funcs, 'column_type'
-    push sqlite_funcs, 'ipi'
-    push sqlite_funcs, 'column_int'
-    push sqlite_funcs, 'ipi'
-    push sqlite_funcs, 'column_double'
-    push sqlite_funcs, 'lpi'
-    push sqlite_funcs, 'column_text'
-    push sqlite_funcs, 'tpi'
-
-    function  = dlfunc libname, 'sqlite3_open', 'itV'
-    set_global 'open_raw', function
-
-    function  = dlfunc libname, 'sqlite3_prepare_v2', 'iptiVp'
-    set_global 'prepare_raw', function
-
-    .local pmc list_iter
-    list_iter = iter sqlite_funcs
-    .local string func_name, signature
-    .local pmc    function
-
-  list_loop:
-    unless list_iter goto done
-    func_name = shift list_iter
-    signature = shift list_iter
-    $S0 = concat 'sqlite3_', func_name
-    function  = dlfunc libname, $S0, signature
-    set_global func_name, function
-    goto list_loop
-
-  done:
-
-.end
-
-.sub 'open'
-  .param string connectstr
-  .local pmc dbhandle
-  .local pmc open_raw
-  .local int rc
-
-  open_raw = get_global 'open_raw'
-  dbhandle = new 'Pointer'
-  rc = open_raw(connectstr, dbhandle)
-
-  .return(dbhandle)
-.end
-
-.sub 'prepare'
-  .param pmc dbhandle
-  .param string psstr
-  .local int psstrlen
-  .local pmc pshandle
-  .local pmc dummy
-  .local pmc prepare_raw
-  .local int rc
-
-  prepare_raw = get_global 'prepare_raw'
-
-  pshandle = new 'Pointer'
-  dummy = new 'Pointer'
-  psstrlen = length psstr
-  rc = prepare_raw(dbhandle, psstr, psstrlen, pshandle, dummy)
-
-  .return(pshandle)
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/runtime/parrot/library/Stream/Base.pir
==============================================================================
--- branches/avl_string_cache/runtime/parrot/library/Stream/Base.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/runtime/parrot/library/Stream/Base.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -65,7 +65,7 @@
 
 =cut
 
-.sub close :method
+.sub close :method :nsentry
     .local pmc temp
 
     # reset source

Added: branches/avl_string_cache/runtime/parrot/library/TAP/Formatter.pir
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/runtime/parrot/library/TAP/Formatter.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,851 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+TAP/Formatter
+
+=head2 DESCRIPTION
+
+Simplified port of TAP::Harness (version 3.21)
+
+See L<http://search.cpan.org/~andya/Test-Harness/>
+
+=head3 Class TAP;Formatter;Base
+
+Base class for harness output delegates
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Formatter';'Base']
+
+.sub '' :init :load :anon
+    $P0 = newclass ['TAP';'Formatter';'Base']
+    $P0.'add_attribute'('verbosity')
+    $P0.'add_attribute'('normalize')
+    $P0.'add_attribute'('failures')
+    $P0.'add_attribute'('comments')
+    $P0.'add_attribute'('directives')
+    $P0.'add_attribute'('_longest')
+    $P0.'add_attribute'('_printed_summary_header')
+.end
+
+.sub 'init' :vtable :method
+    $P0 = box 0
+    setattribute self, 'verbosity', $P0
+.end
+
+=item process_args
+
+=cut
+
+.sub 'process_args' :method
+    .param pmc opts
+    $I0 = exists opts['verbose']
+    unless $I0 goto L1
+    $P0 = box 1
+    setattribute self, 'verbosity', $P0
+  L1:
+    $I0 = exists opts['quiet']
+    unless $I0 goto L2
+    $P0 = box -1
+    setattribute self, 'verbosity', $P0
+  L2:
+    $I0 = exists opts['QUIET']
+    unless $I0 goto L3
+    $P0 = box -2
+    setattribute self, 'verbosity', $P0
+  L3:
+    $I0 = exists opts['normalize']
+    unless $I0 goto L4
+    $P0 = new 'Boolean'
+    set $P0, 1
+    setattribute self, 'normalize', $P0
+  L4:
+    $I0 = exists opts['failures']
+    unless $I0 goto L5
+    $P0 = new 'Boolean'
+    set $P0, 1
+    setattribute self, 'failures', $P0
+  L5:
+    $I0 = exists opts['comments']
+    unless $I0 goto L6
+    $P0 = new 'Boolean'
+    set $P0, 1
+    setattribute self, 'comments', $P0
+  L6:
+    $I0 = exists opts['directives']
+    unless $I0 goto L7
+    $P0 = new 'Boolean'
+    set $P0, 1
+    setattribute self, 'directives', $P0
+  L7:
+.end
+
+=item verbose
+
+=cut
+
+.sub 'verbose' :method
+    $P0 = getattribute self, 'verbosity'
+    $I0 = $P0
+    $I0 = $I0 >= 1
+    .return ($I0)
+.end
+
+=item quiet
+
+=cut
+
+.sub 'quiet' :method
+    $P0 = getattribute self, 'verbosity'
+    $I0 = $P0
+    $I0 = $I0 <= -1
+    .return ($I0)
+.end
+
+=item really_quiet
+
+=cut
+
+.sub 'really_quiet' :method
+    $P0 = getattribute self, 'verbosity'
+    $I0 = $P0
+    $I0 = $I0 <= -2
+    .return ($I0)
+.end
+
+=item silent
+
+=cut
+
+.sub 'silent' :method
+    $P0 = getattribute self, 'verbosity'
+    $I0 = $P0
+    $I0 = $I0 <= -3
+    .return ($I0)
+.end
+
+=item prepare
+
+=cut
+
+.sub 'prepare' :method
+    .param pmc tests
+    .local int longest
+    longest = 0
+    $P0 = iter tests
+  L1:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    $I0 = length $S0
+    unless $I0 > longest goto L1
+    longest = $I0
+    goto L1
+  L2:
+    $P0 = box longest
+    setattribute self, '_longest', $P0
+.end
+
+=item _format_name
+
+=cut
+
+.sub '_format_name' :method
+    .param string name
+    $P0 = getattribute self, '_longest'
+    $I0 = $P0
+    $I0 += 2
+    $I1 = length name
+    $I0 -= $I1
+    $S0 = repeat '.', $I0
+    $S0 = ' ' . $S0
+    $S0 .= ' '
+    $S1 = name . $S0
+    .return ($S1)
+.end
+
+.sub 'open_test' :method
+    die "Unimplemented."
+.end
+
+=item summary
+
+=cut
+
+.sub 'summary' :method
+    .param pmc aggregate
+    $I0 = self.'silent'()
+    if $I0 goto L1
+    .local pmc tests
+    tests = aggregate.'descriptions'()
+    .local string runtime
+    runtime = aggregate.'elapsed_timestr'()
+    .local int total, passed
+    total = aggregate.'total'()
+    passed = aggregate.'passed'()
+
+    $I0 = aggregate.'all_passed'()
+    unless $I0 goto L2
+    self.'_output_success'("All tests successful.\n")
+  L2:
+
+    if total != passed goto L3
+    $I0 = aggregate.'has_problems'()
+    unless $I0 goto L4
+  L3:
+    self.'_output'("\nTest Summary Report")
+    self.'_output'("\n-------------------\n")
+    $P0 = iter tests
+  L5:
+    unless $P0 goto L4
+    .local string test
+    test = shift $P0
+    $P1 = box 0
+    setattribute self, '_printed_summary_header', $P1
+    .local pmc parser
+    parser = aggregate.'parsers'(test)
+    $P2 = parser.'failed'()
+    self.'_output_summary_failure'($P2, '  Failed test:  ', '  Failed tests:  ', test, parser)
+    $P2 = parser.'todo_passed'()
+    self.'_output_summary_failure'($P2, "  TODO passed:   ", "  TODO passed:   ", test, parser)
+
+    .local int _exit
+    _exit = parser.'exit'()
+    unless _exit goto L6
+    self.'_summary_test_header'(test, parser)
+    $S1 = _exit
+    self.'_failure_output'("  Non-zero exit status: ", $S1, "\n")
+  L6:
+
+    .local pmc errors
+    errors = parser.'parse_errors'()
+    $I0 = elements errors
+    unless $I0 goto L5
+    self.'_summary_test_header'(test, parser)
+    $P2 = iter errors
+    $S1 = shift $P2
+    self.'_failure_output'("  Parse errors: ", $S1, "\n")
+  L8:
+    unless $P2 goto L5
+    $S1 = repeat ' ', 16
+    $S2 = shift $P2
+    self.'_failure_output'($S1, $S2, "\n")
+    goto L8
+
+  L4:
+    $I0 = elements tests
+    $S1 = $I0
+    $S2 = total
+    self.'_output'("Files=", $S1, ", Tests=", $S2, ",  ", runtime, "\n")
+    $S1 = aggregate.'get_status'()
+    self.'_output'("Result: ", $S1, "\n")
+  L1:
+.end
+
+.sub '_output_summary_failure' :method
+    .param pmc r
+    .param string singular
+    .param string plural
+    .param string test
+    .param pmc parser
+    $I0 = elements r
+    unless $I0 goto L1
+    self.'_summary_test_header'(test, parser)
+    unless $I0 == 1 goto L2
+    self.'_output'(singular)
+    goto L3
+  L2:
+    self.'_output'(plural)
+  L3:
+    .local pmc results
+    results = self.'_balanced_range'(40, r)
+    $S1 = shift results
+    self.'_output'($S1, "\n")
+  L4:
+    unless results goto L1
+    $S1 = repeat ' ', 16
+    $S2 = shift results
+    self.'_output'($S1, $S2, "\n")
+    goto L4
+  L1:
+.end
+
+.sub '_summary_test_header' :method
+    .param string test
+    .param pmc parser
+    .local pmc _printed_summary_header
+    _printed_summary_header = getattribute self, '_printed_summary_header'
+    if _printed_summary_header goto L1
+    .local string spaces, tests_run, failed
+    $P0 = getattribute self, '_longest'
+    $I0 = $P0
+    $I1 = length test
+    $I0 -= $I1
+    inc $I0
+    spaces = repeat ' ', $I0
+    tests_run = parser.'tests_run'()
+    $P0 = parser.'failed'()
+    $I0 = elements $P0
+    failed = $I0
+    self.'_output'(test, spaces, "(Tests: ", tests_run, " Failed: ", failed, ")\n")
+    set _printed_summary_header, 1
+  L1:
+.end
+
+=item _output
+
+=cut
+
+.sub '_output' :method
+    .param pmc args :slurpy
+    $S0 = join '', args
+    print $S0
+.end
+
+=item _failure_output
+
+=cut
+
+.sub '_failure_output' :method
+    .param pmc args :slurpy
+    self.'_output'(args :flat)
+.end
+
+.sub '_output_success' :method
+    .param pmc args :slurpy
+    self.'_output'(args :flat)
+.end
+
+.sub '_balanced_range' :method
+    .param int limit
+    .param pmc range
+    range = self.'_range'(range)
+    .local string line
+    line = ''
+    .local pmc lines
+    lines = new 'ResizableStringArray'
+    .local int curr
+    curr = 0
+  L1:
+    unless range goto L2
+    unless curr < limit goto L3
+    $S0 = shift range
+    $S0 .= ", "
+    line .= $S0
+    $I0 = length $S0
+    curr += $I0
+    goto L1
+  L3:
+    unless range goto L1
+    $I0 = length line
+    $I0 -= 2
+    line = substr line, 0, $I0
+    push lines, line
+    line = ''
+    curr = 0
+    goto L1
+  L2:
+    if line == '' goto L9
+    $I0 = length line
+    $I0 -= 2
+    line = substr line, 0, $I0
+    push lines, line
+  L9:
+    .return (lines)
+.end
+
+.sub '_range' :method
+    .param pmc numbers
+    .local int min, i, _num, next
+    .local pmc range
+    range = new 'ResizableStringArray'
+    push numbers, -1
+    min = -1
+  L1:
+    _num = shift numbers
+    if _num == -1 goto L2
+    next = shift numbers
+    unshift numbers, next
+    $I0 = _num + 1
+    unless next == $I0 goto L3
+    unless min == -1 goto L1
+    min = _num
+    goto L1
+  L3:
+    unless min != -1 goto L4
+    $S0 = min
+    $S0 .= '-'
+    $S1 = _num
+    $S0 .= $S1
+    push range, $S0
+    min = -1
+    goto L1
+  L4:
+    $S0 = _num
+    push range, $S0
+    goto L1
+  L2:
+    .return (range)
+.end
+
+=back
+
+=head3 Class TAP;Formatter;Session
+
+Abstract base class for harness output delegate
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Formatter';'Session']
+
+.sub '' :init :load :anon
+    $P0 = newclass ['TAP';'Formatter';'Session']
+    $P0.'add_attribute'('name')
+    $P0.'add_attribute'('formatter')
+    $P0.'add_attribute'('parser')
+    $P0.'add_attribute'('show_count')
+.end
+
+.sub 'init' :vtable :nsentry
+    $P0 = getattribute self, 'show_count'
+    unless null $P0 goto L1
+    $P0 = new 'Boolean'
+    set $P0, 1
+    setattribute self, 'show_count', $P0
+  L1:
+.end
+
+=item header
+
+=cut
+
+.sub 'header' :method
+    # nothing
+.end
+
+=item result
+
+=cut
+
+.sub 'result' :method
+    .param pmc result
+    # nothing
+.end
+
+=item close_test
+
+=cut
+
+.sub 'close_test' :method
+    # nothing
+.end
+
+=item clear_for_close
+
+=cut
+
+.sub 'clear_for_close' :method
+    # nothing
+.end
+
+.sub '_should_show_count' :method
+    $P0 = getattribute self, 'formatter'
+    $I0 = $P0.'verbose'()
+    unless $I0 goto L1
+    .return (0)
+  L1:
+    # work in progress
+    .return (1)
+.end
+
+.sub '_format_for_output' :method
+    .param pmc result
+    $P0 = getattribute self, 'formatter'
+    $P0 = getattribute $P0, 'normalize'
+    if null $P0 goto L1
+    unless $P0 goto L1
+    $S0 = result
+    .return ($S0)
+  L1:
+    $P0 = getattribute result, 'raw'
+    .return ($P0)
+.end
+
+.sub '_output_test_failure' :method
+    .param pmc parser
+    .local pmc formatter
+    formatter = getattribute self, 'formatter'
+    $I0 = formatter.'really_quiet'()
+    if $I0 goto L1
+
+    .local pmc tests_run, tests_planned
+    tests_run = parser.'tests_run'()
+    tests_planned = parser.'tests_planned'()
+    .local int total
+    if null tests_planned goto L2
+    total = tests_planned
+    goto L3
+  L2:
+    total = tests_run
+  L3:
+
+    .local int passed, failed, exit
+    $P0 = parser.'passed'()
+    passed = elements $P0
+    $P0 = parser.'failed'()
+    failed = elements $P0
+    failed += total
+    $I0 = tests_run
+    failed -= $I0
+    exit = parser.'exit'()
+
+    unless exit goto L4
+    $S1 = exit
+    formatter.'_failure_output'("Dubious, test returned ", $S1, "\n")
+  L4:
+
+    unless failed == 0 goto L5
+    unless total goto L6
+    $S1 = total
+    formatter.'_failure_output'("All ", $S1, " subtests passed ")
+    goto L7
+  L6:
+    formatter.'_failure_output'("No subtests run ")
+    goto L7
+  L5:
+    $S1 = failed
+    $S2 = total
+    formatter.'_failure_output'("Failed ", $S1, "/", $S2, " subtests ")
+    if total goto L7
+    formatter.'_failure_output'("\nNo tests run!")
+  L7:
+
+    .local int skipped
+    $P0 = parser.'skipped'()
+    skipped = elements $P0
+    unless skipped goto L8
+    passed -= skipped
+    $S1 = skipped
+    $S2 = ''
+    if skipped == 1 goto L9
+    $S2 = 's'
+  L9:
+    $S3 = passed
+    formatter.'_output'("\n\t(less ", $S1, " skipped subtest", $S2, ": ", $S3, " okay)")
+  L8:
+
+    $P0 = parser.'todo_passed'()
+    failed = elements $P0
+    unless failed goto L10
+    $S1 = failed
+    $S2 = ''
+    if failed == 1 goto L11
+    $S2 = 's'
+  L11:
+    formatter.'_output'("\n\t(", $S1, " TODO test", $S2, " unexpectedly succeeded)")
+  L10:
+
+    formatter.'_output'("\n")
+  L1:
+.end
+
+=back
+
+=head3 Class TAP;Formatter;Console
+
+Harness output delegate for default console output
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Formatter';'Console']
+
+.sub '' :init :load :anon
+    $P0 = subclass ['TAP';'Formatter';'Base'], ['TAP';'Formatter';'Console']
+.end
+
+=item open_test
+
+=cut
+
+.sub 'open_test' :method
+    .param string test
+    .param pmc parser
+    $P0 = new ['TAP';'Formatter';'Console';'Session']
+    $P1 = box test
+    setattribute $P0, 'name', $P1
+    setattribute $P0, 'formatter', self
+    setattribute $P0, 'parser', parser
+    $P1 = getattribute $P0, 'show_count'
+    unless $P1 goto L1
+    $I0 = $P0.'_should_show_count'()
+    set $P1, $I0
+  L1:
+    $P0.'header'()
+    .return ($P0)
+.end
+
+=item _set_colors
+
+=cut
+
+.sub '_set_colors' :method
+    .param pmc colors :slurpy
+.end
+
+=item _output_success
+
+=cut
+
+.sub '_output_success' :method
+    .param string msg
+    self.'_set_colors'('green')
+    self.'_output'(msg)
+    self.'_set_colors'('reset')
+.end
+
+=item _failure_output
+
+=cut
+
+.sub '_failure_output' :method
+    .param pmc args :slurpy
+    self.'_set_colors'('red')
+    $S0 = join '', args
+    self.'_output'($S0)
+    self.'_set_colors'('reset')
+.end
+
+=back
+
+=head3 Class TAP;Formatter;Console;Session
+
+Harness output delegate for default console output
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Formatter';'Console';'Session']
+
+.sub '' :init :load :anon
+    $P0 = subclass ['TAP';'Formatter';'Session'], ['TAP';'Formatter';'Console';'Session']
+    $P0.'add_attribute'('plan')
+    $P0.'add_attribute'('newline_printed')
+    $P0.'add_attribute'('last_status_printed')
+.end
+
+.sub 'init' :vtable :method
+    $P0 = box ''
+    setattribute self, 'plan', $P0
+    $P0 = new 'Boolean'
+    set $P0, 0
+    setattribute self, 'newline_printed', $P0
+    $P0 = box 0
+    setattribute self, 'last_status_printed', $P0
+    $P0 = get_hll_global ['TAP';'Formatter';'Session'], 'init'
+    $P0(self)
+.end
+
+=item _get_output_result
+
+=cut
+
+.sub '_get_output_result' :method
+    .param pmc result
+    .local pmc formatter
+    formatter = getattribute self, 'formatter'
+    $S0 = self.'_format_for_output'(result)
+    formatter.'_output'($S0)
+.end
+
+=item header
+
+=cut
+
+.sub 'header' :method
+    .local pmc formatter
+    formatter = getattribute self, 'formatter'
+    $I0 = formatter.'really_quiet'()
+    if $I0 goto L1
+    .local pmc name
+    name = getattribute self, 'name'
+    .local string pretty
+    pretty = formatter.'_format_name'(name)
+    formatter.'_output'(pretty)
+  L1:
+.end
+
+=item result
+
+=cut
+
+.sub 'result' :method
+    .param pmc result
+    .local pmc formatter
+    formatter = getattribute self, 'formatter'
+    $I0 = isa result, ['TAP';'Parser';'Result';'Bailout']
+    unless $I0 goto L1
+    $S1 = result.'bailout'()
+    formatter.'_failure_output'("Bailout called.  Further testing stopped:  ", $S1, "\n")
+  L1:
+
+    $I0 = formatter.'really_quiet'()
+    if $I0 goto L2
+
+    .local pmc plan
+    plan = getattribute self, 'plan'
+    unless null plan goto L3
+    $S0 = '?'
+    .local pmc parser, tests_planned
+    parser = getattribute self, 'parser'
+    tests_planned = getattribute parser, 'tests_planned'
+    unless null tests_planned goto L4
+    $S0 = tests_planned
+  L4:
+    $S0 = '/' . $S0
+    plan = box $S0
+    setattribute self, 'plan', $P0
+  L3:
+
+    .local int is_test
+    is_test = isa result, ['TAP';'Parser';'Result';'Test']
+    unless is_test goto L5
+    .local pmc show_count
+    show_count = getattribute self, 'show_count'
+    unless show_count goto L5
+    .local int now
+    now = time
+    .local pmc last_status_printed
+    last_status_printed = getattribute self, 'last_status_printed'
+    $I0 = last_status_printed
+    if now == $I0 goto L5
+    .local pmc name
+    name = getattribute self, 'name'
+    .local string pretty
+    pretty = formatter.'_format_name'(name)
+    .local pmc number
+    number = getattribute result, 'test_num'
+    $S1 = number
+    $S2 = plan
+    formatter.'_output'("\r", pretty, $S1, $S2)
+    set last_status_printed, now
+  L5:
+
+    $I0 = formatter.'quiet'()
+    if $I0 goto L2
+    $I0 = formatter.'verbose'()
+    if $I0 goto L6
+    unless is_test goto L7
+    $P0 = getattribute formatter, 'failures'
+    if null $P0 goto L7
+    unless $P0 goto L7
+    $I0 = result.'is_ok'()
+    unless $I0 goto L6
+  L7:
+    $P0 = getattribute formatter, 'comments'
+    if null $P0 goto L8
+    $I0 = isa result, ['TAP';'Parser';'Result';'Comment']
+    if $I0 goto L6
+  L8:
+    $P0 = getattribute formatter, 'directives'
+    if null $P0 goto L2
+    $I0 = result.'has_directive'()
+    unless $I0 goto L2
+  L6:
+    $P0 = getattribute self, 'newline_printed'
+    if $P0 goto L9
+    formatter.'_output'("\n")
+    set $P0, 1
+  L9:
+    self.'_get_output_result'(result)
+    formatter.'_output'("\n")
+  L2:
+.end
+
+=item close_test
+
+=cut
+
+.sub 'close_test' :method
+    .local pmc formatter
+    formatter = getattribute self, 'formatter'
+    $I0 = formatter.'really_quiet'()
+    if $I0 goto L1
+
+    .local pmc show_count
+    show_count = getattribute self, 'show_count'
+    unless show_count goto L2
+    self.'clear_for_close'()
+    .local pmc name
+    name = getattribute self, 'name'
+    .local string pretty
+    pretty = formatter.'_format_name'(name)
+    formatter.'_output'("\r", pretty)
+  L2:
+
+    .local pmc parser, skip_all
+    parser = getattribute self, 'parser'
+    skip_all = getattribute parser, 'skip_all'
+    if null skip_all goto L3
+    unless skip_all goto L3
+    $S1 = skip_all
+    formatter.'_output'("skipped: ", $S1, "\n")
+    goto L1
+  L3:
+    $I0 = parser.'has_problems'()
+    unless $I0 goto L4
+    self.'_output_test_failure'(parser)
+    goto L1
+  L4:
+    .local string time_report
+    time_report = ''
+    # work in progress
+    formatter.'_output'("ok", time_report, "\n")
+  L1:
+.end
+
+=item clear_for_close
+
+=cut
+
+.sub 'clear_for_close' :method
+    .local pmc parser, formatter, name, plan, output
+    .local string tests_run, pretty
+    $I0 = 1
+    parser = getattribute self, 'parser'
+    tests_run = parser.'tests_run'()
+    $I1 = length tests_run
+    $I0 += $I1
+    formatter = getattribute self, 'formatter'
+    name = getattribute self, 'name'
+    pretty = formatter.'_format_name'(name)
+    $I1 = length pretty
+    $I0 += $I1
+    plan = getattribute self, 'plan'
+    $S0 = plan
+    $I1 = length $S0
+    $I0 += $I1
+    $S0 = repeat ' ', $I0
+    formatter.'_output'("\r", $S0)
+.end
+
+=back
+
+=head1 AUTHOR
+
+Francois Perrad
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Added: branches/avl_string_cache/runtime/parrot/library/TAP/Harness.pir
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/runtime/parrot/library/TAP/Harness.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,421 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+TAP/Harness
+
+=head2 DESCRIPTION
+
+Simplified port of TAP::Harness (version 3.21)
+and TAP::Harness::Archive (version 0.14)
+
+See L<http://search.cpan.org/~andya/Test-Harness/>
+end L<http://search.cpan.org/~wonko/TAP-Harness-Archive/>.
+
+=head3 Class TAP;Harness
+
+This is a simple test harness which allows tests to be run and results
+automatically aggregated and output to STDOUT.
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Harness']
+
+.sub '' :init :load :anon
+    load_bytecode 'TAP/Parser.pbc'
+    load_bytecode 'TAP/Formatter.pbc'
+    $P0 = subclass ['TAP';'Base'], ['TAP';'Harness']
+    $P0.'add_attribute'('formatter')
+    $P0.'add_attribute'('exec')
+    $P0.'add_attribute'('ignore_exit')
+    $P0.'add_attribute'('merge')
+    $P0.'add_attribute'('opts')
+
+    $P0 = new 'Hash'
+    $P1 = split ' ', 'parser_args made_parser before_runtests after_runtests after_test'
+  L1:
+    unless $P1 goto L2
+    $S0 = shift $P1
+    $P0[$S0] = 1
+    goto L1
+  L2:
+    set_global ['TAP';'Harness'], 'LEGAL_CALLBACK', $P0
+.end
+
+.sub 'init' :vtable :init
+    $P0 = get_global ['TAP';'Harness'], 'LEGAL_CALLBACK'
+    setattribute self, 'ok_callbacks', $P0
+.end
+
+=item process_args
+
+=cut
+
+.sub 'process_args' :method
+    .param pmc opts
+    setattribute self, 'opts', opts
+    $I0 = exists opts['exec']
+    unless $I0 goto L1
+    $S0 = opts['exec']
+    $P0 = box $S0
+    setattribute self, 'exec', $P0
+  L1:
+    $I0 = exists opts['ignore-exit']
+    unless $I0 goto L2
+    $S0 = opts['ignore-exit']
+    $P0 = new 'Boolean'
+    set $P0, 1
+    setattribute self, 'ignore_exit', $P0
+  L2:
+    $I0 = exists opts['merge']
+    unless $I0 goto L3
+    $S0 = opts['merge']
+    $P0 = new 'Boolean'
+    set $P0, 1
+    setattribute self, 'merge', $P0
+  L3:
+.end
+
+=item formatter
+
+=cut
+
+.sub 'formatter' :method
+    .param pmc formatter
+    setattribute self, 'formatter', formatter
+.end
+
+=item runtests
+
+=cut
+
+.sub 'runtests' :method :nsentry
+    .param pmc tests
+    $P0 = getattribute self, 'formatter'
+    unless null $P0 goto L1
+    $P0 = new ['TAP';'Formatter';'Console']
+    setattribute self, 'formatter', $P0
+    $P1 = getattribute self, 'opts'
+    $P0.'process_args'($P1)
+  L1:
+    .local pmc aggregate
+    aggregate = new ['TAP';'Parser';'Aggregator']
+    self.'_make_callback'('before_runtests', aggregate)
+    aggregate.'start'()
+    self.'aggregate_tests'(aggregate, tests)
+    aggregate.'stop'()
+    self.'summary'(aggregate)
+    self.'_make_callback'('after_runtests', aggregate)
+    .return (aggregate)
+.end
+
+.sub 'aggregate_tests' :method
+    .param pmc aggregate
+    .param pmc tests
+    $P0 = getattribute self, 'formatter'
+    $P0.'prepare'(tests)
+    .local string exec
+    exec = ''
+    $P0 = getattribute self, 'exec'
+    if null $P0 goto L1
+    exec = $P0
+  L1:
+    $P0 = iter tests
+  L2:
+    unless $P0 goto L3
+    $S0 = shift $P0
+    .local pmc parser, session
+    (parser, session) = self.'make_parser'($S0)
+    unless exec == '' goto L4
+    parser.'file'($S0)
+    goto L5
+  L4:
+    parser.'exec'(exec, $S0)
+  L5:
+    .local pmc coro
+    $P1 = get_hll_global ['TAP';'Parser'], 'next'
+    coro = newclosure $P1
+  L6:
+    .local pmc result
+    result = coro(parser)
+    if null result goto L7
+    session.'result'(result)
+    $I0 = isa result, ['TAP';'Parser';'Result';'Bailout']
+    unless $I0 goto L6
+    self.'_bailout'(result)
+  L7:
+    self.'finish_parser'(parser, session)
+    self.'_after_test'(aggregate, $S0, parser)
+    goto L2
+  L3:
+.end
+
+.sub '_after_test' :method
+    .param pmc aggregate
+    .param pmc desc
+    .param pmc parser
+    self.'_make_callback'('after_test', parser)
+    aggregate.'add'(desc, parser)
+.end
+
+.sub '_bailout' :method
+    .param pmc result
+    $S0 = ".\n"
+    $P0 = result.'bailout'()
+    if null $P0 goto L1
+    $S0 = $P0
+  L1:
+    $S0 = "FAILED--Further testing stopped" . $S0
+    die $S0
+.end
+
+.sub 'summary' :method
+    .param pmc aggregate
+    $P0 = getattribute self, 'formatter'
+    $P0.'summary'(aggregate)
+.end
+
+.sub 'make_parser' :method
+    .param string desc
+    .local pmc parser, session
+    parser = new ['TAP';'Parser']
+    $P0 = getattribute self, 'merge'
+    if null $P0 goto L1
+    parser.'merge'($P0)
+  L1:
+    $P0 = getattribute self, 'ignore_exit'
+    if null $P0 goto L2
+    parser.'ignore_exit'($P0)
+  L2:
+    self.'_open_spool'(parser, desc)
+    self.'_make_callback'('made_parser', parser)
+    $P0 = getattribute self, 'formatter'
+    session = $P0.'open_test'(desc, parser)
+    .return (parser, session)
+.end
+
+.sub 'finish_parser' :method
+    .param pmc parser
+    .param pmc session
+    session.'close_test'()
+    self.'_close_spool'(parser)
+    .return (parser)
+.end
+
+.sub '_open_spool' :method
+    .param pmc parser
+    .param string test
+    $P0 = new 'Env'
+    $I0 = exists $P0['PARROT_TEST_HARNESS_DUMP_TAP']
+    unless $I0 goto L1
+    .local string spool
+    spool = $P0['PARROT_TEST_HARNESS_DUMP_TAP']
+    spool .= '/'
+    spool .= test
+    $S0 = dirname(spool)
+    mkpath($S0)
+    $P0 = new 'FileHandle'
+    $P0.'open'(spool, 'w')
+    parser.'spool'($P0)
+  L1:
+.end
+
+.sub '_close_spool' :method
+    .param pmc parser
+    $P0 = parser.'delete_spool'()
+    if null $P0 goto L1
+    close $P0
+  L1:
+.end
+
+=back
+
+=head3 Class TAP';Harness;Archive
+
+This module is a direct subclass of C<TAP;Harness> and behaves
+in exactly the same way except for one detail. In addition to
+outputting a running progress of the tests and an ending summary
+it can also capture all of the raw TAP from the individual test
+files or streams into an archive file (C<.tar.gz>).
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Harness';'Archive']
+
+.sub '' :init :load :anon
+    load_bytecode 'osutils.pbc'
+    $P0 = subclass ['TAP';'Harness'], ['TAP';'Harness';'Archive']
+    $P0.'add_attribute'('archive_file')
+    $P0.'add_attribute'('archive_extra_files')
+    $P0.'add_attribute'('archive_extra_props')
+.end
+
+=item archive
+
+=cut
+
+.sub 'archive' :method
+    .param pmc archive
+    setattribute self, 'archive_file', archive
+.end
+
+=item extra_files
+
+=cut
+
+.sub 'extra_files' :method
+    .param pmc extra_files
+    $I0 = does extra_files, 'array'
+    if $I0 goto L1
+    die "extra_files must be an array!"
+  L1:
+    setattribute self, 'archive_extra_files', extra_files
+.end
+
+=item extra_props
+
+=cut
+
+.sub 'extra_props' :method
+    .param pmc extra_props
+    $I0 = does extra_props, 'hash'
+    if $I0 goto L1
+    die "extra_props must be an hash!"
+  L1:
+    setattribute self, 'archive_extra_props', extra_props
+.end
+
+=item runtests
+
+=cut
+
+.sub 'runtests' :method
+    .param pmc files
+    $P0 = getattribute self, 'archive_file'
+    unless null $P0 goto L1
+    die "You must provide the name of the archive to create!"
+  L1:
+    .local string archive, dir
+    archive = $P0
+    dir = tempdir()
+    .local pmc env
+    env = new 'Env'
+    env['PARROT_TEST_HARNESS_DUMP_TAP'] = dir
+    .local pmc aggregate
+    $P0 = get_hll_global ['TAP';'Harness'], 'runtests'
+    aggregate = $P0(self, files)
+    .local string current_dir, cmd
+    current_dir = cwd()
+    chdir(dir)
+    $S0 = self.'_mk_meta'(aggregate)
+    spew('meta.yml', $S0)
+    $P0 = getattribute self, 'archive_extra_files'
+    if null $P0 goto L2
+    $P1 = iter $P0
+  L3:
+    unless $P1 goto L2
+    $S2 = shift $P1
+    $S1 = current_dir . '/'
+    $S1 .= $S2
+    cp($S1, $S2)
+    goto L3
+  L2:
+    $S0 = current_dir
+    $I0 = index $S0, ':'
+    unless $I0 == 1 goto L4
+    $S0 = substr $S0, 2         # remove Windows drive
+  L4:
+    cmd = "tar -cf " . $S0
+    cmd .= "/"
+    $I0 = length archive
+    $I0 -= 3
+    $S0 = substr archive, 0, $I0
+    cmd .= $S0
+    cmd .= " *"
+    system(cmd)
+    chdir(current_dir)
+    cmd = "gzip --best " . $S0
+    system(cmd)
+    rmtree(dir)
+    .return (aggregate)
+.end
+
+.sub '_mk_meta' :method
+    .param pmc aggregate
+    $S0 = "---"
+    $S0 .= "\nfile_attributes:"
+    $P0 = aggregate.'descriptions'()
+    $P1 = iter $P0
+  L1:
+    unless $P1 goto L2
+    $S1 = shift $P1
+    .local pmc parser
+    parser = aggregate.'parsers'($S1)
+    $S0 .= "\n  -"
+    $S0 .= "\n    description: "
+    $S0 .= $S1
+    $N0 = parser.'start_time'()
+    $S0 .= "\n    start_time: "
+    $S1 = $N0
+    $S0 .= $S1
+    $N0 = parser.'end_time'()
+    $S0 .= "\n    stop_time: "
+    $S1 = $N0
+    $S0 .= $S1
+    goto L1
+  L2:
+    $S0 .= "\nfile_order:"
+    $P1 = iter $P0
+  L3:
+    unless $P1 goto L4
+    $S1 = shift $P1
+    $S0 .= "\n  - "
+    $S0 .= $S1
+    goto L3
+  L4:
+    $I0 = aggregate.'start_time'()
+    $S0 .= "\nstart_time: "
+    $S1 = $I0
+    $S0 .= $S1
+    $I0 = aggregate.'end_time'()
+    $S0 .= "\nstop_time: "
+    $S1 = $I0
+    $S0 .= $S1
+    $P0 = getattribute self, 'archive_extra_props'
+    if null $P0 goto L5
+    $S0 .= "\nextra_properties:"
+    $P1 = iter $P0
+  L6:
+    unless $P1 goto L5
+    .local string key, value
+    key = shift $P1
+    value = $P0[key]
+    if value == '' goto L6
+    $S0 .= "\n  "
+    $S0 .= key
+    $S0 .= ": "
+    $S0 .= value
+    goto L6
+  L5:
+    $S0 .= "\n"
+    .return ($S0)
+.end
+
+=back
+
+=head1 AUTHOR
+
+Francois Perrad
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Added: branches/avl_string_cache/runtime/parrot/library/TAP/Parser.pir
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/runtime/parrot/library/TAP/Parser.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,1662 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+TAP/Parser
+
+=head2 DESCRIPTION
+
+Simplified port of TAP::Parser (version 3.21)
+
+See L<http://search.cpan.org/~andya/Test-Harness/>
+
+=head3 Class TAP;Parser;Result
+
+Base class for TAP::Parser output objects
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Parser';'Result']
+
+.sub '' :init :load :anon
+    $P0 = newclass ['TAP';'Parser';'Result']
+    $P0.'add_attribute'('raw')
+    $P0.'add_attribute'('directive')
+    $P0.'add_attribute'('explanation')
+.end
+
+=item get_string
+
+=cut
+
+.sub 'get_string' :vtable :method
+    $P0 = getattribute self, 'raw'
+    $S0 = $P0
+    .return ($S0)
+.end
+
+=item type
+
+=cut
+
+.sub 'type' :method
+    $S0 = typeof self
+    $P0 = split ';', $S0
+    $S0 = pop $P0
+    $S0 = downcase $S0
+    .return ($S0)
+.end
+
+=item has_todo
+
+=cut
+
+.sub 'has_todo' :method
+    $P0 = getattribute self, 'directive'
+    unless null $P0 goto L1
+    .return (0)
+  L1:
+    $S0 = $P0
+    $I0 = $S0 == 'TODO'
+    .return ($I0)
+.end
+
+=item has_skip
+
+=cut
+
+.sub 'has_skip' :method
+    $P0 = getattribute self, 'directive'
+    unless null $P0 goto L1
+    .return (0)
+  L1:
+    $S0 = $P0
+    $I0 = $S0 == 'SKIP'
+    .return ($I0)
+.end
+
+=item has_directive
+
+=cut
+
+.sub 'has_directive' :method
+    $I0 = self.'has_todo'()
+    if $I0 goto L1
+    $I0 = self.'has_skip'()
+  L1:
+    .return ($I0)
+.end
+
+=back
+
+=head3 Class TAP;Parser;Result;Bailout
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Parser';'Result';'Bailout']
+
+.sub '' :init :load :anon
+    $P0 = subclass ['TAP';'Parser';'Result'], ['TAP';'Parser';'Result';'Bailout']
+.end
+
+=item bailout
+
+=cut
+
+.sub 'bailout' :method
+    $P0 = getattribute self, 'explanation'
+    .return ($P0)
+.end
+
+=back
+
+=head3 Class TAP;Parser;Result;Comment
+
+=cut
+
+.namespace ['TAP';'Parser';'Result';'Comment']
+
+.sub '' :init :load :anon
+    $P0 = subclass ['TAP';'Parser';'Result'], ['TAP';'Parser';'Result';'Comment']
+    $P0.'add_attribute'('comment')
+.end
+
+=head3 Class TAP;Parser;Result;Plan
+
+=cut
+
+.namespace ['TAP';'Parser';'Result';'Plan']
+
+.sub '' :init :load :anon
+    $P0 = subclass ['TAP';'Parser';'Result'], ['TAP';'Parser';'Result';'Plan']
+    $P0.'add_attribute'('plan')
+    $P0.'add_attribute'('tests_planned')
+.end
+
+=head3 Class TAP;Parser;Result;Test
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Parser';'Result';'Test']
+
+.sub '' :init :load :anon
+    $P0 = subclass ['TAP';'Parser';'Result'], ['TAP';'Parser';'Result';'Test']
+    $P0.'add_attribute'('ok')
+    $P0.'add_attribute'('test_num')
+    $P0.'add_attribute'('description')
+    $P0.'add_attribute'('unplanned')
+.end
+
+=item get_string
+
+=cut
+
+.sub 'get_string' :vtable :method
+    $P0 = getattribute self, 'ok'
+    $S0 = $P0
+    $S0 .= ' '
+    $P0 = getattribute self, 'test_num'
+    $S1 = $P0
+    $S0 .= $S1
+    $P0 = getattribute self, 'description'
+    if null $P0 goto L1
+    $S1 = $P0
+    if $S1 == '' goto L1
+    $S0 .= ' '
+    $S0 .= $S1
+  L1:
+    $P0 = getattribute self, 'directive'
+    if null $P0 goto L2
+    $S1 = $P0
+    if $S1 == '' goto L2
+    $S0 .= ' # '
+    $S0 .= $S1
+    $S0 .= ' '
+    $P0 = getattribute self, 'explanation'
+    if null $P0 goto L2
+    $S1 = $P0
+    $S0 .= $S1
+  L2:
+    .return ($S0)
+.end
+
+=item is_ok
+
+=cut
+
+.sub 'is_ok' :method
+    $P0 = getattribute self, 'unplanned'
+    if null $P0 goto L1
+    unless $P0 goto L1
+    .return (0)
+  L1:
+    $I0 = self.'has_todo'()
+    if $I0 goto L2
+    $I0 = self.'is_actual_ok'()
+  L2:
+    .return ($I0)
+.end
+
+=item is_actual_ok
+
+=cut
+
+.sub 'is_actual_ok' :method
+    $P0 = getattribute self, 'ok'
+    $S0 = $P0
+    $I0 = index $S0, 'not'
+    $I0 = $I0 != 0
+    .return ($I0)
+.end
+
+=item todo_passed
+
+=cut
+
+.sub 'todo_passed' :method
+    $I0 = self.'has_todo'()
+    unless $I0 goto L1
+    $I0 = self.'is_actual_ok'()
+  L1:
+    .return ($I0)
+.end
+
+=item is_unplanned
+
+=cut
+
+.sub 'is_unplanned' :method
+    $I0 = 0
+    $P0 = getattribute self, 'unplanned'
+    if null $P0 goto L1
+    $I0 = $P0
+  L1:
+    .return ($I0)
+.end
+
+=back
+
+=head3 Class TAP;Parser;Result;Unknown
+
+=cut
+
+.namespace ['TAP';'Parser';'Result';'Unknown']
+
+.sub '' :init :load :anon
+    $P0 = subclass ['TAP';'Parser';'Result'], ['TAP';'Parser';'Result';'Unknown']
+.end
+
+=head3 Class TAP;Parser;Result;Version
+
+=cut
+
+.namespace ['TAP';'Parser';'Result';'Version']
+
+.sub '' :init :load :anon
+    $P0 = subclass ['TAP';'Parser';'Result'], ['TAP';'Parser';'Result';'Version']
+    $P0.'add_attribute'('version')
+.end
+
+=head3 Class TAP;Parser;Grammar
+
+C<TAP;Parser;Grammar> tokenizes lines and constructs C<TAP;Parser;Result>
+subclasses to represent the tokens.
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Parser';'Grammar']
+
+.sub '' :init :load :anon
+    $P0 = newclass ['TAP';'Parser';'Grammar']
+.end
+
+.include 'cclass.pasm'
+
+.sub 'trim' :anon
+    .param string str
+    $I0 = length str
+    $I0 = find_not_cclass .CCLASS_WHITESPACE, str, 0, $I0
+    str = substr str, $I0
+    $I0 = length str
+  L1:
+    dec $I0
+    unless $I0 > 0 goto L2
+    $I1 = is_cclass .CCLASS_WHITESPACE, str, $I0
+    if $I1 != 0 goto L1
+  L2:
+    inc $I0
+    str = substr str, 0, $I0
+    .return (str)
+.end
+
+=item tokenize
+
+=cut
+
+.sub 'tokenize' :method
+    .param string line
+    .local pmc result
+    .local int pos, lastpos
+    .local string up, directive, explanation, ok
+    lastpos = length line
+
+    $I0 = index line, 'not ok'
+    unless $I0 == 0 goto L1
+    ok = 'not ok'
+    pos = 6
+    goto L2
+  L1:
+    $I0 = index line, 'ok'
+    unless $I0 == 0 goto L3
+    ok = 'ok'
+    pos = 2
+  L2:
+    .local string description, test_num
+    test_num = ''
+    description = ''
+    directive = ''
+    explanation = ''
+    if pos == lastpos goto L4
+    $I0 = is_cclass .CCLASS_WHITESPACE, line, pos
+    unless $I0 goto L3
+    pos = find_not_cclass .CCLASS_WHITESPACE, line, pos, lastpos
+    if pos == lastpos goto L4
+    $I0 = is_cclass .CCLASS_NUMERIC, line, pos
+    unless $I0 goto L5
+    $I2 = find_not_cclass .CCLASS_NUMERIC, line, pos, lastpos
+    if $I2 == lastpos goto L_5
+    $I0 = is_cclass .CCLASS_WHITESPACE, line, $I2
+    unless $I0 goto L5
+  L_5:
+    $I1 = $I2 - pos
+    test_num = substr line, pos, $I1
+    if $I2 == lastpos goto L4
+    pos = find_not_cclass .CCLASS_WHITESPACE, line, $I2, lastpos
+  L5:
+    $S0 = substr line, pos
+    description = trim($S0)
+    up = upcase description
+    lastpos = length description
+    pos = -1
+  L6:
+    inc pos
+    pos = index description, '#', pos
+    if pos < 0 goto L4
+    $I1 = pos - 1
+    $S0 = substr description, $I1, 1
+    inc pos
+    if $S0 == "\\" goto L6
+    if pos == lastpos goto L4
+    $I0 = is_cclass .CCLASS_WHITESPACE, description, pos
+    unless $I0 != 0 goto L7
+    pos = find_not_cclass .CCLASS_WHITESPACE, description, pos, lastpos
+    if pos == lastpos goto L4
+  L7:
+    $S0 = substr description, pos, 4
+    $I0 = index up, 'SKIP', pos
+    if $I0 == pos goto L8
+    $I0 = index up, 'TODO', pos
+    if $I0 == pos goto L8
+    goto L6
+  L8:
+    directive = substr up, pos, 4
+    $I1 = pos + 4
+    $S0 = substr description, $I1
+    explanation = trim($S0)
+    pos -= 2
+    $S0 = substr description, 0, pos
+    description = trim($S0)
+  L4:
+    result = new ['TAP';'Parser';'Result';'Test']
+    $P1 = box line
+    setattribute result, 'raw', $P1
+    $P1 = box ok
+    setattribute result, 'ok', $P1
+    unless test_num != '' goto L11
+    $I0 = test_num
+    $P1 = box test_num
+    setattribute result, 'test_num', $P1
+  L11:
+    unless description != '' goto L12
+    $P1 = box description
+    setattribute result, 'description', $P1
+  L12:
+    unless directive != '' goto L13
+    $P1 = box directive
+    setattribute result, 'directive', $P1
+  L13:
+    unless explanation != '' goto L14
+    $P1 = box explanation
+    setattribute result, 'explanation', $P1
+  L14:
+    .return (result)
+  L3:
+
+    $I0 = index line, '#'
+    unless $I0 == 0 goto L19
+    result = new ['TAP';'Parser';'Result';'Comment']
+    $P1 = box line
+    setattribute result, 'raw', $P1
+    $S0 = substr line, 1
+    $S0 = trim($S0)
+    $P1 = box $S0
+    setattribute result, 'comment', $P1
+    .return (result)
+  L19:
+
+    $I0 = index line, '1..'
+    unless $I0 == 0 goto L21
+    pos = 3
+    $I0 = is_cclass .CCLASS_NUMERIC, line, pos
+    unless $I0 goto L21
+    pos = find_not_cclass .CCLASS_NUMERIC, line, pos, lastpos
+    directive = ''
+    explanation = ''
+    .local string plan
+    plan = substr line, 0, pos
+    .local int tests_planned
+    $I1 = pos - 3
+    $S0 = substr line, 3, $I1
+    tests_planned = $S0
+    if pos == lastpos goto L22
+    $I0 = is_cclass .CCLASS_WHITESPACE, line, pos
+    unless $I0 goto L23
+    pos = find_not_cclass .CCLASS_WHITESPACE, line, pos, lastpos
+    if pos == lastpos goto L22
+  L23:
+    $S0 = substr line, pos, 1
+    unless $S0 == '#' goto L21
+    inc pos
+    $I0 = is_cclass .CCLASS_WHITESPACE, line, pos
+    unless $I0 goto L24
+    pos = find_not_cclass .CCLASS_WHITESPACE, line, pos, lastpos
+  L24:
+    up = upcase line
+    $I0 = index up, 'SKIP', pos
+    unless $I0 == pos goto L21
+    directive = 'SKIP'
+    pos += 4
+    $S0 = substr line, pos
+    explanation = trim($S0)
+  L22:
+    result = new ['TAP';'Parser';'Result';'Plan']
+    $P1 = box line
+    setattribute result, 'raw', $P1
+    $P1 = box plan
+    setattribute result, 'plan', $P1
+    $P1 = box tests_planned
+    setattribute result, 'tests_planned', $P1
+    unless tests_planned == 0 goto L25
+    directive = 'SKIP'
+  L25:
+    unless directive != '' goto L26
+    $P1 = box directive
+    setattribute result, 'directive', $P1
+  L26:
+    unless explanation != '' goto L27
+    $P1 = box explanation
+    setattribute result, 'explanation', $P1
+  L27:
+    .return (result)
+  L21:
+
+    $I0 = index line, 'Bail out!'
+    unless $I0 == 0 goto L31
+    result = new ['TAP';'Parser';'Result';'Bailout']
+    $P1 = box line
+    setattribute result, 'raw', $P1
+    $S0 = substr line, 9
+    $S0 = trim($S0)
+    $P1 = box $S0
+    setattribute result, 'explanation', $P1
+    .return (result)
+  L31:
+
+    $I0 = index line, 'TAP'
+    unless $I0 == 0 goto L41
+    pos = 3
+    $I0 = is_cclass .CCLASS_WHITESPACE, line, pos
+    unless $I0 goto L41
+    pos = find_not_cclass .CCLASS_WHITESPACE, line, pos, lastpos
+    $I0 = index line, 'version', pos
+    unless $I0 == pos goto L41
+    pos += 7
+    $I0 = is_cclass .CCLASS_WHITESPACE, line, pos
+    unless $I0 goto L41
+    pos = find_not_cclass .CCLASS_WHITESPACE, line, pos, lastpos
+    $I0 = is_cclass .CCLASS_NUMERIC, line, pos
+    unless $I0 goto L41
+    $I2 = find_not_cclass .CCLASS_NUMERIC, line, pos, lastpos
+    $I1 = $I2 - pos
+    $S0 = substr line, pos, $I1
+    .local int version
+    version = $S0
+    if $I2 == lastpos goto L42
+    $I0 = is_cclass .CCLASS_WHITESPACE, line, $I2
+    unless $I0 goto L41
+    $I0 = find_not_cclass .CCLASS_WHITESPACE, line, $I2, lastpos
+    unless $I0 == lastpos goto L41
+  L42:
+    result = new ['TAP';'Parser';'Result';'Version']
+    $P1 = box line
+    setattribute result, 'raw', $P1
+    $P1 = box version
+    setattribute result, 'version', $P1
+    .return (result)
+  L41:
+
+    result = new ['TAP';'Parser';'Result';'Unknown']
+    $P1 = box line
+    setattribute result, 'raw', $P1
+    .return (result)
+.end
+
+=back
+
+=head3 Class TAP;Base
+
+Base class that provides common functionality to C<TAP;Parser>
+and C<TAP;Harness> ie. callback support.
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Base']
+
+.sub '' :init :load :anon
+    $P0 = newclass ['TAP';'Base']
+    $P0.'add_attribute'('code_for')
+    $P0.'add_attribute'('ok_callbacks')
+.end
+
+=item callback
+
+=cut
+
+.sub 'callback' :method
+    .param string event
+    .param pmc callback
+    $P0 = getattribute self, 'ok_callbacks'
+    if null $P0 goto L1
+    $I0 = exists $P0[event]
+    if $I0 goto L1
+    $S0 = "Callback " . event
+    $S0 .= " is not supported."
+    die $S0
+  L1:
+    $P0 = getattribute self, 'code_for'
+    unless null $P0 goto L2
+    $P0 = new 'Hash'
+    setattribute self, 'code_for', $P0
+  L2:
+    $P0[event] = callback
+.end
+
+=item _has_callback
+
+=cut
+
+.sub '_has_callback' :method
+    $P0 = getattribute self, 'code_for'
+    if null $P0 goto L1
+    .return (1)
+  L1:
+    .return (0)
+.end
+
+=item _callback_for
+
+=cut
+
+.sub '_callback_for' :method
+    .param string event
+    null $P1
+    $P0 = getattribute self, 'code_for'
+    if null $P0 goto L1
+    $I0 = exists $P0[event]
+    unless $I0 goto L1
+    $P1 = $P0[event]
+  L1:
+    .return ($P1)
+.end
+
+=item _make_callback
+
+=cut
+
+.sub '_make_callback' :method
+    .param string event
+    .param pmc args :slurpy
+    $P0 = getattribute self, 'code_for'
+    if null $P0 goto L1
+    $I0 = exists $P0[event]
+    unless $I0 goto L1
+    $P0 = $P0[event]
+    $P0 = $P0(args :flat)
+    .return ($P0)
+  L1:
+    .return ()
+.end
+
+=back
+
+=head3 Class TAP;Parser
+
+C<TAP;Parser> is designed to produce a proper parse of TAP output.
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Parser']
+
+.sub '' :init :load :anon
+    load_bytecode 'osutils.pbc'
+
+    $P0 = subclass ['TAP';'Base'], ['TAP';'Parser']
+    $P0.'add_attribute'('stream')
+    $P0.'add_attribute'('skipped')
+    $P0.'add_attribute'('todo')
+    $P0.'add_attribute'('passed')
+    $P0.'add_attribute'('failed')
+    $P0.'add_attribute'('actual_failed')
+    $P0.'add_attribute'('actual_passed')
+    $P0.'add_attribute'('todo_passed')
+    $P0.'add_attribute'('parse_errors')
+    $P0.'add_attribute'('tests_run')
+    $P0.'add_attribute'('tests_planned')
+    $P0.'add_attribute'('plan')
+    $P0.'add_attribute'('good_plan')
+    $P0.'add_attribute'('skip_all')
+    $P0.'add_attribute'('version')
+    $P0.'add_attribute'('exit')
+    $P0.'add_attribute'('ignore_exit')
+    $P0.'add_attribute'('merge')
+    $P0.'add_attribute'('spool')
+    $P0.'add_attribute'('start_time')
+    $P0.'add_attribute'('end_time')
+
+    $P0 = _make_state_table()
+    set_global ['TAP';'Parser'], 'STATES', $P0
+
+    $P0 = new 'Hash'
+    $P1 = split ' ', 'test version plan comment bailout unknown ALL ELSE EOF'
+  L1:
+    unless $P1 goto L2
+    $S0 = shift $P1
+    $P0[$S0] = 1
+    goto L1
+  L2:
+    set_global ['TAP';'Parser'], 'LEGAL_CALLBACK', $P0
+.end
+
+.sub 'init' :vtable :init
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'skipped', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'todo', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'passed', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'failed', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'actual_failed', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'actual_passed', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'todo_passed', $P0
+    $P0 = new 'ResizableStringArray'
+    setattribute self, 'parse_errors', $P0
+    $P0 = box 0
+    setattribute self, 'tests_run', $P0
+    $P0 = get_global ['TAP';'Parser'], 'LEGAL_CALLBACK'
+    setattribute self, 'ok_callbacks', $P0
+.end
+
+=item start_time
+
+=cut
+
+.sub 'start_time' :method
+    $P0 = getattribute self, 'start_time'
+    .return ($P0)
+.end
+
+=item end_time
+
+=cut
+
+.sub 'end_time' :method
+    $P0 = getattribute self, 'end_time'
+    .return ($P0)
+.end
+
+=item skipped
+
+=cut
+
+.sub 'skipped' :method :nsentry
+    $P0 = getattribute self, 'skipped'
+    .return ($P0)
+.end
+
+=item todo
+
+=cut
+
+.sub 'todo' :method :nsentry
+    $P0 = getattribute self, 'todo'
+    .return ($P0)
+.end
+
+=item passed
+
+=cut
+
+.sub 'passed' :method :nsentry
+    $P0 = getattribute self, 'passed'
+    .return ($P0)
+.end
+
+=item failed
+
+=cut
+
+.sub 'failed' :method :nsentry
+    $P0 = getattribute self, 'failed'
+    .return ($P0)
+.end
+
+=item todo_passed
+
+=cut
+
+.sub 'todo_passed' :method :nsentry
+    $P0 = getattribute self, 'todo_passed'
+    .return ($P0)
+.end
+
+=item parse_errors
+
+=cut
+
+.sub 'parse_errors' :method :nsentry
+    $P0 = getattribute self, 'parse_errors'
+    .return ($P0)
+.end
+
+=item tests_run
+
+=cut
+
+.sub 'tests_run' :method :nsentry
+    $P0 = getattribute self, 'tests_run'
+    .return ($P0)
+.end
+
+=item tests_planned
+
+=cut
+
+.sub 'tests_planned' :method :nsentry
+    $P0 = getattribute self, 'tests_planned'
+    .return ($P0)
+.end
+
+=item merge
+
+=cut
+
+.sub 'merge' :method :nsentry
+    .param int val
+    $P0 = new 'Boolean'
+    set $P0, val
+    setattribute self, 'merge', $P0
+.end
+
+=item ignore_exit
+
+=cut
+
+.sub 'ignore_exit' :method :nsentry
+    .param int val
+    $P0 = new 'Boolean'
+    set $P0, val
+    setattribute self, 'ignore_exit', $P0
+.end
+
+=item exit
+
+=cut
+
+.sub 'exit' :method :nsentry
+    $P0 = getattribute self, 'ignore_exit'
+    if null $P0 goto L1
+    unless $P0 goto L1
+    .return (0)
+  L1:
+    $P0 = getattribute self, 'exit'
+    $I0 = 0
+    if null $P0 goto L2
+    $I0 = $P0
+  L2:
+    .return ($I0)
+.end
+
+=item has_problems
+
+=cut
+
+.sub 'has_problems' :method
+    $P0 = getattribute self, 'failed'
+    $I0 = elements $P0
+    if $I0 goto L1
+    $P0 = getattribute self, 'parse_errors'
+    $I0 = elements $P0
+    if $I0 goto L1
+    $P0 = getattribute self, 'ignore_exit'
+    if null $P0 goto L2
+    if $P0 goto L1
+  L2:
+    $P0 = getattribute self, 'exit'
+    if null $P0 goto L1
+    $I0 = $P0
+    .return ($I0)
+  L1:
+    .return ($I0)
+.end
+
+=item _add_error
+
+=cut
+
+.sub '_add_error' :method
+    .param pmc args :slurpy
+    $P0 = getattribute self, 'parse_errors'
+    $S0 = join '', args
+    $P1 = box $S0
+    push $P0, $P1
+.end
+
+=item is_good_plan
+
+=cut
+
+.sub 'is_good_plan' :method
+    $P0 = getattribute self, 'good_plan'
+    .return ($P0)
+.end
+
+=item spool
+
+=cut
+
+.sub 'spool' :method
+    .param pmc spool
+    setattribute self, 'spool', spool
+.end
+
+=item delete_spool
+
+=cut
+
+.sub 'delete_spool' :method
+    $P0 = getattribute self, 'spool'
+    null $P1
+    setattribute self, 'spool', $P1
+    .return ($P0)
+.end
+
+=item pragma
+
+=cut
+
+.sub 'pragma' :method
+    .param string name
+    .return (1)
+.end
+
+=item tap
+
+=cut
+
+.sub 'tap' :method
+    .param string tap
+    $P0 = new 'StringHandle'
+    $P0.'open'('tap', 'w')
+    print $P0, tap
+    setattribute self, 'stream', $P0
+.end
+
+=item file
+
+=cut
+
+.sub 'file' :method
+    .param string filename
+    $P0 = new 'FileHandle'
+    push_eh _handler
+    $P0.'open'(filename, 'r')
+    pop_eh
+    $S0 = readline $P0
+    $I0 = index $S0, '#!'
+    unless $I0 == 0 goto L1
+    close $P0
+    $S0 = _get_exec($S0)
+    .tailcall self.'exec'($S0, filename)
+  L1:
+    seek $P0, 0, 0
+    setattribute self, 'stream', $P0
+    .return ()
+  _handler:
+    .local pmc ex
+    .get_results (ex)
+    $S0 = "Can't open '"
+    $S0 .= filename
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    ex = $S0
+    rethrow ex
+.end
+
+.include 'iglobals.pasm'
+
+.sub '_get_exec' :anon
+    .param string line
+    $S0 = chomp(line)
+    $I0 = length $S0
+    $I0 = find_not_cclass .CCLASS_WHITESPACE, $S0, 2, $I0
+    $S0 = substr $S0, $I0
+    .local string slash
+    $P0 = getinterp
+    $P1 = $P0[.IGLOBALS_CONFIG_HASH]
+    slash = $P1['slash']
+    $P0 = split "/", $S0
+    $S0 = join slash, $P0
+    .return ($S0)
+.end
+
+=item exec
+
+=cut
+
+.sub 'exec' :method
+    .param pmc cmds :slurpy
+    .local string cmd
+    cmd = join ' ', cmds
+    $P0 = getattribute self, 'merge'
+    if null $P0 goto L1
+    unless $P0 goto L1
+    cmd .= ' 2>&1'
+  L1:
+    $P0 = new 'FileHandle'
+    push_eh _handler
+    $P0.'open'(cmd, 'pr')
+    pop_eh
+    setattribute self, 'stream', $P0
+    .return ()
+  _handler:
+    .local pmc ex
+    .get_results (ex)
+    $S0 = "Can't open '"
+    $S0 .= cmd
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    ex = $S0
+    rethrow ex
+.end
+
+=item run
+
+=cut
+
+.sub 'run' :method
+    .const 'Sub' $P0 = 'next'
+    $P0 = newclosure $P0
+  L1:
+    $P1 = $P0(self)
+    unless null $P1 goto L1
+.end
+
+=item next
+
+=cut
+
+.sub 'next' :method :nsentry :lex
+    .local pmc stream, spool
+    stream = getattribute self, 'stream'
+    if null stream goto L1
+    $N0 = time
+    $P0 = box $N0
+    setattribute self, 'start_time', $P0
+    .local pmc grammar, st
+    grammar = new ['TAP';'Parser';'Grammar']
+    .const 'Sub' $P0 = 'next_state'
+    capture_lex $P0
+    st = box 'INIT'
+    .lex 'state', st
+  L2:
+    $S0 = readline stream
+    if $S0 == '' goto L3
+    $S0 = chomp($S0)
+    .local pmc token
+    token = grammar.'tokenize'($S0)
+    self.'next_state'(token)
+    $S0 = token.'type'()
+    $P0 = self.'_callback_for'($S0)
+    if null $P0 goto L4
+    $P0(token)
+    goto L5
+  L4:
+    self.'_make_callback'('ELSE', token)
+  L5:
+    self.'_make_callback'('ALL', token)
+    spool = getattribute self, 'spool'
+    if null spool goto L6
+    $S0 = token
+    print spool, $S0
+    print spool, "\n"
+  L6:
+    .yield (token)
+    goto L2
+  L3:
+    close stream
+    $I0 = can stream, 'exit_status'
+    unless $I0 goto L7
+    $I0 = stream.'exit_status'()
+    unless $I0 goto L7
+    $P0 = box $I0
+    setattribute self, 'exit', $P0
+  L7:
+    self.'_finish'()
+    $I0 = self.'_make_callback'('EOF', self)
+    null $P0
+    .return ($P0)
+  L1:
+    die "no stream"
+.end
+
+.sub 'next_state' :method :lex :outer('next')
+    .param pmc token
+    .local pmc STATES, st
+    STATES = get_global ['TAP';'Parser'], 'STATES'
+    st = find_lex 'state'
+    .local string type
+    type = token.'type'()
+  REDO:
+    $I0 = STATES[st]
+    if $I0 goto L1
+    $S0 = st
+    $S0 = "Illegal state: " . $S0
+    die $S0
+  L1:
+    $P0 = STATES[st]
+    $I0 = exists $P0[type]
+    unless $I0 goto L2
+    $P1 = $P0[type]
+    $I0 = exists $P1['act']
+    unless $I0 goto L3
+    $P2 = $P1['act']
+    $P2(self, token)
+  L3:
+    $I0 = exists $P1['continue']
+    unless $I0 goto L4
+    $S0 = $P1['continue']
+    set st, $S0
+    goto REDO
+  L4:
+    $I0 = exists $P1['goto']
+    unless $I0 goto L5
+    $S0 = $P1['goto']
+    set st, $S0
+    goto L5
+  L2:
+    printerr "Unhandled token type: "
+    printerr type
+    printerr "\n"
+  L5:
+.end
+
+.sub '_make_state_table'
+    .local pmc states
+    states = new 'Hash'
+    $P0 = split ' ', 'INIT PLAN PLANNED PLANNED_AFTER_TEST GOT_PLAN UNPLANNED UNPLANNED_AFTER_TEST'
+    $P1 = split ' ', 'bailout comment plan test unknown version'
+  L1:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    .local pmc st
+    st = new 'Hash'
+    states[$S0] = st
+    $P2 = iter $P1
+  L3:
+    unless $P2 goto L4
+    $S0 = shift $P2
+    $P3 = new 'Hash'
+    st[$S0] = $P3
+    goto L3
+  L4:
+    $P3 = st['version']
+    $P4 = get_hll_global ['TAP';'Parser'], '_DEFAULT_version'
+    $P3['act'] = $P4
+    $P3 = st['unknown']
+    $P4 = get_hll_global ['TAP';'Parser'], '_DEFAULT_unknown'
+    $P3['act'] = $P4
+    $P3 = st['plan']
+    $P4 = get_hll_global ['TAP';'Parser'], '_DEFAULT_plan'
+    $P3['act'] = $P4
+    $P3 = st['test']
+    $P4 = get_hll_global ['TAP';'Parser'], '_DEFAULT_test'
+    $P3['act'] = $P4
+    goto L1
+  L2:
+
+    st = states['INIT']
+    $P0 = st['version']
+    $P1 = get_hll_global ['TAP';'Parser'], '_INIT_version'
+    $P0['act'] = $P1
+    $P0['goto'] = 'PLAN'
+    $P0 = st['plan']
+    $P0['goto'] = 'PLANNED'
+    $P0 = st['test']
+    $P0['goto'] = 'UNPLANNED'
+
+    st = states['PLAN']
+    $P0 = st['plan']
+    $P0['goto'] = 'PLANNED'
+    $P0 = st['test']
+    $P0['goto'] = 'UNPLANNED'
+
+    st = states['PLANNED']
+    $P0 = st['test']
+    $P0['goto'] = 'PLANNED_AFTER_TEST'
+    $P0 = st['plan']
+    $P1 = get_hll_global ['TAP';'Parser'], '_PLANNED_plan'
+    $P0['act'] = $P1
+
+    st = states['PLANNED_AFTER_TEST']
+    $P0 = st['test']
+    $P0['goto'] = 'PLANNED_AFTER_TEST'
+    $P0 = st['plan']
+    $P1 = get_hll_global ['TAP';'Parser'], '_no_action'
+    $P0['act'] = $P1
+    $P0['continue'] = 'PLANNED'
+
+    st = states['GOT_PLAN']
+    $P0 = st['test']
+    $P1 = get_hll_global ['TAP';'Parser'], '_GOT_PLAN_test'
+    $P0['act'] = $P1
+    $P0['continue'] = 'PLANNED'
+    $P0 = st['plan']
+    $P0['continue'] = 'PLANNED'
+
+    st = states['UNPLANNED']
+    $P0 = st['test']
+    $P0['goto'] = 'UNPLANNED_AFTER_TEST'
+    $P0 = st['plan']
+    $P0['goto'] = 'GOT_PLAN'
+
+    st = states['UNPLANNED_AFTER_TEST']
+    $P0 = st['test']
+    $P1 = get_hll_global ['TAP';'Parser'], '_no_action'
+    $P0['act'] = $P1
+    $P0['continue'] = 'UNPLANNED'
+    $P0 = st['plan']
+    $P1 = get_hll_global ['TAP';'Parser'], '_no_action'
+    $P0['act'] = $P1
+    $P0['continue'] = 'UNPLANNED'
+
+    .return (states)
+.end
+
+.sub '_no_action' :method :nsentry
+    .param pmc result
+    # nothing
+.end
+
+.sub '_DEFAULT_version' :method :nsentry
+    .param pmc result
+    self.'_add_error'('If TAP version is present it must be the first line of output')
+.end
+
+.sub '_DEFAULT_unknown' :method :nsentry
+    .param pmc result
+    $I0 = self.'pragma'('strict')
+    unless $I0 goto L1
+    $P0 = getattribute result, 'raw'
+    $S1 = $P0
+    self.'_add_error'('Unknown TAP token: "', $S1, '"')
+  L1:
+.end
+
+.sub '_DEFAULT_plan' :method :nsentry
+    .param pmc result
+    $P0 = getattribute result, 'tests_planned'
+    setattribute self, 'tests_planned', $P0
+    $P0 = getattribute result, 'plan'
+    setattribute self, 'plan', $P0
+    $I0 = result.'has_skip'()
+    unless $I0 goto L1
+    $S0 = '(no reason given)'
+    $P0 = getattribute result, 'explanation'
+    if null $P0 goto L2
+    $S0 = $P0
+  L2:
+    $P0 = box $S0
+    setattribute self, 'skip_all', $P0
+  L1:
+.end
+
+.sub '_DEFAULT_test' :method :nsentry
+    .param pmc result
+    $P0 = getattribute self, 'tests_run'
+    inc $P0
+    .local int tests_run
+    tests_run = $P0
+
+    $P0 = getattribute self, 'tests_planned'
+    if null $P0 goto L11
+    .local int tests_planned
+    tests_planned = $P0
+    unless tests_run > tests_planned goto L11
+    $P0 = new 'Boolean'
+    set $P0, 1
+    setattribute result, 'unplanned', $P0
+  L11:
+
+    $P0 = getattribute result, 'test_num'
+    if null $P0 goto L21
+    .local int number
+    number = $P0
+    unless number != tests_run goto L22
+    $S1 = number
+    $S2 = tests_run
+    self.'_add_error'("Tests out of sequence.  Found (", $S1, ") but expected (", $S2, ")")
+    goto L22
+  L21:
+    number = tests_run
+    $P0 = box number
+    setattribute result, 'test_num', $P0
+  L22:
+
+    $I0 = result.'has_todo'()
+    unless $I0 goto L31
+    $P0 = getattribute self, 'todo'
+    push $P0, number
+  L31:
+    $I0 = result.'todo_passed'()
+    unless $I0 goto L32
+    $P0 = getattribute self, 'todo_passed'
+    push $P0, number
+  L32:
+    $I0 = result.'has_skip'()
+    unless $I0 goto L33
+    $P0 = getattribute self, 'skipped'
+    push $P0, number
+  L33:
+    $I0 = result.'is_ok'()
+    unless $I0 goto L34
+    $P0 = getattribute self, 'passed'
+    push $P0, number
+    goto L35
+  L34:
+    $P0 = getattribute self, 'failed'
+    push $P0, number
+  L35:
+    $I0 = result.'is_actual_ok'()
+    unless $I0 goto L36
+    $P0 = getattribute self, 'actual_passed'
+    push $P0, number
+    goto L37
+  L36:
+    $P0 = getattribute self, 'actual_failed'
+    push $P0, number
+  L37:
+.end
+
+.sub '_INIT_version' :method :nsentry
+    .param pmc result
+    $P0 = getattribute result, 'version'
+    setattribute self, 'version', $P0
+.end
+
+.sub '_PLANNED_plan' :method :nsentry
+    .param pmc result
+    self.'_add_error'('More than one plan found in TAP output')
+.end
+
+.sub '_GOT_PLAN_test' :method :nsentry
+    .param pmc result
+    $P0 = getattribute self, 'plan'
+    $S1 = $P0
+    self.'_add_error'("Plan (", $S1, ") must be at the beginning or end of the TAP output")
+    self.'is_good_plan'(0)
+.end
+
+.sub '_finish' :method
+    $N0 = time
+    $P0 = box $N0
+    setattribute self, 'end_time', $P0
+
+    $P0 = getattribute self, 'plan'
+    unless null $P0 goto L1
+    self.'_add_error'('No plan found in TAP output')
+    goto L2
+  L1:
+    $P0 = getattribute self, 'good_plan'
+    unless null $P0 goto L2
+    $P0 = box 1
+    setattribute self, 'good_plan', $P0
+  L2:
+
+    .local int tests_run, tests_planned
+    $P0 = getattribute self, 'tests_run'
+    tests_run = $P0
+    tests_planned = 0
+    $P0 = getattribute self, 'tests_planned'
+    if null $P0 goto L3
+    tests_planned = $P0
+  L3:
+    unless tests_run != tests_planned goto L4
+    $P0 = box 0
+    setattribute self, 'good_plan', $P0
+    if tests_planned == 0 goto L4
+    $S1 = tests_planned
+    $S2 = tests_run
+    self.'_add_error'("Bad plan.  You planned ", $S1, " tests but ran ", $S2, ".")
+  L4:
+
+    $P0 = getattribute self, 'good_plan'
+    unless null $P0 goto L5
+    $P0 = box 0
+    setattribute self, 'good_plan', $P0
+  L5:
+.end
+
+=back
+
+=head3 Class TAP;Parser;Aggregator
+
+C<TAP;Parser;Aggregator> collects parser objects and allows
+reporting/querying their aggregate results.
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Parser';'Aggregator']
+
+.sub '' :init :load :anon
+    $P0 = newclass ['TAP';'Parser';'Aggregator']
+    $P0.'add_attribute'('parser_for')
+    $P0.'add_attribute'('parse_order')
+    $P0.'add_attribute'('start_time')
+    $P0.'add_attribute'('end_time')
+    $P0.'add_attribute'('failed')
+    $P0.'add_attribute'('parse_errors')
+    $P0.'add_attribute'('passed')
+    $P0.'add_attribute'('skipped')
+    $P0.'add_attribute'('todo')
+    $P0.'add_attribute'('todo_passed')
+    $P0.'add_attribute'('total')
+    $P0.'add_attribute'('planned')
+    $P0.'add_attribute'('exit')
+    $P0.'add_attribute'('description_for_failed')
+    $P0.'add_attribute'('description_for_parse_errors')
+    $P0.'add_attribute'('description_for_passed')
+    $P0.'add_attribute'('description_for_skipped')
+    $P0.'add_attribute'('description_for_todo')
+    $P0.'add_attribute'('description_for_todo_passed')
+    $P0.'add_attribute'('description_for_planned')
+    $P0.'add_attribute'('description_for_exit')
+
+    $P0 = new 'Hash'
+    $P1 = get_hll_global ['TAP';'Parser'], 'failed'
+    $P0['failed'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'parse_errors'
+    $P0['parse_errors'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'passed'
+    $P0['passed'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'skipped'
+    $P0['skipped'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'todo'
+    $P0['todo'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'todo_passed'
+    $P0['todo_passed'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'tests_run'
+    $P0['total'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'tests_planned'
+    $P0['planned'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'exit'
+    $P0['exit'] = $P1
+    set_global ['TAP';'Parser';'Aggregator'], 'SUMMARY_METHOD_FOR', $P0
+.end
+
+.sub 'init' :vtable :method
+    $P0 = new 'Hash'
+    setattribute self, 'parser_for', $P0
+    $P0 = new 'ResizableStringArray'
+    setattribute self, 'parse_order', $P0
+    .local pmc SUMMARY_METHOD_FOR
+    SUMMARY_METHOD_FOR = get_global ['TAP';'Parser';'Aggregator'], 'SUMMARY_METHOD_FOR'
+    $P0 = iter SUMMARY_METHOD_FOR
+  L1:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    $P1 = box 0
+    setattribute self, $S0, $P1
+    if $S0 == 'total' goto L1
+    $S0 = 'description_for_' . $S0
+    $P1 = new 'ResizableStringArray'
+    setattribute self, $S0, $P1
+    goto L1
+  L2:
+.end
+
+=item add
+
+=cut
+
+.sub 'add' :method
+    .param string description
+    .param pmc parser
+    .local pmc parser_for
+    parser_for = getattribute self, 'parser_for'
+    $I0 = exists parser_for[description]
+    unless $I0 goto L1
+    $S0 = "You already have a parser for (" . description
+    $S0 .= "). Perhaps you have run the same test twice.\n"
+    die $S0
+  L1:
+    parser_for[description] = parser
+    .local pmc parse_order
+    parse_order = getattribute self, 'parse_order'
+    push parse_order, description
+    .local pmc SUMMARY_METHOD_FOR
+    SUMMARY_METHOD_FOR = get_global ['TAP';'Parser';'Aggregator'], 'SUMMARY_METHOD_FOR'
+    $P0 = iter SUMMARY_METHOD_FOR
+  L2:
+    unless $P0 goto L3
+    .local string summary
+    summary = shift $P0
+    .local pmc method
+    method = SUMMARY_METHOD_FOR[summary]
+    .local int count
+    count = method(parser)
+    unless count > 0 goto L2
+    $P1 = getattribute self, summary
+    $P1 += count
+    if summary == 'total' goto L2
+    $S0 = 'description_for_' . summary
+    $P1 = getattribute self, $S0
+    push $P1, description
+    goto L2
+  L3:
+.end
+
+=item parsers
+
+=cut
+
+.sub 'parsers' :method
+    .param string desc
+    $P0 = getattribute self, 'parser_for'
+    $P1 = $P0[desc]
+    .return ($P1)
+.end
+
+=item total
+
+=cut
+
+.sub 'total' :method
+    $P0 = getattribute self, 'total'
+    $I0 = $P0
+    .return ($I0)
+.end
+
+=item passed
+
+=cut
+
+.sub 'passed' :method
+    $P0 = getattribute self, 'passed'
+    $I0 = $P0
+    .return ($I0)
+.end
+
+=item descriptions
+
+=cut
+
+.sub 'descriptions' :method
+    $P0 = getattribute self, 'parse_order'
+    .return ($P0)
+.end
+
+=item start
+
+=cut
+
+.sub 'start' :method
+    $N0 = time
+    $P0 = box $N0
+    setattribute self, 'start_time', $P0
+.end
+
+=item stop
+
+=cut
+
+.sub 'stop' :method
+    $N0 = time
+    $P0 = box $N0
+    setattribute self, 'end_time', $P0
+.end
+
+=item start_time
+
+=cut
+
+.sub 'start_time' :method
+    $P0= getattribute self, 'start_time'
+    .return ($P0)
+.end
+
+=item en_time
+
+=cut
+
+.sub 'end_time' :method
+    $P0= getattribute self, 'end_time'
+    .return ($P0)
+.end
+
+=item elapsed
+
+=cut
+
+.sub 'elapsed' :method
+    $P0 = getattribute self, 'end_time'
+    if null $P0 goto L1
+    $N2 = $P0
+    $P0 = getattribute self, 'start_time'
+    if null $P0 goto L1
+    $N1 = $P0
+    $N0 = $N2 - $N1
+    .return ($N0)
+  L1:
+    die "Can't call elapsed without first calling start and then stop"
+.end
+
+=item elapsed_timestr
+
+=cut
+
+.sub 'elapsed_timestr' :method
+    $N0 = self.'elapsed'()
+    $P0 = new 'FixedPMCArray'
+    $P0 = 1
+    $P0[0] = $N0
+    $S0 = sprintf "%.3f wallclock secs", $P0
+    .return ($S0)
+.end
+
+=item has_problems
+
+=cut
+
+.sub 'has_problems' :method
+    $P0 = getattribute self, 'todo_passed'
+    $I0 = $P0
+    if $I0 goto L1
+    $I0 = self.'has_errors'()
+  L1:
+    .return ($I0)
+.end
+
+=item has_errors
+
+=cut
+
+.sub 'has_errors' :method
+    $P0 = getattribute self, 'failed'
+    $I0 = $P0
+    if $I0 goto L1
+    $P0 = getattribute self, 'parse_errors'
+    $I0 = $P0
+    if $I0 goto L1
+    $P0 = getattribute self, 'exit'
+    $I0 = $P0
+  L1:
+    .return ($I0)
+.end
+
+=item get_status
+
+=cut
+
+.sub 'get_status' :method
+    .local int total, passed
+    $P0 = getattribute self, 'total'
+    total = $P0
+    $P0 = getattribute self, 'passed'
+    passed = $P0
+    $I0 = self.'has_errors'()
+    if $I0 goto L1
+    if total == passed goto L2
+  L1:
+    .return ('FAIL')
+  L2:
+    unless total goto L3
+    .return ('PASS')
+  L3:
+    .return ('NOTESTS')
+.end
+
+=item all_passed
+
+=cut
+
+.sub 'all_passed' :method
+    .local int total
+    $P0 = getattribute self, 'total'
+    total = $P0
+    unless total goto L1
+    $P0 = getattribute self, 'passed'
+    $I0 = $P0
+    unless total == $I0 goto L1
+    $I0 = self.'has_errors'()
+    $I0 = not $I0
+    .return ($I0)
+  L1:
+    .return (0)
+.end
+
+=back
+
+=head1 AUTHOR
+
+Francois Perrad
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/runtime/parrot/library/Test/Builder/Test.pir
==============================================================================
--- branches/avl_string_cache/runtime/parrot/library/Test/Builder/Test.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/runtime/parrot/library/Test/Builder/Test.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -323,30 +323,32 @@
 
 .sub report :method
     .local pmc    passed
-    .local pmc    description
+    .local pmc    reason
     .local pmc    number
     .local string report
-    .local string number_string
-    .local string desc_string
 
     passed        = self.'passed'()
     number        = self.'number'()
-    description   = self.'description'()
     report        = ''
-    number_string = number
-    desc_string   = description
 
     if passed goto PASSED
     report      = 'not '
 
   PASSED:
     concat report, 'ok '
-    concat report, number_string
-    concat report, ' # TODO'
-
-    unless description goto REPORT
-    concat report, ' '
-    concat report, desc_string
+    $S0 = number
+    concat report, $S0
+    concat report, ' # TODO '
+
+    $S0 = self.'reason'()
+    concat report, $S0
+
+    if passed goto REPORT
+    # Build long explanation why
+    report .= "\n\tFailed (TODO) test '"
+    $S0     = self.'description'()
+    report .= $S0
+    report .= "'"
 
   REPORT:
     .return( report )

Modified: branches/avl_string_cache/runtime/parrot/library/distutils.pir
==============================================================================
--- branches/avl_string_cache/runtime/parrot/library/distutils.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/runtime/parrot/library/distutils.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -96,14 +96,6 @@
 
 =over 4
 
-=item prove (in step 'test')
-
-core module Test-Harness
-
-=item prove --archive (in step 'smoke')
-
-module TAP-Harness-Archive
-
 =item pod2html
 
 core module Pod-Html
@@ -120,9 +112,11 @@
 
 =item glob (in step 'manifest' & 'sdist')
 
-PGE::Glob
+PGE/Glob.pbc
 
-Limitation: currently, OS.'readdir' is dummy with MSVC.
+=item tempdir (in step 'smoke')
+
+Math/Rand.pbc
 
 =back
 
@@ -132,7 +126,7 @@
 
 =item smoke
 
-curl
+tar, gzip, curl
 
 =item sdist_gztar
 
@@ -199,6 +193,7 @@
 =cut
 
 .sub '__onload' :load :init :anon
+    load_bytecode 'osutils.pbc'
     $P0 = new 'Hash'
     set_global '%step', $P0
 
@@ -999,10 +994,7 @@
     .local string bin, pbc
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = $S0 . exe
+    $S1 = _mk_path_exe(pbc, exe)
     $I0 = newer($S1, pbc)
     if $I0 goto L1
     .local string cmd
@@ -1015,6 +1007,16 @@
     .tailcall run_jobs(jobs)
 .end
 
+.sub '_mk_path_exe' :anon
+    .param string pbcname
+    .param string exe
+    $I0 = length pbcname
+    $I0 -= 4
+    $S0 = substr pbcname, 0, $I0
+    $S1 = $S0 . exe
+    .return ($S1)
+.end
+
 =item installable_pbc
 
 hash
@@ -1048,11 +1050,7 @@
     .local string bin, pbc
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = "installable_" . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     $I0 = newer($S1, pbc)
     if $I0 goto L1
     .local string cmd
@@ -1070,6 +1068,21 @@
     .tailcall run_jobs(jobs)
 .end
 
+.sub '_mk_path_installable' :anon
+    .param string pbcname
+    .param string exe
+    $P0 = split '/', pbcname
+    $S0 = $P0[-1]
+    $I0 = length $S0
+    $I0 -= 4
+    $S0 = substr $S0, 0, $I0
+    $S1 = "installable_" . $S0
+    $S1 .= exe
+    $P0[-1] = $S1
+    $S1 = join '/', $P0
+    .return ($S1)
+.end
+
 .sub '_has_strip' :anon
     .param string cflags        :optional
     .param int has_cflags       :opt_flag
@@ -1351,10 +1364,6 @@
     pmc2c .= " "
     $S0 = get_tool('build/pmc2c.pl')
     pmc2c .= $S0
-    $S0 = config['osname']
-    unless $S0 == 'solaris' goto L1
-    pmc2c .= " --no-lines"
-  L1:
     .local string pmc2c_includes
     pmc2c_includes = "--include "
     $S0 = get_srcdir()
@@ -1403,10 +1412,6 @@
     cmd .= " "
     $S0 = get_tool('build/pmc2c.pl')
     cmd .= $S0
-    $S0 = config['osname']
-    unless $S0 == 'solaris' goto L0
-    cmd .= " --no-lines"
-  L0:
     cmd .= " --library "
     $S0 = dirname(src)
     cmd .= $S0
@@ -1735,14 +1740,11 @@
     unless $P0 goto L2
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = $S0 . exe
+    $S1 = _mk_path_exe(pbc, exe)
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . '.c'
+    $S1 = _mk_path_exe(pbc, '.c')
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . obj
+    $S1 = _mk_path_exe(pbc, obj)
     unlink($S1, 1 :named('verbose'))
     goto L1
   L2:
@@ -1771,15 +1773,11 @@
     unless $P0 goto L2
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = 'installable_' . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . '.c'
+    $S1 = _mk_path_exe(pbc, '.c')
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . obj
+    $S1 = _mk_path_exe(pbc, obj)
     unlink($S1, 1 :named('verbose'))
     goto L1
   L2:
@@ -2042,72 +2040,13 @@
 
 =head3 Step test
 
-If t/harness exists, run : t/harness
-
-If parrot-tapir exists, run it with t/*.t
-
-Else run : prove t/*.t
-
-=cut
-
-.sub '_test' :anon
-    .param pmc kv :slurpy :named
-    run_step('build', kv :flat :named)
-    $I0 = file_exists('t/harness')
-    unless $I0 goto L1
-    .tailcall _test_harness(kv :flat :named)
-  L1:
-    $S0 = get_executable('parrot-tapir')
-    $I0 = file_exists($S0)
-    unless $I0 goto L2
-    .tailcall _test_tapir($S0, kv :flat :named)
-  L2:
-    .tailcall _test_prove(kv :flat :named)
-.end
-
 =over 4
 
-=item harness_exec
-
-the default value is with perl
-
-=item harness_options
-
-the default value is empty
-
-=item harness_files
-
-the default value is "t/*.t"
-
-=cut
-
-.sub '_test_harness' :anon
-    .param pmc kv :slurpy :named
-    .local string cmd
-    $I0 = exists kv['harness_exec']
-    unless $I0 goto L1
-    cmd = kv['harness_exec']
-    goto L2
-  L1:
-    cmd = "perl -I"
-    $S0 = get_libdir()
-    cmd .= $S0
-    cmd .= "/tools/lib"
-  L2:
-    cmd .= " t/harness "
-    $S0 = get_value('harness_options', '' :named('default'), kv :flat :named)
-    cmd .= $S0
-    cmd .= " "
-    $S0 = get_value('harness_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
-.end
-
-=item prove_exec
+=item prove_exec / test_exec
 
-option --exec of prove
+option --exec of prove / tapir
 
-=item prove_files
+=item prove_files / test_files
 
 the default value is "t/*.t"
 
@@ -2115,113 +2054,78 @@
 
 =cut
 
-.sub '_test_prove' :anon
+.sub '_test' :anon
     .param pmc kv :slurpy :named
-    .local string cmd
-    cmd = "prove"
-    $I0 = exists kv['prove_exec']
-    unless $I0 goto L1
-    $S0 = get_prove_version()
-    $S0 = substr $S0, 0, 1
-    unless $S0 == "3" goto L3
-    cmd .= " --exec="
-    goto L4
-  L3:
-    cmd .= " --perl="
-  L4:
-    $S0 = kv['prove_exec']
-    $I0 = index $S0, ' '
-    if $I0 < 0 goto L2
-    cmd .= "\""
-  L2:
-    cmd .= $S0
-    if $I0 < 0 goto L1
-    cmd .= "\""
-  L1:
-    cmd .= " "
-    $S0 = get_value('prove_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
-.end
-
-.sub 'get_prove_version' :anon
-    $P0 = open 'prove --version', 'rp'
-    $S0 = $P0.'readline'()
-    $P0.'close'()
-    $I1 = index $S0, "Test::Harness v"
-    $I1 += 15
-    $I2 = index $S0, " ", $I1
-    $I3 = $I2 - $I1
-    $S0 = substr $S0, $I1, $I3
-    .return ($S0)
-.end
+    run_step('build', kv :flat :named)
 
-.sub '_test_tapir' :anon
-    .param string tapir
-    .param pmc kv :slurpy :named
-    .local string cmd
-    cmd = tapir
+    load_bytecode 'TAP/Harness.pbc'
+    .local pmc opts, files, harness, aggregate
+    opts = new 'Hash'
     $I0 = exists kv['prove_exec']
     unless $I0 goto L1
-    cmd .= " --exec="
     $S0 = kv['prove_exec']
-    $I0 = index $S0, ' '
-    if $I0 < 0 goto L2
-    cmd .= "\""
-  L2:
-    cmd .= $S0
-    if $I0 < 0 goto L1
-    cmd .= "\""
+    opts['exec'] = $S0
   L1:
-    cmd .= " "
-    $S0 = get_value('prove_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
+    $I0 = exists kv['test_exec']
+    unless $I0 goto L2
+    $S0 = kv['test_exec']
+    opts['exec'] = $S0
+  L2:
+    $S0 = "t/*.t"
+    $I0 = exists kv['prove_files']
+    unless $I0 goto L3
+    $S0 = kv['prove_files']
+  L3:
+    $I0 = exists kv['test_files']
+    unless $I0 goto L4
+    $S0 = kv['test_files']
+  L4:
+    $P0 = glob($S0)
+    files = sort_strings($P0)
+    harness = new ['TAP';'Harness']
+    harness.'process_args'(opts)
+    aggregate = harness.'runtests'(files)
+    $I0 = aggregate.'has_errors'()
+    unless $I0 goto L5
+    die "test fails"
+  L5:
 .end
 
-=head3 Step smoke
-
-Unless t/harness exists, run : prove --archive t/*.t
-
-=cut
-
-.sub '_smoke' :anon
-    .param pmc kv :slurpy :named
-    run_step('build', kv :flat :named)
-    $I0 = file_exists('t/harness')
-    if $I0 goto L1
-    $S0 = get_prove_version()
-    $S0 = substr $S0, 0, 1
-    unless $S0 == "3" goto L2
-    .tailcall _smoke_prove(kv :flat :named)
-  L2:
-    die "Require Test::Harness v3.x (option --archive)."
+.sub 'sort_strings'
+    .param pmc array
+    # currently, FixedStringArray hasn't the method sort.
+    # see TT #1356
+    $I0 = elements array
+    $P0 = new 'FixedPMCArray'
+    set $P0, $I0
+    $I0 = 0
+    $P1 = iter array
   L1:
-    .tailcall _smoke_harness(kv :flat :named)
+    unless $P1 goto L2
+    $S0 = shift $P1
+    $P0[$I0] = $S0
+    inc $I0
+    goto L1
+  L2:
+    $P0.'sort'()
+    .return ($P0)
 .end
 
-.sub '_clean_smoke' :anon
-    .param pmc kv :slurpy :named
-    $S0 = get_value('prove_archive', "report.tar.gz" :named('default'), kv :flat :named)
-    unlink($S0, 1 :named('verbose'))
-    $S0 = get_value('harness_archive', "report.tar.gz" :named('default'), kv :flat :named)
-    unlink($S0, 1 :named('verbose'))
-    unlink('meta.yml', 1 :named('verbose'))
-.end
+=head3 Step smoke
 
 =over 4
 
-=item prove_exec
+=item prove_exec / test_exec
 
 option --exec of prove
 
-=item prove_files
+=item prove_files / test_files
 
 the default value is "t/*.t"
 
-=item prove_archive
+=item prove_archive / smolder_archive
 
-option --archive of prove
+option --archive of prove / tapir
 
 the default value is report.tar.gz
 
@@ -2241,80 +2145,60 @@
 
 a hash
 
+=back
+
 =cut
 
-.sub '_smoke_prove' :anon
+.sub '_smoke' :anon
     .param pmc kv :slurpy :named
-    .local string cmd
-    cmd = "prove"
+    run_step('build', kv :flat :named)
+
+    load_bytecode 'TAP/Harness.pbc'
+    .local pmc opts, files, harness, aggregate
+    opts = new 'Hash'
     $I0 = exists kv['prove_exec']
     unless $I0 goto L1
-    cmd .= " --exec="
     $S0 = kv['prove_exec']
-    $I0 = index $S0, ' '
-    if $I0 < 0 goto L2
-    cmd .= "\""
-  L2:
-    cmd .= $S0
-    if $I0 < 0 goto L1
-    cmd .= "\""
+    opts['exec'] = $S0
   L1:
-    cmd .= " "
-    $S0 = get_value('prove_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    cmd .= " --archive="
+    $I0 = exists kv['test_exec']
+    unless $I0 goto L2
+    $S0 = kv['test_exec']
+    opts['exec'] = $S0
+  L2:
+    $S0 = "t/*.t"
+    $I0 = exists kv['prove_files']
+    unless $I0 goto L3
+    $S0 = kv['prove_files']
+  L3:
+    $I0 = exists kv['test_files']
+    unless $I0 goto L4
+    $S0 = kv['test_files']
+  L4:
+    $P0 = glob($S0)
+    files = sort_strings($P0)
+    harness = new ['TAP';'Harness';'Archive']
+    harness.'process_args'(opts)
     .local string archive
+    archive = "report.tar.gz"
+    $I0 = exists kv['prove_archive']
+    unless $I0 goto L5
+    archive = kv['prove_archive']
+  L5:
+    $I0 = exists kv['smolder_archive']
+    unless $I0 goto L6
+    archive = kv['smolder_archive']
+  L6:
     archive = get_value('prove_archive', "report.tar.gz" :named('default'), kv :flat :named)
-    cmd .= archive
-    system(cmd, 1 :named('verbose'), 1 :named('ignore_error'))
-
-    add_extra_properties(archive, kv :flat :named)
-    smolder_post(archive, kv :flat :named)
-.end
-
-.sub 'add_extra_properties' :anon
-    .param string archive
-    .param pmc kv :slurpy :named
-    .local string cmd
+    harness.'archive'(archive)
     $I0 = exists kv['smolder_extra_properties']
-    unless $I0 goto L1
-    system('perl -MExtUtils::Command -e rm_rf tmp')
-    cmd = "mkdir tmp && cd tmp && tar xzf ../"
-    cmd .= archive
-    system(cmd, 1 :named('verbose'))
-
+    unless $I0 goto L7
     $P0 = kv['smolder_extra_properties']
-    $S0 = mk_extra_properties($P0)
-    say "append extra properties"
-    append('tmp/meta.yml', $S0)
-
-    unlink(archive)
-    cmd = "cd tmp && tar czf ../"
-    cmd .= archive
-    cmd .= " *"
-    system(cmd, 1 :named('verbose'))
-    system('perl -MExtUtils::Command -e rm_rf tmp')
-  L1:
-.end
+    harness.'extra_props'($P0)
+  L7:
+    aggregate = harness.'runtests'(files)
 
-.sub 'mk_extra_properties' :anon
-    .param pmc hash
-    $S0 = "extra_properties:\n"
-    $P0 = iter hash
-  L1:
-    unless $P0 goto L2
-    .local string key, value
-    key = shift $P0
-    value = hash[key]
-    if value == '' goto L1
-    $S0 .= "  "
-    $S0 .= key
-    $S0 .= ": "
-    $S0 .= value
-    $S0 .= "\n"
-    goto L1
-  L2:
-    .return ($S0)
+    smolder_post(archive, kv :flat :named)
 .end
 
 .sub 'smolder_post' :anon
@@ -2357,53 +2241,12 @@
   L1:
 .end
 
-=item harness_exec
-
-the default value is with perl
-
-=item harness_options
-
-the default value is empty
-
-=item harness_archive
-
-the default value is report.tar.gz
-
-=item harness_files
-
-the default value is "t/*.t"
-
-=back
-
-=cut
-
-.sub '_smoke_harness' :anon
+.sub '_clean_smoke' :anon
     .param pmc kv :slurpy :named
-    .local string cmd
-    $I0 = exists kv['harness_exec']
-    unless $I0 goto L1
-    cmd = kv['harness_exec']
-    goto L2
-  L1:
-    cmd = "perl -I"
-    $S0 = get_libdir()
-    cmd .= $S0
-    cmd .= "/tools/lib"
-  L2:
-    cmd .= " t/harness "
-    $S0 = get_value('harness_options', '' :named('default'), kv :flat :named)
-    cmd .= $S0
-    cmd .= " --archive="
-    .local string archive
-    archive = get_value('harness_archive', "report.tar.gz" :named('default'), kv :flat :named)
-    cmd .= archive
-    cmd .= " "
-    $S0 = get_value('harness_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'), 1 :named('ignore_error'))
-
-    add_extra_properties(archive, kv :flat :named)
-    smolder_post(archive, kv :flat :named)
+    $S0 = get_value('prove_archive', "report.tar.gz" :named('default'), kv :flat :named)
+    unlink($S0, 1 :named('verbose'))
+    $S0 = get_value('smolder_archive', "report.tar.gz" :named('default'), kv :flat :named)
+    unlink($S0, 1 :named('verbose'))
 .end
 
 =head3 Step install
@@ -2564,7 +2407,12 @@
     $I0 = does array, 'array'
     if $I0 goto L1
     $S0 = array
-    $S2 = $S1 . $S0
+    $S3 = $S0
+    $S2 = $S1 . $S3
+    $I0 = index $S0, "build/"
+    unless $I0 == 0 goto L0
+    $S3 = substr $S0, 6
+  L0:
     files[$S2] = $S0
     goto L2
   L1:
@@ -2572,7 +2420,12 @@
   L3:
     unless $P0 goto L2
     $S0 = shift $P0
-    $S2 = $S1 . $S0
+    $S3 = $S0
+    $I0 = index $S0, "build/"
+    unless $I0 == 0 goto L4
+    $S3 = substr $S0, 6
+  L4:
+    $S2 = $S1 . $S3
     files[$S2] = $S0
     goto L3
   L2:
@@ -2611,11 +2464,7 @@
     unless $P0 goto L2
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = 'installable_' . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     $S2 = bindir . '/'
     $S2 .= bin
     $S2 .= exe
@@ -2904,7 +2753,7 @@
         "requires"     : {
             "fetch"    : ["%s"],
             "build"    : [],
-            "test"     : ["perl5"],
+            "test"     : [],
             "install"  : [],
             "runtime"  : []
         }
@@ -4156,11 +4005,7 @@
     unless $P1 goto L1
     bin = shift $P1
     pbc = $P0[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = 'installable_' . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     $S2 = bin . exe
     $I0 = newer($S2, $S1)
     if $I0 goto L2
@@ -4831,662 +4676,6 @@
 
 =back
 
-=head2 OS Utilities
-
-=over 4
-
-=item system
-
-=cut
-
-.sub 'system'
-    .param string cmd
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    .param int ignore_error     :named('ignore_error') :optional
-    .param int has_ignore_error :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    say cmd
-  L1:
-    $I0 = spawnw cmd
-    unless $I0 goto L2
-    unless has_ignore_error goto L3
-    if ignore_error goto L2
-  L3:
-    $S0 = "exit status: "
-    $S1 = $I0
-    $S0 .= $S1
-    $S0 .= "\ncommand: "
-    $S0 .= cmd
-    $S0 .= "\n"
-    die $S0
-  L2:
-    .return ($I0)
-.end
-
-.include 'stat.pasm'
-
-.sub 'file_exists'
-    .param string filename
-    $I0 = stat filename, .STAT_EXISTS
-    .return ($I0)
-.end
-
-=item newer
-
-=cut
-
-.sub 'newer' :multi(string, pmc)
-    .param string target
-    .param pmc depends
-    $I0 = does depends, 'array'
-    if $I0 goto L1
-    $S0 = depends
-    .tailcall newer(target, $S0)
-  L1:
-    $I0 = stat target, .STAT_EXISTS
-    unless $I0 goto L2
-    $I0 = stat target, .STAT_FILESIZE
-    unless $I0 goto L2
-    goto L3
-  L2:
-    .return (0)
-  L3:
-    $I0 = stat target, .STAT_MODIFYTIME
-    $P0 = iter depends
-  L4:
-    unless $P0 goto L5
-    $S0 = shift $P0
-    if $S0 == '' goto L4
-    $I1 = stat $S0, .STAT_MODIFYTIME
-    if $I1 < $I0 goto L4
-    .return (0)
-  L5:
-    .return (1)
-.end
-
-.sub 'newer' :multi(string, string)
-    .param string target
-    .param string depend
-    $I0 = stat target, .STAT_EXISTS
-    unless $I0 goto L1
-    $I0 = stat target, .STAT_FILESIZE
-    unless $I0 goto L1
-    goto L2
-  L1:
-    .return (0)
-  L2:
-    $I1 = stat target, .STAT_MODIFYTIME
-    $I2 = stat depend, .STAT_MODIFYTIME
-    $I0 = $I1 > $I2
-    .return ($I0)
-.end
-
-.sub 'newer' :multi(pmc, pmc)
-    .param pmc target
-    .param pmc depend
-    $S0 = target
-    .tailcall newer($S0, depend)
-.end
-
-=item mkpath
-
-=cut
-
-.sub 'mkpath'
-    .param string pathname
-    .param int verbose          :named('verbose') :optional
-    $I1 = 1
-  L1:
-    $I1 = index pathname, '/', $I1
-    if $I1 < 0 goto L2
-    $S0 = substr pathname, 0, $I1
-    inc $I1
-    $I0 = stat $S0, .STAT_EXISTS
-    if $I0 goto L1
-    mkdir($S0, verbose :named('verbose'))
-    goto L1
-  L2:
-    $I0 = stat pathname, .STAT_EXISTS
-    if $I0 goto L3
-    mkdir(pathname, verbose :named('verbose'))
-  L3:
-.end
-
-=item mkdir
-
-=cut
-
-.sub 'mkdir'
-    .param string dirname
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "mkdir "
-    say dirname
-  L1:
-    $P0 = new 'OS'
-    $I1 = 0o775
-    push_eh _handler
-    $P0.'mkdir'(dirname, $I1)
-    pop_eh
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't mkdir '"
-    $S0 .= dirname
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item install
-
-=cut
-
-.sub 'install'
-    .param string src
-    .param string dst
-    .param int exe              :named('exe') :optional
-    .param int has_exe          :opt_flag
-    .param int verbose          :named('verbose') :optional
-    # mkpath
-    $I1 = 1
-  L1:
-    $I1 = index dst, '/', $I1
-    if $I1 < 0 goto L2
-    $S0 = substr dst, 0, $I1
-    inc $I1
-    $I0 = stat $S0, .STAT_EXISTS
-    if $I0 goto L1
-    mkdir($S0, verbose :named('verbose'))
-    goto L1
-  L2:
-    $I0 = newer(dst, src)
-    if $I0 goto L3
-    cp(src, dst, verbose :named('verbose'))
-    unless has_exe goto L3
-    unless exe goto L3
-    $P0 = getinterp
-    $P0 = $P0[.IGLOBALS_CONFIG_HASH]
-    $I0 = $P0['cygwin']
-    if $I0 goto L4
-    $I0 = $P0['hpux']
-    if $I0 goto L4
-    goto L3
-  L4:
-    chmod(dst, 0o755, verbose :named('verbose'))
-  L3:
-.end
-
-=item cp
-
-=cut
-
-.sub 'cp'
-    .param string src
-    .param string dst
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "cp "
-    print src
-    print " "
-    say dst
-  L1:
-    $P0 = new 'FileHandle'
-    push_eh _handler1
-    $S0 = $P0.'readall'(src)
-    pop_eh
-    push_eh _handler2
-    $P0.'open'(dst, 'w')
-    pop_eh
-    $P0.'puts'($S0)
-    $P0.'close'()
-    .return ()
-  _handler1:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= src
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-  _handler2:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= dst
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item chmod
-
-=cut
-
-.sub 'chmod'
-    .param string filename
-    .param int mode
-    .param int verbose          :named('verbose') :optional
-    # see TT #1322
-    $P0 = get_config()
-    .local string cmd
-    cmd = $P0['perl']
-    cmd .= " -MExtUtils::Command -e ExtUtils::Command::chmod "
-    $P1 = new 'FixedIntegerArray'
-    set $P1, 1
-    $P1[0] = mode
-    $S0 = sprintf '0%o', $P1
-    cmd .= $S0
-    cmd .= " "
-    cmd .= filename
-    system(cmd, verbose :named('verbose'))
-.end
-
-=item unlink
-
-=cut
-
-.sub 'unlink' :multi(string)
-    .param string filename
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    $I0 = stat filename, .STAT_EXISTS
-    unless $I0 goto L1
-    $I0 = stat filename, .STAT_ISREG
-    unless $I0 goto L1
-    unless has_verbose goto L2
-    unless verbose goto L2
-    print "unlink "
-    say filename
-  L2:
-    new $P0, 'OS'
-    push_eh _handler
-    $P0.'rm'(filename)
-    pop_eh
-  L1:
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't remove '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-.sub 'unlink' :multi(pmc)
-    .param pmc list
-    .param int verbose          :named('verbose') :optional
-    $I0 = does list, 'array'
-    if $I0 goto L1
-    $S0 = list
-    unlink($S0, verbose :named('verbose'))
-    goto L2
-  L1:
-    $P0 = iter list
-  L3:
-    unless $P0 goto L2
-    $S0 = shift $P0
-    unlink($S0, verbose :named('verbose'))
-    goto L3
-  L2:
-.end
-
-=item rmtree
-
-=cut
-
-.sub 'rmtree'
-    .param string path
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    $I0 = stat path, .STAT_EXISTS
-    unless $I0 goto L1
-    $I0 = stat path, .STAT_ISDIR
-    unless $I0 goto L1
-    unless has_verbose goto L2
-    unless verbose goto L2
-    print "rmtree "
-    say path
-  L2:
-    new $P0, 'OS'
-    $P1 = $P0.'readdir'(path)
-    push_eh _handler
-  L3:
-    unless $P1 goto L4
-    $S0 = shift $P1
-    if $S0 == '.' goto L3
-    if $S0 == '..' goto L3
-    $S1 = path . '/'
-    $S1 .= $S0
-    $I0 = stat $S1, .STAT_ISDIR
-    unless $I0 goto L5
-    rmtree($S1)
-    goto L3
-  L5:
-    $P0.'rm'($S1)
-    goto L3
-  L4:
-    push_eh _handler
-    $S1 = path
-    $P0.'rm'($S1)
-    pop_eh
-  L1:
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't remove '"
-    $S0 .= $S1
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item basename
-
-=cut
-
-.sub 'basename'
-    .param string path
-    $I0 = 0
-  L1:
-    $I1 = index path, '/', $I0
-    if $I1 < 0 goto L2
-    $I0 = $I1 + 1
-    goto L1
-  L2:
-    $S0 = substr path, $I0
-    .return ($S0)
-.end
-
-=item dirname
-
-=cut
-
-.sub 'dirname'
-    .param string path
-    unless path goto L3
-    $I0 = 0
-  L1:
-    $I1 = index path, '/', $I0
-    if $I1 < 0 goto L2
-    $I0 = $I1 + 1
-    goto L1
-  L2:
-    dec $I0
-    unless $I0 > 0 goto L3
-    $S0 = substr path, 0, $I0
-    .return ($S0)
-  L3:
-    .return ('.')
-.end
-
-=item cwd
-
-=cut
-
-.sub 'cwd'
-    new $P0, 'OS'
-    $S0 = $P0.'cwd'()
-    $P0 = split "\\", $S0
-    $S0 = join "/", $P0
-    .return ($S0)
-.end
-
-=item chdir
-
-=cut
-
-.sub 'chdir'
-    .param string dirname
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "cd "
-    say dirname
-  L1:
-    new $P0, 'OS'
-    push_eh _handler
-    $P0.'chdir'(dirname)
-    pop_eh
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't chdir '"
-    $S0 .= dirname
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item chomp
-
-=cut
-
-.include 'cclass.pasm'
-
-.sub 'chomp'
-    .param string str
-    $I0 = index str, "\r"
-    if $I0 < 0 goto L1
-    str = substr str, 0, $I0
-  L1:
-    $I1 = index str, "\n"
-    if $I1 < 0 goto L2
-    str = substr str, 0, $I1
-  L2:
-    .return (str)
-.end
-
-=item glob
-
-=cut
-
-.sub 'glob'
-    .param string patterns
-    $P0 = new 'ResizableStringArray'
-    $P1 = split ' ', patterns
-  L1:
-    unless $P1 goto L2
-    .local string pattern
-    pattern = shift $P1
-    $I0 = index pattern, '*'
-    unless $I0 < 0 goto L3
-    $I0 = index pattern, '?'
-    unless $I0 < 0 goto L3
-    $I0 = index pattern, '['
-    unless $I0 < 0 goto L3
-    $I0 = stat pattern, .STAT_EXISTS
-    unless $I0 goto L1
-    push $P0, pattern
-    goto L1
-  L3:
-    .local pmc matcher
-    load_bytecode 'PGE/Glob.pbc'
-    $P2 = compreg 'PGE::Glob'
-    matcher = $P2.'compile'(pattern)
-    $S0 = dirname(pattern)
-    $P3 = glob($S0)
-    $P4 = new 'OS'
-  L4:
-    unless $P3 goto L1
-    .local string dir
-    dir = shift $P3
-    $I0 = stat dir, .STAT_ISDIR
-    unless $I0 goto L4
-    $S0 = basename(dir)
-    $P5 = $P4.'readdir'(dir)
-  L5:
-    unless $P5 goto L4
-    $S0 = shift $P5
-    if $S0 == '.' goto L5
-    if $S0 == '..' goto L5
-    if dir == '.' goto L6
-    $S1 = dir . '/'
-    $S0 = $S1 . $S0
-  L6:
-    $P6 = matcher($S0)
-    unless $P6 goto L5
-    push $P0, $S0
-    goto L5
-  L2:
-    .return ($P0)
-.end
-
-=item getenv
-
-=cut
-
-.sub 'getenv'
-    .param string name
-    new $P0, 'Env'
-    $S0 = $P0[name]
-    .return ($S0)
-.end
-
-=item setenv
-
-=cut
-
-.sub 'setenv'
-    .param string name
-    .param string value
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "setenv "
-    print name
-    print " = "
-    say value
-  L1:
-    new $P0, 'Env'
-    $P0[name] = value
-.end
-
-=item slurp
-
-=cut
-
-.sub 'slurp'
-    .param string filename
-    $P0 = new 'FileHandle'
-    push_eh _handler
-    $S0 = $P0.'readall'(filename)
-    pop_eh
-    .return ($S0)
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item spew
-
-=cut
-
-.sub 'spew'
-    .param string filename
-    .param string content
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "creat "
-    say filename
-  L1:
-    $P0 = new 'FileHandle'
-    push_eh _handler
-    $P0.'open'(filename, 'w')
-    pop_eh
-    $P0.'puts'(content)
-    $P0.'close'()
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item append
-
-=cut
-
-.sub 'append'
-    .param string filename
-    .param string content
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "append "
-    say filename
-  L1:
-    $P0 = new 'FileHandle'
-    push_eh _handler
-    $P0.'open'(filename, 'a')
-    pop_eh
-    $P0.'puts'(content)
-    $P0.'close'()
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=back
-
 =head1 AUTHOR
 
 Francois Perrad

Added: branches/avl_string_cache/runtime/parrot/library/osutils.pir
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/runtime/parrot/library/osutils.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,779 @@
+# Copyright (C) 2009-2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+osutils - Parrot OS Utilities
+
+=head2 DESCRIPTION
+
+=over 4
+
+=item system
+
+=cut
+
+.sub 'system'
+    .param string cmd
+    .param int verbose          :named('verbose') :optional
+    .param int has_verbose      :opt_flag
+    .param int ignore_error     :named('ignore_error') :optional
+    .param int has_ignore_error :opt_flag
+    unless has_verbose goto L1
+    unless verbose goto L1
+    say cmd
+  L1:
+    $I0 = spawnw cmd
+    unless $I0 goto L2
+    unless has_ignore_error goto L3
+    if ignore_error goto L2
+  L3:
+    $S0 = "exit status: "
+    $S1 = $I0
+    $S0 .= $S1
+    $S0 .= "\ncommand: "
+    $S0 .= cmd
+    $S0 .= "\n"
+    die $S0
+  L2:
+    .return ($I0)
+.end
+
+.include 'stat.pasm'
+
+.sub 'file_exists'
+    .param string filename
+    $I0 = stat filename, .STAT_EXISTS
+    .return ($I0)
+.end
+
+=item newer
+
+=cut
+
+.sub 'newer' :multi(string, pmc)
+    .param string target
+    .param pmc depends
+    $I0 = does depends, 'array'
+    if $I0 goto L1
+    $S0 = depends
+    .tailcall newer(target, $S0)
+  L1:
+    $I0 = stat target, .STAT_EXISTS
+    unless $I0 goto L2
+    $I0 = stat target, .STAT_FILESIZE
+    unless $I0 goto L2
+    goto L3
+  L2:
+    .return (0)
+  L3:
+    $I0 = stat target, .STAT_MODIFYTIME
+    $P0 = iter depends
+  L4:
+    unless $P0 goto L5
+    $S0 = shift $P0
+    if $S0 == '' goto L4
+    $I1 = stat $S0, .STAT_MODIFYTIME
+    if $I1 < $I0 goto L4
+    .return (0)
+  L5:
+    .return (1)
+.end
+
+.sub 'newer' :multi(string, string)
+    .param string target
+    .param string depend
+    $I0 = stat target, .STAT_EXISTS
+    unless $I0 goto L1
+    $I0 = stat target, .STAT_FILESIZE
+    unless $I0 goto L1
+    goto L2
+  L1:
+    .return (0)
+  L2:
+    $I1 = stat target, .STAT_MODIFYTIME
+    $I2 = stat depend, .STAT_MODIFYTIME
+    $I0 = $I1 > $I2
+    .return ($I0)
+.end
+
+.sub 'newer' :multi(pmc, pmc)
+    .param pmc target
+    .param pmc depend
+    $S0 = target
+    .tailcall newer($S0, depend)
+.end
+
+=item mkpath
+
+=cut
+
+.sub 'mkpath'
+    .param string pathname
+    .param int verbose          :named('verbose') :optional
+    $I1 = 1
+  L1:
+    $I1 = index pathname, '/', $I1
+    if $I1 < 0 goto L2
+    $S0 = substr pathname, 0, $I1
+    inc $I1
+    $I0 = stat $S0, .STAT_EXISTS
+    if $I0 goto L1
+    $I0 = length $S0
+    if $I0 != 2 goto L3
+    $I0 = index $S0, ':'
+    if $I0 == 1 goto L1
+  L3:
+    mkdir($S0, verbose :named('verbose'))
+    goto L1
+  L2:
+    $I0 = stat pathname, .STAT_EXISTS
+    if $I0 goto L4
+    mkdir(pathname, verbose :named('verbose'))
+  L4:
+.end
+
+=item mkdir
+
+=cut
+
+.sub 'mkdir'
+    .param string dirname
+    .param int verbose          :named('verbose') :optional
+    .param int has_verbose      :opt_flag
+    unless has_verbose goto L1
+    unless verbose goto L1
+    print "mkdir "
+    say dirname
+  L1:
+    $P0 = new 'OS'
+    $I1 = 0o775
+    push_eh _handler
+    $P0.'mkdir'(dirname, $I1)
+    pop_eh
+    .return ()
+  _handler:
+    .local pmc e
+    .get_results (e)
+    $S0 = "Can't mkdir '"
+    $S0 .= dirname
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    e = $S0
+    rethrow e
+.end
+
+=item install
+
+=cut
+
+.include 'iglobals.pasm'
+
+.sub 'install'
+    .param string src
+    .param string dst
+    .param int exe              :named('exe') :optional
+    .param int has_exe          :opt_flag
+    .param int verbose          :named('verbose') :optional
+    # mkpath
+    $I1 = 1
+  L1:
+    $I1 = index dst, '/', $I1
+    if $I1 < 0 goto L2
+    $S0 = substr dst, 0, $I1
+    inc $I1
+    $I0 = stat $S0, .STAT_EXISTS
+    if $I0 goto L1
+    mkdir($S0, verbose :named('verbose'))
+    goto L1
+  L2:
+    $I0 = newer(dst, src)
+    if $I0 goto L3
+    cp(src, dst, verbose :named('verbose'))
+    unless has_exe goto L3
+    unless exe goto L3
+    $P0 = getinterp
+    $P0 = $P0[.IGLOBALS_CONFIG_HASH]
+    $I0 = $P0['win32']
+    if $I0 goto L3
+    chmod(dst, 0o755, verbose :named('verbose'))
+  L3:
+.end
+
+=item cp
+
+=cut
+
+.sub 'cp'
+    .param string src
+    .param string dst
+    .param int verbose          :named('verbose') :optional
+    .param int has_verbose      :opt_flag
+    unless has_verbose goto L1
+    unless verbose goto L1
+    print "cp "
+    print src
+    print " "
+    say dst
+  L1:
+    $P0 = new 'FileHandle'
+    push_eh _handler1
+    $S0 = $P0.'readall'(src)
+    pop_eh
+    push_eh _handler2
+    $P0.'open'(dst, 'w')
+    pop_eh
+    $P0.'puts'($S0)
+    $P0.'close'()
+    .return ()
+  _handler1:
+    .local pmc e
+    .get_results (e)
+    $S0 = "Can't open '"
+    $S0 .= src
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    e = $S0
+    rethrow e
+  _handler2:
+    .local pmc e
+    .get_results (e)
+    $S0 = "Can't open '"
+    $S0 .= dst
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    e = $S0
+    rethrow e
+.end
+
+=item chmod
+
+=cut
+
+.sub 'chmod'
+    .param string filename
+    .param int mode
+    .param int verbose          :named('verbose') :optional
+    # see TT #1322
+    $P0 = get_config()
+    .local string cmd
+    cmd = $P0['perl']
+    cmd .= " -MExtUtils::Command -e ExtUtils::Command::chmod "
+    $P1 = new 'FixedIntegerArray'
+    set $P1, 1
+    $P1[0] = mode
+    $S0 = sprintf '0%o', $P1
+    cmd .= $S0
+    cmd .= " "
+    cmd .= filename
+    system(cmd, verbose :named('verbose'))
+.end
+
+=item unlink
+
+=cut
+
+.sub 'unlink' :multi(string)
+    .param string filename
+    .param int verbose          :named('verbose') :optional
+    .param int has_verbose      :opt_flag
+    $I0 = stat filename, .STAT_EXISTS
+    unless $I0 goto L1
+    $I0 = stat filename, .STAT_ISREG
+    unless $I0 goto L1
+    unless has_verbose goto L2
+    unless verbose goto L2
+    print "unlink "
+    say filename
+  L2:
+    new $P0, 'OS'
+    push_eh _handler
+    $P0.'rm'(filename)
+    pop_eh
+  L1:
+    .return ()
+  _handler:
+    .local pmc e
+    .get_results (e)
+    $S0 = "Can't remove '"
+    $S0 .= filename
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    e = $S0
+    rethrow e
+.end
+
+.sub 'unlink' :multi(pmc)
+    .param pmc list
+    .param int verbose          :named('verbose') :optional
+    $I0 = does list, 'array'
+    if $I0 goto L1
+    $S0 = list
+    unlink($S0, verbose :named('verbose'))
+    goto L2
+  L1:
+    $P0 = iter list
+  L3:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    unlink($S0, verbose :named('verbose'))
+    goto L3
+  L2:
+.end
+
+=item rmtree
+
+=cut
+
+.sub 'rmtree'
+    .param string path
+    .param int verbose          :named('verbose') :optional
+    .param int has_verbose      :opt_flag
+    $I0 = stat path, .STAT_EXISTS
+    unless $I0 goto L1
+    $I0 = stat path, .STAT_ISDIR
+    unless $I0 goto L1
+    unless has_verbose goto L2
+    unless verbose goto L2
+    print "rmtree "
+    say path
+  L2:
+    new $P0, 'OS'
+    $P1 = $P0.'readdir'(path)
+    push_eh _handler
+  L3:
+    unless $P1 goto L4
+    $S0 = shift $P1
+    if $S0 == '.' goto L3
+    if $S0 == '..' goto L3
+    $S1 = path . '/'
+    $S1 .= $S0
+    $I0 = stat $S1, .STAT_ISDIR
+    unless $I0 goto L5
+    rmtree($S1)
+    goto L3
+  L5:
+    $P0.'rm'($S1)
+    goto L3
+  L4:
+    push_eh _handler
+    $S1 = path
+    $P0.'rm'($S1)
+    pop_eh
+  L1:
+    .return ()
+  _handler:
+    .local pmc e
+    .get_results (e)
+    $S0 = "Can't remove '"
+    $S0 .= $S1
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    e = $S0
+    rethrow e
+.end
+
+=item basename
+
+=cut
+
+.sub 'basename'
+    .param string path
+    $I0 = 0
+  L1:
+    $I1 = index path, '/', $I0
+    if $I1 < 0 goto L2
+    $I0 = $I1 + 1
+    goto L1
+  L2:
+    $S0 = substr path, $I0
+    .return ($S0)
+.end
+
+=item dirname
+
+=cut
+
+.sub 'dirname'
+    .param string path
+    unless path goto L3
+    $I0 = 0
+  L1:
+    $I1 = index path, '/', $I0
+    if $I1 < 0 goto L2
+    $I0 = $I1 + 1
+    goto L1
+  L2:
+    dec $I0
+    unless $I0 > 0 goto L3
+    $S0 = substr path, 0, $I0
+    .return ($S0)
+  L3:
+    .return ('.')
+.end
+
+=item cwd
+
+=cut
+
+.sub 'cwd'
+    new $P0, 'OS'
+    $S0 = $P0.'cwd'()
+    $P0 = split "\\", $S0
+    $S0 = join "/", $P0
+    .return ($S0)
+.end
+
+=item chdir
+
+=cut
+
+.sub 'chdir'
+    .param string dirname
+    .param int verbose          :named('verbose') :optional
+    .param int has_verbose      :opt_flag
+    unless has_verbose goto L1
+    unless verbose goto L1
+    print "cd "
+    say dirname
+  L1:
+    new $P0, 'OS'
+    push_eh _handler
+    $P0.'chdir'(dirname)
+    pop_eh
+    .return ()
+  _handler:
+    .local pmc e
+    .get_results (e)
+    $S0 = "Can't chdir '"
+    $S0 .= dirname
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    e = $S0
+    rethrow e
+.end
+
+=item chomp
+
+=cut
+
+.include 'cclass.pasm'
+
+.sub 'chomp'
+    .param string str
+    $I0 = index str, "\r"
+    if $I0 < 0 goto L1
+    str = substr str, 0, $I0
+  L1:
+    $I1 = index str, "\n"
+    if $I1 < 0 goto L2
+    str = substr str, 0, $I1
+  L2:
+    .return (str)
+.end
+
+=item glob
+
+=cut
+
+.sub 'glob'
+    .param string patterns
+    $P0 = new 'ResizableStringArray'
+    $P1 = split ' ', patterns
+  L1:
+    unless $P1 goto L2
+    .local string pattern
+    pattern = shift $P1
+    $I0 = index pattern, '*'
+    unless $I0 < 0 goto L3
+    $I0 = index pattern, '?'
+    unless $I0 < 0 goto L3
+    $I0 = index pattern, '['
+    unless $I0 < 0 goto L3
+    $I0 = stat pattern, .STAT_EXISTS
+    unless $I0 goto L1
+    push $P0, pattern
+    goto L1
+  L3:
+    .local pmc matcher
+    load_bytecode 'PGE/Glob.pbc'
+    $P2 = compreg 'PGE::Glob'
+    matcher = $P2.'compile'(pattern)
+    $S0 = dirname(pattern)
+    $P3 = glob($S0)
+    $P4 = new 'OS'
+  L4:
+    unless $P3 goto L1
+    .local string dir
+    dir = shift $P3
+    $I0 = stat dir, .STAT_ISDIR
+    unless $I0 goto L4
+    $S0 = basename(dir)
+    $P5 = $P4.'readdir'(dir)
+  L5:
+    unless $P5 goto L4
+    $S0 = shift $P5
+    if $S0 == '.' goto L5
+    if $S0 == '..' goto L5
+    if dir == '.' goto L6
+    $S1 = dir . '/'
+    $S0 = $S1 . $S0
+  L6:
+    $P6 = matcher($S0)
+    unless $P6 goto L5
+    push $P0, $S0
+    goto L5
+  L2:
+    .return ($P0)
+.end
+
+=item getenv
+
+=cut
+
+.sub 'getenv'
+    .param string name
+    new $P0, 'Env'
+    $S0 = $P0[name]
+    .return ($S0)
+.end
+
+=item setenv
+
+=cut
+
+.sub 'setenv'
+    .param string name
+    .param string value
+    .param int verbose          :named('verbose') :optional
+    .param int has_verbose      :opt_flag
+    unless has_verbose goto L1
+    unless verbose goto L1
+    print "setenv "
+    print name
+    print " = "
+    say value
+  L1:
+    new $P0, 'Env'
+    $P0[name] = value
+.end
+
+=item slurp
+
+=cut
+
+.sub 'slurp'
+    .param string filename
+    $P0 = new 'FileHandle'
+    push_eh _handler
+    $S0 = $P0.'readall'(filename)
+    pop_eh
+    .return ($S0)
+  _handler:
+    .local pmc e
+    .get_results (e)
+    $S0 = "Can't open '"
+    $S0 .= filename
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    e = $S0
+    rethrow e
+.end
+
+=item spew
+
+=cut
+
+.sub 'spew'
+    .param string filename
+    .param string content
+    .param int verbose          :named('verbose') :optional
+    .param int has_verbose      :opt_flag
+    unless has_verbose goto L1
+    unless verbose goto L1
+    print "creat "
+    say filename
+  L1:
+    $P0 = new 'FileHandle'
+    push_eh _handler
+    $P0.'open'(filename, 'w')
+    pop_eh
+    $P0.'puts'(content)
+    $P0.'close'()
+    .return ()
+  _handler:
+    .local pmc e
+    .get_results (e)
+    $S0 = "Can't open '"
+    $S0 .= filename
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    e = $S0
+    rethrow e
+.end
+
+=item append
+
+=cut
+
+.sub 'append'
+    .param string filename
+    .param string content
+    .param int verbose          :named('verbose') :optional
+    .param int has_verbose      :opt_flag
+    unless has_verbose goto L1
+    unless verbose goto L1
+    print "append "
+    say filename
+  L1:
+    $P0 = new 'FileHandle'
+    push_eh _handler
+    $P0.'open'(filename, 'a')
+    pop_eh
+    $P0.'puts'(content)
+    $P0.'close'()
+    .return ()
+  _handler:
+    .local pmc e
+    .get_results (e)
+    $S0 = "Can't open '"
+    $S0 .= filename
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    e = $S0
+    rethrow e
+.end
+
+=item tempdir
+
+=cut
+
+.sub 'tempdir'
+    .param string suffix        :named('SUFFIX') :optional
+    .param int has_suffix       :opt_flag
+    $S0 = tmpdir()
+    $S0 .= '/TEMPXXX'
+    unless has_suffix goto L1
+    $S0 .= suffix
+  L1:
+    .tailcall _gettemp($S0)
+.end
+
+.sub '_gettemp' :anon
+    .param string template
+    $P0 = split "/", template
+    $S0 = pop $P0
+    .const string TEMPCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+    $P1 = split '', TEMPCHARS
+    $I1 = elements $P1
+    load_bytecode 'Math/Rand.pbc'
+    .local pmc rand
+    rand = get_global [ 'Math'; 'Rand' ], 'rand'
+    .local pmc srand
+    srand = get_global [ 'Math'; 'Rand' ], 'srand'
+    $I0 = time
+    srand($I0)
+  REDO:
+    $S1 = ''
+    $P2 = split '', $S0
+  L1:
+    unless $P2 goto L2
+    $S2 = shift $P2
+    unless $S2 == 'X' goto L3
+    $I0 = rand()
+    $I0 = $I0 % $I1
+    $S2 = $P1[$I0]
+  L3:
+    $S1 .= $S2
+    goto L1
+  L2:
+    push $P0, $S1
+    $S0 = join "/", $P0
+    $I0 = stat $S0, .STAT_EXISTS
+    if $I0 goto REDO
+    .return ($S0)
+.end
+
+=item tmpdir
+
+=cut
+
+.sub 'tmpdir'
+    .local pmc env, dirlist
+    env = new 'Env'
+    dirlist = new 'ResizableStringArray'
+    $P0 = getinterp
+    $P0 = $P0[.IGLOBALS_CONFIG_HASH]
+    $I0 = $P0['win32']
+    unless $I0 goto L1
+    $I0 = exists env['TMPDIR']
+    unless $I0 goto L2
+    $S0 = env['TMPDIR']
+    push dirlist, $S0
+  L2:
+    $I0 = exists env['TEMP']
+    unless $I0 goto L3
+    $S0 = env['TEMP']
+    push dirlist, $S0
+  L3:
+    $I0 = exists env['TMP']
+    unless $I0 goto L4
+    $S0 = env['TMP']
+    push dirlist, $S0
+  L4:
+    push dirlist, 'c:/system/temp'
+    push dirlist, 'c:/temp'
+    push dirlist, '/tmp'
+    push dirlist, '/'
+    goto L5
+  L1:
+    $I0 = exists env['TMPDIR']
+    unless $I0 goto L6
+    $S0 = env['TMPDIR']
+    push dirlist, $S0
+  L6:
+    push dirlist, '/tmp'
+  L5:
+    unless dirlist goto L7
+    $S0 = shift dirlist
+    $I0 = stat $S0, .STAT_EXISTS
+    unless $I0 goto L5
+    $I0 = stat $S0, .STAT_ISDIR
+    unless $I0 goto L5
+    $P0 = split "\\", $S0
+    $S0 = join "/", $P0
+    .return ($S0)
+  L7:
+.end
+
+=back
+
+=head1 AUTHOR
+
+Francois Perrad
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/runtime/parrot/library/pcore.pir
==============================================================================
--- branches/avl_string_cache/runtime/parrot/library/pcore.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/runtime/parrot/library/pcore.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -7,7 +7,7 @@
 .namespace [ 'Sub' ]
 
 # implementation Sub.get_lexenv :method
-.sub get_lexenv :method
+.sub get_lexenv :method :nsentry
     .local pmc env, pad, interp
     env = new 'ResizablePMCArray'
     .local int level

Modified: branches/avl_string_cache/src/call/args.c
==============================================================================
--- branches/avl_string_cache/src/call/args.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/call/args.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -71,17 +71,18 @@
     INTVAL param_index,
     INTVAL param_flags,
     ARGIN(void *arg_info),
-    ARGIN(struct pcc_set_funcs *accessor))
+    ARGMOD(struct pcc_set_funcs *accessor))
         __attribute__nonnull__(1)
         __attribute__nonnull__(4)
-        __attribute__nonnull__(5);
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*accessor);
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC* clone_key_arg(PARROT_INTERP, ARGIN(PMC *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
 static void dissect_aggregate_arg(PARROT_INTERP,
     ARGMOD(PMC *call_object),
     ARGIN(PMC *aggregate))
@@ -93,8 +94,8 @@
 static void extract_named_arg_from_op(PARROT_INTERP,
     ARGMOD(PMC *call_object),
     ARGIN(STRING *name),
-    ARGIN(PMC * const raw_sig),
-    ARGIN(opcode_t * const raw_args),
+    ARGIN(PMC *raw_sig),
+    ARGIN(opcode_t *raw_args),
     INTVAL arg_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -115,87 +116,59 @@
         __attribute__nonnull__(5)
         FUNC_MODIFIES(*call_object);
 
-PARROT_CANNOT_RETURN_NULL
-static INTVAL intval_arg_from_c_args(PARROT_INTERP,
-    ARGIN(va_list *args),
-    SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static INTVAL intval_arg_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_args),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static INTVAL intval_constant_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+PARROT_WARN_UNUSED_RESULT
+static INTVAL intval_constant_from_op(SHIM_INTERP,
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static INTVAL intval_constant_from_varargs(PARROT_INTERP,
-    ARGIN(void *data),
-    INTVAL index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+PARROT_WARN_UNUSED_RESULT
+static INTVAL intval_constant_from_varargs(SHIM_INTERP,
+    SHIM(void *data),
+    SHIM(INTVAL index));
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static INTVAL* intval_param_from_c_args(PARROT_INTERP,
+static INTVAL* intval_param_from_c_args(SHIM_INTERP,
     ARGIN(va_list *args),
     SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static INTVAL* intval_param_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL numval_arg_from_c_args(PARROT_INTERP,
-    ARGIN(va_list *args),
-    SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL numval_arg_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_args),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
+PARROT_WARN_UNUSED_RESULT
 static FLOATVAL numval_constant_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static FLOATVAL numval_constant_from_varargs(PARROT_INTERP,
-    ARGIN(void *data),
-    INTVAL index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+PARROT_WARN_UNUSED_RESULT
+static FLOATVAL numval_constant_from_varargs(SHIM_INTERP,
+    SHIM(void *data),
+    SHIM(INTVAL index));
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static FLOATVAL* numval_param_from_c_args(PARROT_INTERP,
+static FLOATVAL* numval_param_from_c_args(SHIM_INTERP,
     ARGIN(va_list *args),
     SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static FLOATVAL* numval_param_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CAN_RETURN_NULL
 static void parse_signature_string(PARROT_INTERP,
     ARGIN(const char *signature),
     ARGMOD(PMC **arg_flags))
@@ -204,86 +177,60 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*arg_flags);
 
-PARROT_CANNOT_RETURN_NULL
-static PMC* pmc_arg_from_c_args(PARROT_INTERP,
-    ARGIN(va_list *args),
-    SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static PMC* pmc_arg_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_args),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static PMC* pmc_constant_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
-static PMC* pmc_constant_from_varargs(PARROT_INTERP,
-    ARGIN(void *data),
-    INTVAL index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+PARROT_WARN_UNUSED_RESULT
+static PMC* pmc_constant_from_varargs(SHIM_INTERP,
+    SHIM(void *data),
+    SHIM(INTVAL index));
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static PMC** pmc_param_from_c_args(PARROT_INTERP,
+static PMC** pmc_param_from_c_args(SHIM_INTERP,
     ARGIN(va_list *args),
     SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PMC** pmc_param_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-static STRING* string_arg_from_c_args(PARROT_INTERP,
-    ARGIN(va_list *args),
-    SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static STRING* string_arg_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_args),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static STRING* string_constant_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
-static STRING* string_constant_from_varargs(PARROT_INTERP,
-    ARGIN(void *data),
-    INTVAL index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+PARROT_WARN_UNUSED_RESULT
+static STRING* string_constant_from_varargs(SHIM_INTERP,
+    SHIM(void *data),
+    SHIM(INTVAL index));
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static STRING** string_param_from_c_args(PARROT_INTERP,
+static STRING** string_param_from_c_args(SHIM_INTERP,
     ARGIN(va_list *args),
     SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING** string_param_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -310,39 +257,20 @@
     , PARROT_ASSERT_ARG(raw_sig) \
     , PARROT_ASSERT_ARG(arg_info) \
     , PARROT_ASSERT_ARG(accessor))
-#define ASSERT_ARGS_intval_arg_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
-#define ASSERT_ARGS_intval_arg_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_args))
 #define ASSERT_ARGS_intval_constant_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_intval_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+       PARROT_ASSERT_ARG(raw_params))
+#define ASSERT_ARGS_intval_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_intval_param_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
+       PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_intval_param_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_numval_arg_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
-#define ASSERT_ARGS_numval_arg_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_args))
 #define ASSERT_ARGS_numval_constant_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_numval_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+#define ASSERT_ARGS_numval_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_numval_param_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
+       PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_numval_param_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
@@ -350,39 +278,21 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(signature) \
     , PARROT_ASSERT_ARG(arg_flags))
-#define ASSERT_ARGS_pmc_arg_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
-#define ASSERT_ARGS_pmc_arg_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_args))
 #define ASSERT_ARGS_pmc_constant_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_pmc_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+#define ASSERT_ARGS_pmc_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pmc_param_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
+       PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_pmc_param_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_string_arg_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
-#define ASSERT_ARGS_string_arg_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_args))
 #define ASSERT_ARGS_string_constant_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_string_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+#define ASSERT_ARGS_string_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_string_param_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
+       PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_string_param_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
@@ -392,7 +302,7 @@
 /*
 
 =item C<PMC* Parrot_pcc_build_sig_object_from_op(PARROT_INTERP, PMC *signature,
-PMC * const raw_sig, opcode_t * const raw_args)>
+PMC *raw_sig, opcode_t *raw_args)>
 
 Take a raw signature and argument list from a set_args opcode and
 convert it to a CallContext PMC.
@@ -406,7 +316,7 @@
 PARROT_CANNOT_RETURN_NULL
 PMC*
 Parrot_pcc_build_sig_object_from_op(PARROT_INTERP, ARGIN_NULLOK(PMC *signature),
-        ARGIN(PMC * const raw_sig), ARGIN(opcode_t * const raw_args))
+        ARGIN(PMC *raw_sig), ARGIN(opcode_t *raw_args))
 {
     ASSERT_ARGS(Parrot_pcc_build_sig_object_from_op)
     PMC            * const ctx = CURRENT_CONTEXT(interp);
@@ -454,9 +364,7 @@
             {
                 STRING *string_value;
                 if (constant)
-                    /* ensure that callees don't modify constant caller strings */
-                    string_value = Parrot_str_new_COW(interp,
-                            Parrot_pcc_get_string_constant(interp, ctx, raw_index));
+                    string_value = Parrot_pcc_get_string_constant(interp, ctx, raw_index);
                 else
                     string_value = CTX_REG_STR(ctx, raw_index);
 
@@ -509,7 +417,7 @@
 /*
 
 =item C<static void extract_named_arg_from_op(PARROT_INTERP, PMC *call_object,
-STRING *name, PMC * const raw_sig, opcode_t * const raw_args, INTVAL arg_index)>
+STRING *name, PMC *raw_sig, opcode_t *raw_args, INTVAL arg_index)>
 
 Pulls in the next argument from a set_args opcode, and sets it as the
 value of a named argument in the CallContext PMC.
@@ -520,8 +428,7 @@
 
 static void
 extract_named_arg_from_op(PARROT_INTERP, ARGMOD(PMC *call_object), ARGIN(STRING *name),
-        ARGIN(PMC * const raw_sig), ARGIN(opcode_t * const raw_args),
-        INTVAL arg_index)
+        ARGIN(PMC *raw_sig), ARGIN(opcode_t *raw_args), INTVAL arg_index)
 {
     ASSERT_ARGS(extract_named_arg_from_op)
     PMC   * const ctx = CURRENT_CONTEXT(interp);
@@ -547,10 +454,8 @@
         break;
       case PARROT_ARG_STRING:
         if (constant)
-            /* ensure that callees don't modify constant caller strings */
             VTABLE_set_string_keyed_str(interp, call_object, name,
-                        Parrot_str_new_COW(interp,
-                                Parrot_pcc_get_string_constant(interp, ctx, raw_index)));
+                    Parrot_pcc_get_string_constant(interp, ctx, raw_index));
         else
             VTABLE_set_string_keyed_str(interp, call_object, name,
                         CTX_REG_STR(ctx, raw_index));
@@ -582,7 +487,6 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
 static void
 dissect_aggregate_arg(PARROT_INTERP, ARGMOD(PMC *call_object), ARGIN(PMC *aggregate))
 {
@@ -633,6 +537,7 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC*
 Parrot_pcc_build_call_from_c_args(PARROT_INTERP,
@@ -899,8 +804,6 @@
     }
 
     /* First iterate over positional args and positional parameters. */
-    arg_index       = 0;
-    param_index     = 0;
     GETATTR_CallContext_num_positionals(interp, call_object, positional_args);
 
     while (1) {
@@ -1069,7 +972,7 @@
 
     /* Now iterate over the named arguments and parameters. */
     while (1) {
-        STRING *param_name = NULL;
+        STRING *param_name;
         INTVAL  param_flags;
 
         /* Check if we've used up all the parameters. We'll check for leftover
@@ -1110,7 +1013,7 @@
             PMC * const named_arg_list = VTABLE_get_attr_str(interp, call_object, CONST_STRING(interp, "named"));
 
             if (!PMC_IS_NULL(named_arg_list)) {
-                INTVAL named_arg_count = VTABLE_elements(interp, named_arg_list);
+                const INTVAL named_arg_count = VTABLE_elements(interp, named_arg_list);
                 INTVAL named_arg_index;
 
                 /* Named argument iteration. */
@@ -1137,8 +1040,8 @@
         }
 
         /* Store the name. */
-       if (!(param_flags & PARROT_ARG_STRING))
-           Parrot_ex_throw_from_c_args(interp, NULL,
+        if (!(param_flags & PARROT_ARG_STRING))
+            Parrot_ex_throw_from_c_args(interp, NULL,
                EXCEPTION_INVALID_OPERATION,
                "named parameters must have a name specified");
 
@@ -1294,7 +1197,7 @@
 
 static void
 assign_default_param_value(PARROT_INTERP, INTVAL param_index, INTVAL param_flags,
-        ARGIN(void *arg_info), ARGIN(struct pcc_set_funcs *accessor))
+        ARGIN(void *arg_info), ARGMOD(struct pcc_set_funcs *accessor))
 {
     ASSERT_ARGS(assign_default_param_value)
     switch (PARROT_ARG_TYPE_MASK_MASK(param_flags)) {
@@ -1439,8 +1342,8 @@
 
 /*
 
-=item C<void Parrot_pcc_split_signature_string(PARROT_INTERP, const char
-*signature, const char **arg_sig, const char **return_sig)>
+=item C<void Parrot_pcc_split_signature_string(const char *signature, const char
+**arg_sig, const char **return_sig)>
 
 Splits a full signature string and creates call and return signature strings.
 The two result strings should be passed in as references to a C string.
@@ -1449,9 +1352,8 @@
 
 */
 
-PARROT_CAN_RETURN_NULL
 void
-Parrot_pcc_split_signature_string(PARROT_INTERP, ARGIN(const char *signature),
+Parrot_pcc_split_signature_string(ARGIN(const char *signature),
         ARGMOD(const char **arg_sig), ARGMOD(const char **return_sig))
 {
     ASSERT_ARGS(Parrot_pcc_split_signature_string)
@@ -1481,7 +1383,6 @@
 
 */
 
-PARROT_CAN_RETURN_NULL
 static void
 parse_signature_string(PARROT_INTERP, ARGIN(const char *signature),
         ARGMOD(PMC **arg_flags))
@@ -1569,7 +1470,7 @@
     char * const s = Parrot_str_to_cstring(interp, signature);
     const char *arg_sig, *ret_sig;
 
-    Parrot_pcc_split_signature_string(interp, s, &arg_sig, &ret_sig);
+    Parrot_pcc_split_signature_string(s, &arg_sig, &ret_sig);
 
     *arg_flags    = PMCNULL;
     *return_flags = PMCNULL;
@@ -1611,44 +1512,44 @@
 
 Get the appropriate argument value from the op.
 
-=item C<static INTVAL intval_arg_from_op(PARROT_INTERP, opcode_t *raw_args,
-INTVAL arg_index)>
+=item C<static INTVAL intval_arg_from_op(PARROT_INTERP, const opcode_t
+*raw_args, INTVAL arg_index)>
 
-=item C<static FLOATVAL numval_arg_from_op(PARROT_INTERP, opcode_t *raw_args,
-INTVAL arg_index)>
+=item C<static FLOATVAL numval_arg_from_op(PARROT_INTERP, const opcode_t
+*raw_args, INTVAL arg_index)>
 
-=item C<static STRING* string_arg_from_op(PARROT_INTERP, opcode_t *raw_args,
-INTVAL arg_index)>
+=item C<static STRING* string_arg_from_op(PARROT_INTERP, const opcode_t
+*raw_args, INTVAL arg_index)>
 
-=item C<static PMC* pmc_arg_from_op(PARROT_INTERP, opcode_t *raw_args, INTVAL
-arg_index)>
+=item C<static PMC* pmc_arg_from_op(PARROT_INTERP, const opcode_t *raw_args,
+INTVAL arg_index)>
 
 Get the appropriate parameter value from the op (these are pointers, so the
 argument value can be stored into them.)
 
-=item C<static INTVAL* intval_param_from_op(PARROT_INTERP, opcode_t *raw_params,
-INTVAL param_index)>
+=item C<static INTVAL* intval_param_from_op(PARROT_INTERP, const opcode_t
+*raw_params, INTVAL param_index)>
 
-=item C<static FLOATVAL* numval_param_from_op(PARROT_INTERP, opcode_t
+=item C<static FLOATVAL* numval_param_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static STRING** string_param_from_op(PARROT_INTERP, opcode_t
+=item C<static STRING** string_param_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static PMC** pmc_param_from_op(PARROT_INTERP, opcode_t *raw_params,
-INTVAL param_index)>
+=item C<static PMC** pmc_param_from_op(PARROT_INTERP, const opcode_t
+*raw_params, INTVAL param_index)>
 
-=item C<static INTVAL intval_constant_from_op(PARROT_INTERP, opcode_t
+=item C<static INTVAL intval_constant_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static FLOATVAL numval_constant_from_op(PARROT_INTERP, opcode_t
+=item C<static FLOATVAL numval_constant_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static STRING* string_constant_from_op(PARROT_INTERP, opcode_t
+=item C<static STRING* string_constant_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static PMC* pmc_constant_from_op(PARROT_INTERP, opcode_t *raw_params,
-INTVAL param_index)>
+=item C<static PMC* pmc_constant_from_op(PARROT_INTERP, const opcode_t
+*raw_params, INTVAL param_index)>
 
 Get the appropriate argument value from varargs.
 
@@ -1700,210 +1601,154 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-static INTVAL
-intval_arg_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_args), INTVAL arg_index)
-{
-    ASSERT_ARGS(intval_arg_from_op)
-    const INTVAL raw_index      = raw_args[arg_index + 2];
-    return REG_INT(interp, raw_index);
-}
-
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL
-numval_arg_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_args), INTVAL arg_index)
-{
-    ASSERT_ARGS(numval_arg_from_op)
-    const INTVAL raw_index      = raw_args[arg_index + 2];
-    return REG_NUM(interp, raw_index);
-}
-
-PARROT_CANNOT_RETURN_NULL
-static STRING*
-string_arg_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_args), INTVAL arg_index)
-{
-    ASSERT_ARGS(string_arg_from_op)
-    const INTVAL raw_index      = raw_args[arg_index + 2];
-    return REG_STR(interp, raw_index);
-}
-
-PARROT_CANNOT_RETURN_NULL
-static PMC*
-pmc_arg_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_args), INTVAL arg_index)
-{
-    ASSERT_ARGS(pmc_arg_from_op)
-    const INTVAL raw_index      = raw_args[arg_index + 2];
-    return REG_PMC(interp, raw_index);
-}
-
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static INTVAL*
-intval_param_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+intval_param_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(intval_param_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return &REG_INT(interp, raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static FLOATVAL*
-numval_param_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+numval_param_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(numval_param_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return &REG_NUM(interp, raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING**
-string_param_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+string_param_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(string_param_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return &REG_STR(interp, raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PMC**
-pmc_param_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+pmc_param_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(pmc_param_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return &REG_PMC(interp, raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-intval_constant_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+intval_constant_from_op(SHIM_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(intval_constant_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return raw_index;
 }
 
+PARROT_WARN_UNUSED_RESULT
 static FLOATVAL
-numval_constant_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+numval_constant_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(numval_constant_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return Parrot_pcc_get_num_constant(interp, CURRENT_CONTEXT(interp), raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static STRING*
-string_constant_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+string_constant_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(string_constant_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return Parrot_pcc_get_string_constant(interp, CURRENT_CONTEXT(interp), raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static PMC*
-pmc_constant_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+pmc_constant_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(pmc_constant_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return Parrot_pcc_get_pmc_constant(interp, CURRENT_CONTEXT(interp), raw_index);
 }
 
-PARROT_CANNOT_RETURN_NULL
-static INTVAL
-intval_arg_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
-{
-    ASSERT_ARGS(intval_arg_from_c_args)
-    return va_arg(*args, INTVAL);
-}
-
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL
-numval_arg_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
-{
-    ASSERT_ARGS(numval_arg_from_c_args)
-    return va_arg(*args, FLOATVAL);
-}
-
-PARROT_CANNOT_RETURN_NULL
-static STRING*
-string_arg_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
-{
-    ASSERT_ARGS(string_arg_from_c_args)
-    return va_arg(*args, STRING*);
-}
-
-PARROT_CANNOT_RETURN_NULL
-static PMC*
-pmc_arg_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
-{
-    ASSERT_ARGS(pmc_arg_from_c_args)
-    return va_arg(*args, PMC*);
-}
-
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static INTVAL*
-intval_param_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
+intval_param_from_c_args(SHIM_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
 {
     ASSERT_ARGS(intval_param_from_c_args)
     return va_arg(*args, INTVAL*);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static FLOATVAL*
-numval_param_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
+numval_param_from_c_args(SHIM_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
 {
     ASSERT_ARGS(numval_param_from_c_args)
     return va_arg(*args, FLOATVAL*);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING**
-string_param_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
+string_param_from_c_args(SHIM_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
 {
     ASSERT_ARGS(string_param_from_c_args)
     return va_arg(*args, STRING**);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PMC**
-pmc_param_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
+pmc_param_from_c_args(SHIM_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
 {
     ASSERT_ARGS(pmc_param_from_c_args)
     return va_arg(*args, PMC**);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-intval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
+intval_constant_from_varargs(SHIM_INTERP, SHIM(void *data), SHIM(INTVAL index))
 {
     ASSERT_ARGS(intval_constant_from_varargs)
-    UNUSED(index);
     PARROT_FAILURE("Wrong call");
     return 0;
 }
 
+PARROT_WARN_UNUSED_RESULT
 static FLOATVAL
-numval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
+numval_constant_from_varargs(SHIM_INTERP, SHIM(void *data), SHIM(INTVAL index))
 {
     ASSERT_ARGS(numval_constant_from_varargs)
-    UNUSED(index);
     PARROT_FAILURE("Wrong call");
     return 0.0;
 }
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static STRING*
-string_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
+string_constant_from_varargs(SHIM_INTERP, SHIM(void *data), SHIM(INTVAL index))
 {
     ASSERT_ARGS(string_constant_from_varargs)
-    UNUSED(index);
     PARROT_FAILURE("Wrong call");
     return NULL;
 }
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC*
-pmc_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
+pmc_constant_from_varargs(SHIM_INTERP, SHIM(void *data), SHIM(INTVAL index))
 {
     ASSERT_ARGS(pmc_constant_from_varargs)
-    UNUSED(index);
     PARROT_FAILURE("Wrong call");
     return PMCNULL;
 }
@@ -1921,6 +1766,7 @@
 */
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC*
 clone_key_arg(PARROT_INTERP, ARGIN(PMC *key))
 {

Modified: branches/avl_string_cache/src/call/context.c
==============================================================================
--- branches/avl_string_cache/src/call/context.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/call/context.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2009, Parrot Foundation.
+Copyright (C) 2009-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -79,10 +79,10 @@
     ARGIN(const UINTVAL *number_regs_used))
         __attribute__nonnull__(2);
 
-static void clear_regs(PARROT_INTERP, ARGMOD(PMC *pmcctx))
+static void clear_regs(PARROT_INTERP, ARGMOD(Parrot_Context *ctx))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        FUNC_MODIFIES(*pmcctx);
+        FUNC_MODIFIES(*ctx);
 
 PARROT_INLINE
 PARROT_CANNOT_RETURN_NULL
@@ -111,7 +111,7 @@
        PARROT_ASSERT_ARG(number_regs_used))
 #define ASSERT_ARGS_clear_regs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmcctx))
+    , PARROT_ASSERT_ARG(ctx))
 #define ASSERT_ARGS_get_context_struct_fast __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ctx))
@@ -242,7 +242,7 @@
 
 /*
 
-=item C<static void clear_regs(PARROT_INTERP, PMC *pmcctx)>
+=item C<static void clear_regs(PARROT_INTERP, Parrot_Context *ctx)>
 
 Clears all registers in a context.  PMC and STRING registers contain PMCNULL
 and NULL, respectively.  Integer and float registers contain negative flag
@@ -253,11 +253,10 @@
 */
 
 static void
-clear_regs(PARROT_INTERP, ARGMOD(PMC *pmcctx))
+clear_regs(PARROT_INTERP, ARGMOD(Parrot_Context *ctx))
 {
     ASSERT_ARGS(clear_regs)
     UINTVAL i;
-    Parrot_Context *ctx = get_context_struct_fast(interp, pmcctx);
 
     /* NULL out registers - P/S have to be NULL for GC
      *
@@ -269,7 +268,7 @@
     }
 
     for (i = 0; i < ctx->n_regs_used[REGNO_STR]; i++) {
-        ctx->bp_ps.regs_s[i] = NULL;
+        ctx->bp_ps.regs_s[i] = STRINGNULL;
     }
 
     if (Interp_debug_TEST(interp, PARROT_REG_DEBUG_FLAG)) {
@@ -350,7 +349,7 @@
     }
 
     /* other stuff is set inside Sub.invoke */
-    clear_regs(interp, pmcctx);
+    clear_regs(interp, ctx);
 }
 
 
@@ -488,7 +487,7 @@
     /* ctx.bp_ps points to S0, which has Px on the left */
     ctx->bp_ps.regs_s = (STRING **)((char *)ctx->registers + size_nip);
 
-    clear_regs(interp, pmcctx);
+    clear_regs(interp, ctx);
 }
 
 

Modified: branches/avl_string_cache/src/call/ops.c
==============================================================================
--- branches/avl_string_cache/src/call/ops.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/call/ops.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -22,6 +22,7 @@
 #include "parrot/parrot.h"
 #include "parrot/oplib/ops.h"
 #include "pmc/pmc_continuation.h"
+#include "parrot/runcore_api.h"
 
 /* HEADERIZER HFILE: include/parrot/call.h */
 

Modified: branches/avl_string_cache/src/call/pcc.c
==============================================================================
--- branches/avl_string_cache/src/call/pcc.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/call/pcc.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -53,9 +53,6 @@
 /* HEADERIZER END: static */
 
 
-/* Make sure we don't conflict with any other MAX() macros defined elsewhere */
-#define PARROT_MAX(a, b) (((a)) > (b) ? (a) : (b))
-
 /*
 
 =item C<void Parrot_pcc_invoke_sub_from_c_args(PARROT_INTERP, PMC *sub_obj,
@@ -78,9 +75,10 @@
     PMC         *call_obj;
     va_list      args;
     const char  *arg_sig, *ret_sig;
-    PMC         *old_call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
+    PMC         * const old_call_obj =
+        Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
 
-    Parrot_pcc_split_signature_string(interp, sig, &arg_sig, &ret_sig);
+    Parrot_pcc_split_signature_string(sig, &arg_sig, &ret_sig);
 
     va_start(args, sig);
     call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL,
@@ -228,9 +226,10 @@
     PMC        *sub_obj;
     va_list     args;
     const char *arg_sig, *ret_sig;
-    PMC        *old_call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
+    PMC        * const old_call_obj =
+        Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
 
-    Parrot_pcc_split_signature_string(interp, signature, &arg_sig, &ret_sig);
+    Parrot_pcc_split_signature_string(signature, &arg_sig, &ret_sig);
 
     va_start(args, signature);
     call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, arg_sig, &args);
@@ -341,7 +340,7 @@
     opcode_t    *dest;
     UINTVAL      n_regs_used[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
     PMC         *ctx  = Parrot_push_context(interp, n_regs_used);
-    PMC * const  ret_cont = new_ret_continuation_pmc(interp, NULL);
+    PMC * const  ret_cont = pmc_new(interp, enum_class_Continuation);
 
     Parrot_pcc_set_signature(interp, ctx, call_object);
     Parrot_pcc_set_continuation(interp, ctx, ret_cont);

Modified: branches/avl_string_cache/src/debug.c
==============================================================================
--- branches/avl_string_cache/src/debug.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/debug.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1314,8 +1314,9 @@
     cond_argleft = condition_regtype(command);
 
     /* get the register number */
-    auxcmd = ++command;
-    get_uint(&command, 0);
+    auxcmd     = ++command;
+    reg_number = get_uint(&command, 0);
+
     if (auxcmd == command) {
         Parrot_io_eprintf(interp->pdb->debugger, "Invalid register\n");
             return NULL;
@@ -2198,7 +2199,14 @@
             *(fill++) = '"';
             break;
           default:
-            *(fill++) = *string;
+            /* Hide non-ascii chars that may come from utf8 or latin-1
+             * strings in constant strings.
+             * Workaround for TT #1557
+             */
+            if ((unsigned char)*string > 127)
+                *(fill++) = '?';
+            else
+                *(fill++) = *string;
             break;
         }
     }

Modified: branches/avl_string_cache/src/dynext.c
==============================================================================
--- branches/avl_string_cache/src/dynext.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/dynext.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -294,7 +294,7 @@
 
         for (i = 0; i < n; ++i) {
             ext = VTABLE_get_string_keyed_int(interp, share_ext, i);
-            full_name = Parrot_str_concat(interp, wo_ext, ext, 0);
+            full_name = Parrot_str_concat(interp, wo_ext, ext);
             path = Parrot_locate_runtime_file_str(interp, full_name,
                     PARROT_RUNTIME_FT_DYNEXT);
             if (path) {
@@ -341,7 +341,7 @@
     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, NULL, 0);
+            path = Parrot_str_substr(interp, lib, 3, lib->strlen - 3);
             return path;
         }
     }
@@ -350,8 +350,8 @@
     /* And on cygwin replace a leading "lib" by "cyg". */
 #ifdef __CYGWIN__
     if (!STRING_IS_EMPTY(lib) && memcmp(lib->strstart, "lib", 3) == 0) {
-        path = Parrot_str_append(interp, CONST_STRING(interp, "cyg"),
-            Parrot_str_substr(interp, lib, 3, lib->strlen - 3, NULL, 0));
+        path = Parrot_str_concat(interp, CONST_STRING(interp, "cyg"),
+            Parrot_str_substr(interp, lib, 3, lib->strlen - 3));
 
         *handle = dlopen_string(interp, flags, path);
 

Deleted: branches/avl_string_cache/src/dynpmc/gdbmhash.pmc
==============================================================================
--- branches/avl_string_cache/src/dynpmc/gdbmhash.pmc	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,442 +0,0 @@
-/* gdbmhash.pmc
- *  Copyright (C) 2005-2010, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     These are the vtable functions for the GDBMHash PMC
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *     Please remove unneeded entries.
- *  References:
-
-=head1 NAME
-
-src/dynpmc/gdbmhash.pmc - GDBM PMC
-
-=head1 DESCRIPTION
-
-This is an interface to the GNU dbm library.
-
-=head1 keys
-
-On inserted and fetch, keys are converted to STRINGs.
-
-=head2 store
-
-PMC insert values are converted to STRINGs.
-
-=head2 fetch
-
-C<get_integer_keyed()> and C<get_number_keyed()> probably don't make
-any sense, as integers usually can't be converted.
-
-When a PMC is requested, a String PMC is returned.
-
-
-=head2 Functions
-
-=over 4
-
-=cut
-
- */
-
-#include <gdbm.h>
-#include "parrot/extend.h"
-
-typedef struct GDBM_FH {
-    GDBM_FILE f;
-} GDBM_FH;
-
-#define PMC_dbfh(x) ((Parrot_GDBMHash_attributes *)PMC_data(x))->db_handle->f
-
-
-/*
-
-=item C<static STRING* make_hash_key(PARROT_INTERP, PMC *key)>
-
-Returns a Parrot string for C<*key>.
-
-=cut
-
-*/
-
-static STRING* make_hash_key(PARROT_INTERP, ARGIN(PMC * key))
-{
-    if (key)
-        return VTABLE_get_string(interp, key);
-
-    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
-        "Hash: Cannot use NULL key");
-}
-
-
-pmclass GDBMHash provides hash dynpmc lib gdbm auto_attrs {
-    ATTR struct GDBM_FH *db_handle;
-
-/*
-
-=item C<void class_init()>
-
-Class initialization. GDBMHash is a dynamic PMC, meaning that a dynamically
-loadable module is created. On Unix-like systems this is a shared library.
-When it is available, the shared library has linked in the library 'gdbm'.
-
-On WIN32 the relevant library seems to be called 'gdbm3'.
-So we do a bit of cheating here, and load it during class initialization.
-
-=cut
-
-*/
-
-    VTABLE void class_init() {
-#ifdef WIN32
-        /* TT #1252:  What if libgdbm.so cannot be loaded */
-        /* Parrot_load_lib(interp, slib, NULL); */
-        STRING *slib = CONST_STRING(interp, "gdbm3");
-#endif
-    }
-
-    VTABLE void init() {
-        Parrot_GDBMHash_attributes *attrs = PARROT_GDBMHASH(SELF);
-        attrs->db_handle = mem_gc_allocate_zeroed_typed(INTERP, GDBM_FH);
-        PObj_custom_destroy_SET(SELF);
-    }
-
-    VTABLE void destroy() {
-        Parrot_GDBMHash_attributes *attrs = PARROT_GDBMHASH(SELF);
-        mem_gc_free(INTERP, attrs->db_handle);
-        PMC_data(SELF) = NULL;
-    }
-
-    VTABLE void* get_pointer() {
-        return PMC_dbfh(SELF);
-    }
-
-    VTABLE void set_pointer(void* p) {
-        PMC_dbfh(SELF) = (GDBM_FILE)p;
-    }
-
-/*
-
-=item C<VOID set_string_native(STRING* value)>
-
-Open a or create a new dbm file.
-
-=cut
-
-*/
-
-    VTABLE void set_string_native(STRING* value) {
-        char * const c_db_name = Parrot_str_to_cstring(interp, value);
-        GDBM_FILE dbf          = gdbm_open(c_db_name, 0, GDBM_NEWDB, 0666, 0);
-
-        Parrot_str_free_cstring(c_db_name);
-
-        PMC_dbfh(SELF) = dbf;
-    }
-
-/*
-
-=item C<INTVAL get_integer()>
-
-Returns the number of pairs in the hash.
-A uninitialized GDBMHash returns 0.
-
-=cut
-
-*/
-
-    VTABLE INTVAL get_integer() {
-        GDBM_FILE dbf = PMC_dbfh(SELF);
-        if (! dbf) {
-            return 0;
-        }
-        else {
-            INTVAL cnt = 0;
-            datum key, nextkey;
-            for (key = gdbm_firstkey(dbf); key.dptr; key = nextkey) {
-                cnt++;
-                nextkey = gdbm_nextkey(dbf, key);
-                free(key.dptr);
-            }
-
-            return cnt;
-        }
-    }
-
-/*
-
-=item C<INTVAL get_bool()>
-
-Returns true if the hash size is not zero.
-
-=cut
-
-*/
-
-    VTABLE INTVAL get_bool() {
-        GDBM_FILE dbf = PMC_dbfh(SELF);
-        if (! dbf) {
-            return 0;
-        }
-        else {
-            datum key = gdbm_firstkey(dbf);
-            if (key.dptr) {
-                return 1;
-            }
-            else {
-                return 0;
-            }
-        }
-    }
-
-/*
-
-=item C<void set_string_keyed(PMC *key, STRING *value)>
-
-=cut
-
-*/
-
-    VTABLE void set_string_keyed(PMC* key, STRING* value) {
-        STRING* keystr;
-        GDBM_FILE dbf = PMC_dbfh(SELF);
-        datum key_gdbm, val_gdbm;
-
-        if (!key) return;
-        if (!dbf) return;
-        keystr = make_hash_key(interp, key);
-
-        key_gdbm.dptr  = Parrot_str_to_cstring(interp, keystr);
-        key_gdbm.dsize = strlen(key_gdbm.dptr);
-        val_gdbm.dptr  = Parrot_str_to_cstring(interp, value);
-        val_gdbm.dsize = strlen(val_gdbm.dptr);
-
-        gdbm_store(dbf, key_gdbm, val_gdbm, GDBM_REPLACE);
-
-        Parrot_str_free_cstring(key_gdbm.dptr);
-        Parrot_str_free_cstring(val_gdbm.dptr);
-
-        return;
-    }
-
-/*
-
-=item C<STRING *get_string_keyed(PMC *key)>
-
-Returns the string value for the element at C<*key>.
-
-=cut
-
-*/
-
-    VTABLE STRING* get_string_keyed(PMC *key) {
-        STRING *keystr, *val;
-        GDBM_FILE dbf = PMC_dbfh(SELF);
-        datum key_gdbm, val_gdbm;
-
-        if (!key)
-            return string_from_literal(INTERP, "");
-
-        if (!dbf)
-            return string_from_literal(INTERP, "");
-
-        keystr         = make_hash_key(interp, key);
-
-        key_gdbm.dptr  = Parrot_str_to_cstring(interp, keystr);
-        key_gdbm.dsize = strlen(key_gdbm.dptr);
-        val_gdbm       = gdbm_fetch(dbf, key_gdbm);
-
-        val = Parrot_str_new(interp, val_gdbm.dptr, val_gdbm.dsize);
-        Parrot_str_free_cstring(key_gdbm.dptr);
-        free(val_gdbm.dptr);
-
-        return val;
-    }
-
-
-/*
-
-=item C<void set_pmc_keyed(PMC* key, PMC *value)>
-
-Convert C<value> to a string and set the string for the C<key>.
-
-=cut
-
-*/
-
-    VTABLE void set_pmc_keyed(PMC* key, PMC* value) {
-        STRING * const temp = VTABLE_get_string(interp, value);
-
-        SELF.set_string_keyed(key, temp);
-    }
-
-/*
-
-=item C<PMC *get_pmc_keyed(PMC *key)>
-
-Returns the PMC value for the element at C<*key>.
-
-=cut
-
-*/
-
-    VTABLE PMC* get_pmc_keyed(PMC* key) {
-        STRING * const ret_string = SELF.get_string_keyed(key);
-        PMC    * const ret_pmc    = Parrot_pmc_new(interp, enum_class_String);
-
-        VTABLE_set_string_native(interp, ret_pmc, ret_string);
-
-        return ret_pmc;
-    }
-
-/*
-
-=item C<void set_integer_keyed(PMC* key, INTVAL value)>
-
-Convert C<value> to a string and set the string for the C<key>.
-
-=cut
-
-*/
-
-    VTABLE void set_integer_keyed(PMC* key, INTVAL value) {
-        PMC * const temp = Parrot_pmc_new(interp, enum_class_String);
-
-        VTABLE_set_integer_native(interp, temp, value);
-        SELF.set_pmc_keyed(key, temp);
-    }
-
-
-/*
-
-=item C<void set_number_keyed(PMC* key, FLOATVAL value)>
-
-Convert C<value> to a string and set the string for the C<key>.
-
-=cut
-
-*/
-
-    VTABLE void set_number_keyed(PMC* key, FLOATVAL value) {
-        PMC * const temp = Parrot_pmc_new(interp, enum_class_String);
-
-        VTABLE_set_number_native(interp, temp, value);
-        SELF.set_pmc_keyed(key, temp);
-    }
-
-/*
-
-=item C<INTVAL exists_keyed(PMC *key)>
-
-Returns whether a key C<*key> exists in the hash.
-
-=cut
-
-*/
-
-    VTABLE INTVAL exists_keyed(PMC* key) {
-        STRING* keystr;
-        GDBM_FILE dbf = PMC_dbfh(SELF);
-        datum key_gdbm;
-        INTVAL ret;
-
-        if (!key) return 0;
-        if (!dbf) return 0;
-        keystr = make_hash_key(interp, key);
-
-        key_gdbm.dptr  = Parrot_str_to_cstring(interp, keystr);
-        key_gdbm.dsize = strlen(key_gdbm.dptr);
-
-        ret = gdbm_exists(dbf, key_gdbm);
-        Parrot_str_free_cstring(key_gdbm.dptr);
-
-        return ret;
-    }
-
-/*
-
-=item C<void delete_keyed(PMC *key)>
-
-Deletes the element associated with C<*key>.
-
-=cut
-
-*/
-
-    VTABLE void delete_keyed(PMC* key) {
-        STRING* keystr;
-        GDBM_FILE dbf = PMC_dbfh(SELF);
-        datum key_gdbm;
-
-        if (!key) return;
-        if (!dbf) return;
-        keystr = make_hash_key(interp, key);
-
-        key_gdbm.dptr  = Parrot_str_to_cstring(interp, keystr);
-        key_gdbm.dsize = strlen(key_gdbm.dptr);
-
-        if (gdbm_exists(dbf, key_gdbm)) {
-           gdbm_delete(dbf, key_gdbm);
-        }
-
-        Parrot_str_free_cstring(key_gdbm.dptr);
-
-        return;
-    }
-
-/*
-
-=back
-
-=head2 Specific Methods
-
-=over 4
-
-=item C<void open(STRING* value)>
-
-Open a or create a new dbm file.
-
-=cut
-
-*/
-
-    METHOD void open(STRING* value) {
-        VTABLE_set_string_native(interp, SELF, value);
-    }
-
-/*
-
-=item C<void close()>
-
-Close current dbm file.
-
-=cut
-
-*/
-
-    METHOD void close() {
-        gdbm_close(PMC_dbfh(SELF));
-    }
-}
-
-/*
-
-=back
-
-=head1 SEE ALSO
-
-F<docs/pdds/pdd08_keys.pod>, L<http://gdbm.gnu.org>
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/avl_string_cache/src/embed.c
==============================================================================
--- branches/avl_string_cache/src/embed.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/embed.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -44,7 +44,7 @@
         __attribute__nonnull__(1);
 
 PARROT_CANNOT_RETURN_NULL
-static PMC* setup_argv(PARROT_INTERP, int argc, ARGIN(char **argv))
+static PMC* setup_argv(PARROT_INTERP, int argc, ARGIN(const char **argv))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
@@ -618,7 +618,7 @@
 
 /*
 
-=item C<static PMC* setup_argv(PARROT_INTERP, int argc, char **argv)>
+=item C<static PMC* setup_argv(PARROT_INTERP, int argc, const char **argv)>
 
 Creates and returns C<ARGS> array PMC.
 
@@ -628,7 +628,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static PMC*
-setup_argv(PARROT_INTERP, int argc, ARGIN(char **argv))
+setup_argv(PARROT_INTERP, int argc, ARGIN(const char **argv))
 {
     ASSERT_ARGS(setup_argv)
     PMC   * const userargv = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
@@ -748,7 +748,7 @@
 
 /*
 
-=item C<void Parrot_runcode(PARROT_INTERP, int argc, char **argv)>
+=item C<void Parrot_runcode(PARROT_INTERP, int argc, const char **argv)>
 
 Sets up C<ARGV> and runs the ops.
 
@@ -758,7 +758,7 @@
 
 PARROT_EXPORT
 void
-Parrot_runcode(PARROT_INTERP, int argc, ARGIN(char **argv))
+Parrot_runcode(PARROT_INTERP, int argc, ARGIN(const char **argv))
 {
     PMC *userargv, *main_sub;
 

Modified: branches/avl_string_cache/src/exceptions.c
==============================================================================
--- branches/avl_string_cache/src/exceptions.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/exceptions.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -89,6 +89,7 @@
 */
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 die_from_exception(PARROT_INTERP, ARGIN(PMC *exception))
 {
@@ -326,6 +327,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_ex_throw_from_c(PARROT_INTERP, ARGIN(PMC *exception))
 {
@@ -423,6 +425,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_ex_throw_from_c_args(PARROT_INTERP, SHIM(void *ret_addr),
         int exitcode, ARGIN(const char *format), ...)
@@ -476,6 +479,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_ex_rethrow_from_c(PARROT_INTERP, ARGIN(PMC *exception))
 {
@@ -511,8 +515,8 @@
 
 =over 4
 
-=item C<PARROT_DOES_NOT_RETURN_WHEN_FALSE void Parrot_assert(INTVAL condition,
-const char *condition_string, const char *file, unsigned int line)>
+=item C<void Parrot_assert(INTVAL condition, const char *condition_string, const
+char *file, unsigned int line)>
 
 A better version of assert() that gives a backtrace.
 
@@ -544,6 +548,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_confess(ARGIN(const char *cond), ARGIN(const char *file), unsigned int line)
 {
@@ -637,6 +642,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 exit_fatal(int exitcode, ARGIN(const char *format), ...)
 {
@@ -675,6 +681,7 @@
 */
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 do_panic(NULLOK_INTERP, ARGIN_NULLOK(const char *message),
          ARGIN_NULLOK(const char *file), unsigned int line)

Modified: branches/avl_string_cache/src/exit.c
==============================================================================
--- branches/avl_string_cache/src/exit.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/exit.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -62,6 +62,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_exit(PARROT_INTERP, int status)
 {
@@ -103,10 +104,6 @@
 
 F<include/parrot/exit.h> and F<t/src/exit.t>.
 
-=head1 HISTORY
-
-Initial version by Josh Wilmes.
-
 =cut
 
 */

Modified: branches/avl_string_cache/src/extend.c
==============================================================================
--- branches/avl_string_cache/src/extend.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/extend.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -417,10 +417,10 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char *
-Parrot_PMC_get_cstring_intkey(PARROT_INTERP,
-        Parrot_PMC pmc, Parrot_Int key)
+Parrot_PMC_get_cstring_intkey(PARROT_INTERP, Parrot_PMC pmc, Parrot_Int key)
 {
     ASSERT_ARGS(Parrot_PMC_get_cstring_intkey)
     STRING *intermediate;
@@ -448,7 +448,8 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 char *
 Parrot_PMC_get_cstring(PARROT_INTERP, Parrot_PMC pmc)
 {
@@ -482,10 +483,10 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char *
-Parrot_PMC_get_cstringn(PARROT_INTERP, ARGIN(Parrot_PMC pmc),
-        ARGOUT(Parrot_Int *length))
+Parrot_PMC_get_cstringn(PARROT_INTERP, ARGIN(Parrot_PMC pmc), ARGOUT(Parrot_Int *length))
 {
     ASSERT_ARGS(Parrot_PMC_get_cstringn)
     char *retval;
@@ -516,7 +517,8 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char *
 Parrot_PMC_get_cstringn_intkey(PARROT_INTERP, ARGIN(Parrot_PMC pmc),
         ARGOUT(Parrot_Int *length), Parrot_Int key)
@@ -832,8 +834,7 @@
 
 PARROT_EXPORT
 void
-Parrot_PMC_push_intval(PARROT_INTERP,
-        Parrot_PMC pmc, Parrot_Int value)
+Parrot_PMC_push_intval(PARROT_INTERP, Parrot_PMC pmc, Parrot_Int value)
 {
     ASSERT_ARGS(Parrot_PMC_push_intval)
     PARROT_CALLIN_START(interp);
@@ -1003,7 +1004,7 @@
 
 PARROT_EXPORT
 void
-Parrot_free_cstring(ARGIN_NULLOK(char *string))
+Parrot_free_cstring(ARGFREE(char *string))
 {
     ASSERT_ARGS(Parrot_free_cstring)
     Parrot_str_free_cstring(string);
@@ -1050,9 +1051,9 @@
     PMC  *call_obj;
     const char *arg_sig, *ret_sig;
 
-    PMC  *old_call_obj = Parrot_pcc_get_signature(interp,
+    PMC  * const old_call_obj = Parrot_pcc_get_signature(interp,
         CURRENT_CONTEXT(interp));
-    Parrot_pcc_split_signature_string(interp, signature, &arg_sig, &ret_sig);
+    Parrot_pcc_split_signature_string(signature, &arg_sig, &ret_sig);
 
     va_start(args, signature);
     call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL,

Modified: branches/avl_string_cache/src/gc/alloc_resources.c
==============================================================================
--- branches/avl_string_cache/src/gc/alloc_resources.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/gc/alloc_resources.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -39,15 +39,14 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void alloc_new_block(PARROT_INTERP,
-    ARGMOD(Memory_Pools *mem_pools),
+static void alloc_new_block(
+     ARGMOD(Memory_Pools *mem_pools),
     size_t size,
     ARGMOD(Variable_Size_Pool *pool),
     ARGIN(const char *why))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         __attribute__nonnull__(4)
-        __attribute__nonnull__(5)
         FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool);
 
@@ -60,10 +59,8 @@
 static void check_fixed_size_obj_pool(ARGIN(const Fixed_Size_Pool *pool))
         __attribute__nonnull__(1);
 
-static void check_memory_system(PARROT_INTERP,
-    ARGIN(const Memory_Pools *mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+static void check_memory_system(ARGIN(const Memory_Pools *mem_pools))
+        __attribute__nonnull__(1);
 
 static void check_var_size_obj_pool(ARGIN(const Variable_Size_Pool *pool))
         __attribute__nonnull__(1);
@@ -80,15 +77,14 @@
         FUNC_MODIFIES(*dest_interp);
 
 static void free_memory_pool(ARGFREE(Variable_Size_Pool *pool));
-static void free_old_mem_blocks(PARROT_INTERP,
-    ARGMOD(Memory_Pools *mem_pools),
+static void free_old_mem_blocks(
+     ARGMOD(Memory_Pools *mem_pools),
     ARGMOD(Variable_Size_Pool *pool),
     ARGMOD(Memory_Block *new_block),
     UINTVAL total_size)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
         FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool)
         FUNC_MODIFIES(*new_block);
@@ -113,9 +109,8 @@
     ARGIN_NULLOK(compact_f compact));
 
 PARROT_CANNOT_RETURN_NULL
-static UINTVAL pad_pool_size(PARROT_INTERP, ARGIN(Variable_Size_Pool *pool))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+static UINTVAL pad_pool_size(ARGIN(const Variable_Size_Pool *pool))
+        __attribute__nonnull__(1);
 
 static void Parrot_gc_merge_buffer_pools(PARROT_INTERP,
     ARGMOD(Memory_Pools *mem_pools),
@@ -149,8 +144,7 @@
         FUNC_MODIFIES(*pool);
 
 #define ASSERT_ARGS_alloc_new_block __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools) \
+       PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(why))
 #define ASSERT_ARGS_buffer_location __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -159,8 +153,7 @@
 #define ASSERT_ARGS_check_fixed_size_obj_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_check_memory_system __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_check_var_size_obj_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_debug_print_buf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -171,8 +164,7 @@
     , PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_free_memory_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_free_old_mem_blocks __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools) \
+       PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(new_block))
 #define ASSERT_ARGS_free_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -182,8 +174,7 @@
     , PARROT_ASSERT_ARG(new_pool_ptr))
 #define ASSERT_ARGS_new_memory_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pad_pool_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pool))
+       PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_Parrot_gc_merge_buffer_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -202,8 +193,8 @@
 
 /*
 
-=item C<static void alloc_new_block(PARROT_INTERP, Memory_Pools *mem_pools,
-size_t size, Variable_Size_Pool *pool, const char *why)>
+=item C<static void alloc_new_block( Memory_Pools *mem_pools, size_t size,
+Variable_Size_Pool *pool, const char *why)>
 
 Allocate a new memory block. We allocate either the requested size or the
 default size, whichever is larger. Add the new block to the given memory
@@ -214,7 +205,7 @@
 */
 
 static void
-alloc_new_block(PARROT_INTERP,
+alloc_new_block(
         ARGMOD(Memory_Pools *mem_pools),
         size_t size,
         ARGMOD(Variable_Size_Pool *pool),
@@ -348,7 +339,7 @@
              * Mark the block as big block (it has just one item)
              * And don't set big blocks as the top_block.
              */
-            alloc_new_block(interp, mem_pools, size, pool, "compact failed");
+            alloc_new_block(mem_pools, size, pool, "compact failed");
 
             mem_pools->mem_allocs_since_last_collect++;
 
@@ -465,8 +456,8 @@
     mem_pools->gc_collect_runs++;
 
     /* Snag a block big enough for everything */
-    total_size = pad_pool_size(interp, pool);
-    alloc_new_block(interp, mem_pools, total_size, pool, "inside compact");
+    total_size = pad_pool_size(pool);
+    alloc_new_block(mem_pools, total_size, pool, "inside compact");
 
     new_block = pool->top_block;
 
@@ -508,14 +499,14 @@
     new_block->free = new_block->size - (cur_spot - new_block->start);
     mem_pools->memory_collected +=      (cur_spot - new_block->start);
 
-    free_old_mem_blocks(interp, mem_pools, pool, new_block, total_size);
+    free_old_mem_blocks(mem_pools, pool, new_block, total_size);
 
     --mem_pools->gc_sweep_block_level;
 }
 
 /*
 
-=item C<static UINTVAL pad_pool_size(PARROT_INTERP, Variable_Size_Pool *pool)>
+=item C<static UINTVAL pad_pool_size(const Variable_Size_Pool *pool)>
 
 Calculate the size of the new pool. The currently used size equals the total
 size minus the reclaimable size. Add a minimum block to the current amount, so
@@ -542,11 +533,10 @@
 
 PARROT_CANNOT_RETURN_NULL
 static UINTVAL
-pad_pool_size(PARROT_INTERP,
-        ARGIN(Variable_Size_Pool *pool))
+pad_pool_size(ARGIN(const Variable_Size_Pool *pool))
 {
     ASSERT_ARGS(pad_pool_size)
-    Memory_Block *cur_block = pool->top_block;
+    const Memory_Block *cur_block = pool->top_block;
 
     UINTVAL total_size = 0;
 
@@ -597,6 +587,8 @@
 #if RESOURCE_DEBUG
         if (Buffer_buflen(old_buf) >= RESOURCE_DEBUG_SIZE)
             debug_print_buf(interp, old_buf);
+#else
+        UNUSED(interp);
 #endif
 
         /* we can't perform the math all the time, because
@@ -677,7 +669,7 @@
 
 /*
 
-=item C<static void free_old_mem_blocks(PARROT_INTERP, Memory_Pools *mem_pools,
+=item C<static void free_old_mem_blocks( Memory_Pools *mem_pools,
 Variable_Size_Pool *pool, Memory_Block *new_block, UINTVAL total_size)>
 
 The compact_pool operation collects disjointed blocks of memory allocated on a
@@ -693,7 +685,7 @@
 */
 
 static void
-free_old_mem_blocks(PARROT_INTERP,
+free_old_mem_blocks(
         ARGMOD(Memory_Pools *mem_pools),
         ARGMOD(Variable_Size_Pool *pool),
         ARGMOD(Memory_Block *new_block),
@@ -743,21 +735,9 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 char *
-aligned_mem(ARGIN(const Buffer *buffer), ARGIN(char *mem))
+aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
 {
     ASSERT_ARGS(aligned_mem)
-#if 0
-    This code causing assert in compact_pool. Looks like STRINGs have
-    aligned flag set, but allocated less memory.
-    See C<aligned_string_size>.
-    if (PObj_is_COWable_TEST(buffer))
-        mem += sizeof (void*);
-    if (PObj_aligned_TEST(buffer))
-        mem = (char*)(((unsigned long)(mem + BUFFER_ALIGN_1)) &
-                BUFFER_ALIGN_MASK);
-    else
-        mem = (char*)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
-#endif
     mem += sizeof (void *);
     mem  = (char *)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
 
@@ -839,16 +819,16 @@
 */
 
 void
-initialize_var_size_pools(PARROT_INTERP, ARGMOD(Memory_Pools *mem_pools))
+initialize_var_size_pools(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(initialize_var_size_pools)
 
     mem_pools->memory_pool   = new_memory_pool(POOL_SIZE, &compact_pool);
-    alloc_new_block(interp, mem_pools, POOL_SIZE, mem_pools->memory_pool, "init");
+    alloc_new_block(mem_pools, POOL_SIZE, mem_pools->memory_pool, "init");
 
     /* Constant strings - not compacted */
     mem_pools->constant_string_pool = new_memory_pool(POOL_SIZE, NULL);
-    alloc_new_block(interp, mem_pools, POOL_SIZE, mem_pools->constant_string_pool, "init");
+    alloc_new_block(mem_pools, POOL_SIZE, mem_pools->constant_string_pool, "init");
 }
 
 
@@ -898,8 +878,7 @@
 
 /*
 
-=item C<static void check_memory_system(PARROT_INTERP, const Memory_Pools
-*mem_pools)>
+=item C<static void check_memory_system(const Memory_Pools *mem_pools)>
 
 Checks the memory system of parrot on any corruptions, including
 the string system.
@@ -909,7 +888,7 @@
 */
 
 static void
-check_memory_system(PARROT_INTERP, ARGIN(const Memory_Pools *mem_pools))
+check_memory_system(ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(check_memory_system)
     size_t i;
@@ -1282,8 +1261,7 @@
 */
 
 void
-Parrot_gc_destroy_memory_pools(PARROT_INTERP,
-        ARGMOD(Memory_Pools *mem_pools))
+Parrot_gc_destroy_memory_pools(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(Parrot_gc_destroy_memory_pools)
 

Modified: branches/avl_string_cache/src/gc/api.c
==============================================================================
--- branches/avl_string_cache/src/gc/api.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/gc/api.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -205,7 +205,7 @@
 
 PARROT_EXPORT
 void
-Parrot_gc_mark_STRING_alive_fun(PARROT_INTERP, ARGMOD_NULLOK(STRING *obj))
+Parrot_gc_mark_STRING_alive_fun(SHIM_INTERP, ARGMOD_NULLOK(STRING *obj))
 {
     ASSERT_ARGS(Parrot_gc_mark_STRING_alive_fun)
     if (!STRING_IS_NULL(obj)) {

Modified: branches/avl_string_cache/src/gc/gc_inf.c
==============================================================================
--- branches/avl_string_cache/src/gc/gc_inf.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/gc/gc_inf.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -42,21 +42,19 @@
 PARROT_DOES_NOT_RETURN
 static void failed_allocation(unsigned int line, unsigned long size);
 
-static void gc_inf_allocate_buffer_storage(PARROT_INTERP,
+static void gc_inf_allocate_buffer_storage(SHIM_INTERP,
     ARGMOD(Buffer *buffer),
     size_t size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*buffer);
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
-static Buffer* gc_inf_allocate_bufferlike_header(PARROT_INTERP,
-    SHIM(size_t size))
-        __attribute__nonnull__(1);
+static Buffer* gc_inf_allocate_bufferlike_header(SHIM_INTERP,
+    SHIM(size_t size));
 
 PARROT_CAN_RETURN_NULL
-static void* gc_inf_allocate_fixed_size_storage(PARROT_INTERP, size_t size)
-        __attribute__nonnull__(1);
+static void* gc_inf_allocate_fixed_size_storage(SHIM_INTERP, size_t size);
 
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
@@ -66,64 +64,50 @@
 PARROT_CANNOT_RETURN_NULL
 static void * gc_inf_allocate_memory_chunk_zeroed(SHIM_INTERP, size_t size);
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
-static void* gc_inf_allocate_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
-        __attribute__nonnull__(1)
+static void* gc_inf_allocate_pmc_attributes(SHIM_INTERP, ARGMOD(PMC *pmc))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
-static PMC* gc_inf_allocate_pmc_header(PARROT_INTERP, SHIM(UINTVAL flags))
-        __attribute__nonnull__(1);
+static PMC* gc_inf_allocate_pmc_header(SHIM_INTERP, SHIM(UINTVAL flags));
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
-static STRING* gc_inf_allocate_string_header(PARROT_INTERP,
-    SHIM(UINTVAL flags))
-        __attribute__nonnull__(1);
+static STRING* gc_inf_allocate_string_header(SHIM_INTERP,
+    SHIM(UINTVAL flags));
 
-static void gc_inf_allocate_string_storage(PARROT_INTERP,
+static void gc_inf_allocate_string_storage(SHIM_INTERP,
     ARGMOD(STRING *str),
     size_t size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*str);
 
-static void gc_inf_compact_memory_pool(PARROT_INTERP)
-        __attribute__nonnull__(1);
+static void gc_inf_compact_memory_pool(SHIM_INTERP);
+static void gc_inf_free_bufferlike_header(SHIM_INTERP,
+    ARGFREE(Buffer *b),
+    SHIM(size_t size));
 
-static void gc_inf_free_bufferlike_header(PARROT_INTERP,
-    ARGIN_NULLOK(Buffer *b),
-    SHIM(size_t size))
-        __attribute__nonnull__(1);
-
-static void gc_inf_free_fixed_size_storage(PARROT_INTERP,
+static void gc_inf_free_fixed_size_storage(SHIM_INTERP,
     SHIM(size_t size),
     ARGMOD(void *data))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*data);
 
 static void gc_inf_free_memory_chunk(SHIM_INTERP, ARGFREE(void *data));
-static void gc_inf_free_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
-        __attribute__nonnull__(1)
+static void gc_inf_free_pmc_attributes(SHIM_INTERP, ARGMOD(PMC *pmc))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
-static void gc_inf_free_pmc_header(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc))
-        __attribute__nonnull__(1);
-
-static void gc_inf_free_string_header(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *s))
-        __attribute__nonnull__(1);
-
-static size_t gc_inf_get_gc_info(PARROT_INTERP, SHIM(Interpinfo_enum what))
-        __attribute__nonnull__(1);
-
+static void gc_inf_free_pmc_header(SHIM_INTERP, ARGFREE(PMC *pmc));
+static void gc_inf_free_string_header(SHIM_INTERP, ARGFREE(STRING *s));
+static size_t gc_inf_get_gc_info(SHIM_INTERP, SHIM(Interpinfo_enum what));
 static void gc_inf_mark_and_sweep(SHIM_INTERP, UINTVAL flags);
-static void gc_inf_reallocate_buffer_storage(PARROT_INTERP,
+static void gc_inf_reallocate_buffer_storage(SHIM_INTERP,
     ARGMOD(Buffer *buffer),
     size_t size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*buffer);
 
@@ -140,70 +124,53 @@
     size_t newsize,
     size_t oldsize);
 
-static void gc_inf_reallocate_string_storage(PARROT_INTERP,
+static void gc_inf_reallocate_string_storage(SHIM_INTERP,
     ARGMOD(STRING *str),
     size_t size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*str);
 
 #define ASSERT_ARGS_failed_allocation __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_buffer_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(buffer))
+       PARROT_ASSERT_ARG(buffer))
 #define ASSERT_ARGS_gc_inf_allocate_bufferlike_header \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_fixed_size_storage \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_memory_chunk __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_memory_chunk_zeroed \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_pmc_attributes \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmc))
-#define ASSERT_ARGS_gc_inf_allocate_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_allocate_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_gc_inf_allocate_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_allocate_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_string_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(str))
-#define ASSERT_ARGS_gc_inf_compact_memory_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_free_bufferlike_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(str))
+#define ASSERT_ARGS_gc_inf_compact_memory_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_free_bufferlike_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_free_fixed_size_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+       PARROT_ASSERT_ARG(data))
 #define ASSERT_ARGS_gc_inf_free_memory_chunk __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_free_pmc_attributes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmc))
-#define ASSERT_ARGS_gc_inf_free_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_free_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_get_gc_info __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_gc_inf_free_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_free_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_get_gc_info __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_mark_and_sweep __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_reallocate_buffer_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(buffer))
+       PARROT_ASSERT_ARG(buffer))
 #define ASSERT_ARGS_gc_inf_reallocate_memory_chunk \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_reallocate_memory_chunk_zeroed \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_reallocate_string_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(str))
+       PARROT_ASSERT_ARG(str))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -247,7 +214,7 @@
 
 */
 static void
-gc_inf_compact_memory_pool(PARROT_INTERP)
+gc_inf_compact_memory_pool(SHIM_INTERP)
 {
     ASSERT_ARGS(gc_inf_compact_memory_pool)
 }
@@ -295,57 +262,61 @@
 
 */
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 static PMC*
-gc_inf_allocate_pmc_header(PARROT_INTERP, SHIM(UINTVAL flags))
+gc_inf_allocate_pmc_header(SHIM_INTERP, SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(gc_inf_allocate_pmc_header)
     return (PMC*)calloc(sizeof (PMC), 1);
 }
 
 static void
-gc_inf_free_pmc_header(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc))
+gc_inf_free_pmc_header(SHIM_INTERP, ARGFREE(PMC *pmc))
 {
     ASSERT_ARGS(gc_inf_free_pmc_header)
     if (pmc)
         free(pmc);
 }
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 static STRING*
-gc_inf_allocate_string_header(PARROT_INTERP, SHIM(UINTVAL flags))
+gc_inf_allocate_string_header(SHIM_INTERP, SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(gc_inf_allocate_string_header)
     return (STRING*)calloc(sizeof (STRING), 1);
 }
 
 static void
-gc_inf_free_string_header(PARROT_INTERP, ARGIN_NULLOK(STRING *s))
+gc_inf_free_string_header(SHIM_INTERP, ARGFREE(STRING *s))
 {
     ASSERT_ARGS(gc_inf_free_string_header)
     if (s)
         free(s);
 }
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 static Buffer*
-gc_inf_allocate_bufferlike_header(PARROT_INTERP, SHIM(size_t size))
+gc_inf_allocate_bufferlike_header(SHIM_INTERP, SHIM(size_t size))
 {
     ASSERT_ARGS(gc_inf_allocate_bufferlike_header)
     return (Buffer*)calloc(sizeof (Buffer), 1);
 }
 
 static void
-gc_inf_free_bufferlike_header(PARROT_INTERP, ARGIN_NULLOK(Buffer *b), SHIM(size_t size))
+gc_inf_free_bufferlike_header(SHIM_INTERP, ARGFREE(Buffer *b), SHIM(size_t size))
 {
     ASSERT_ARGS(gc_inf_free_bufferlike_header)
     if (b)
         free(b);
 }
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 static void*
-gc_inf_allocate_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
+gc_inf_allocate_pmc_attributes(SHIM_INTERP, ARGMOD(PMC *pmc))
 {
     ASSERT_ARGS(gc_inf_allocate_pmc_attributes)
     const size_t attr_size = pmc->vtable->attr_size;
@@ -354,7 +325,7 @@
 }
 
 static void
-gc_inf_free_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
+gc_inf_free_pmc_attributes(SHIM_INTERP, ARGMOD(PMC *pmc))
 {
     ASSERT_ARGS(gc_inf_free_pmc_attributes)
     if (PMC_data(pmc))
@@ -363,30 +334,27 @@
 
 
 static void
-gc_inf_allocate_string_storage(PARROT_INTERP, ARGMOD(STRING *str), size_t size)
+gc_inf_allocate_string_storage(SHIM_INTERP, ARGMOD(STRING *str), size_t size)
 {
     ASSERT_ARGS(gc_inf_allocate_string_storage)
-    char *mem;
-
-    Buffer_buflen(str)   = 0;
-    Buffer_bufstart(str) = NULL;
 
-    if (size == 0)
-        return;
+    Buffer_buflen(str)   = size;
 
-    mem      = (char *)mem_internal_allocate(size);
+    if (size > 0) {
+        char * const mem = (char *)mem_internal_allocate(size);
 
-    Buffer_bufstart(str) = str->strstart = mem;
-    Buffer_buflen(str)   = size;
+        Buffer_bufstart(str) = str->strstart = mem;
+    }
+    else {
+        Buffer_bufstart(str) = NULL;
+    }
 }
 
 static void
-gc_inf_reallocate_string_storage(PARROT_INTERP, ARGMOD(STRING *str), size_t size)
+gc_inf_reallocate_string_storage(SHIM_INTERP, ARGMOD(STRING *str), size_t size)
 {
     ASSERT_ARGS(gc_inf_reallocate_string_storage)
-    char *mem;
-
-    mem      = (char *)mem_internal_realloc(Buffer_bufstart(str), size);
+    char * const mem     = (char *)mem_internal_realloc(Buffer_bufstart(str), size);
 
     Buffer_bufstart(str) = str->strstart = mem;
     Buffer_buflen(str)   = size;
@@ -394,7 +362,7 @@
 
 
 static void
-gc_inf_allocate_buffer_storage(PARROT_INTERP, ARGMOD(Buffer *buffer), size_t size)
+gc_inf_allocate_buffer_storage(SHIM_INTERP, ARGMOD(Buffer *buffer), size_t size)
 {
     ASSERT_ARGS(gc_inf_allocate_buffer_storage)
     char *mem;
@@ -412,12 +380,10 @@
 }
 
 static void
-gc_inf_reallocate_buffer_storage(PARROT_INTERP, ARGMOD(Buffer *buffer), size_t size)
+gc_inf_reallocate_buffer_storage(SHIM_INTERP, ARGMOD(Buffer *buffer), size_t size)
 {
     ASSERT_ARGS(gc_inf_reallocate_buffer_storage)
-    char *mem;
-
-    mem = (char *)mem_internal_realloc(Buffer_bufstart(buffer), size);
+    char * const mem = (char *)mem_internal_realloc(Buffer_bufstart(buffer), size);
 
     Buffer_bufstart(buffer) = mem;
     Buffer_buflen(buffer)   = size;
@@ -425,14 +391,14 @@
 
 PARROT_CAN_RETURN_NULL
 static void*
-gc_inf_allocate_fixed_size_storage(PARROT_INTERP, size_t size)
+gc_inf_allocate_fixed_size_storage(SHIM_INTERP, size_t size)
 {
     ASSERT_ARGS(gc_inf_allocate_fixed_size_storage)
     return calloc(size, 1);
 }
 
 static void
-gc_inf_free_fixed_size_storage(PARROT_INTERP, SHIM(size_t size), ARGMOD(void *data))
+gc_inf_free_fixed_size_storage(SHIM_INTERP, SHIM(size_t size), ARGMOD(void *data))
 {
     ASSERT_ARGS(gc_inf_free_fixed_size_storage)
     if (data)
@@ -449,7 +415,7 @@
 
 */
 static size_t
-gc_inf_get_gc_info(PARROT_INTERP, SHIM(Interpinfo_enum what))
+gc_inf_get_gc_info(SHIM_INTERP, SHIM(Interpinfo_enum what))
 {
     ASSERT_ARGS(gc_inf_get_gc_info)
     return 0;

Modified: branches/avl_string_cache/src/gc/gc_ms.c
==============================================================================
--- branches/avl_string_cache/src/gc/gc_ms.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/gc/gc_ms.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -835,11 +835,11 @@
 {
     ASSERT_ARGS(gc_ms_allocate_buffer_storage)
     const size_t new_size   = aligned_string_size(size);
-    const char * const mem  = aligned_mem(buffer,
+
+    Buffer_bufstart(buffer) = (void *)aligned_mem(buffer,
         (char *)mem_allocate(interp,
         interp->mem_pools, new_size, interp->mem_pools->memory_pool));
 
-    Buffer_bufstart(buffer) = (void *)mem;
     Buffer_buflen(buffer)   = new_size - sizeof (void *);
 }
 

Modified: branches/avl_string_cache/src/gc/gc_private.h
==============================================================================
--- branches/avl_string_cache/src/gc/gc_private.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/gc/gc_private.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -486,8 +486,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-char * aligned_mem(ARGIN(const Buffer *buffer), ARGIN(char *mem))
-        __attribute__nonnull__(1)
+char * aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
         __attribute__nonnull__(2);
 
 PARROT_CONST_FUNCTION
@@ -511,9 +510,7 @@
         FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool);
 
-void initialize_var_size_pools(PARROT_INTERP,
-    ARGMOD(Memory_Pools *mem_pools))
-        __attribute__nonnull__(1)
+void initialize_var_size_pools(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*mem_pools);
 
@@ -543,9 +540,8 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*mem_pools);
 
-void Parrot_gc_destroy_memory_pools(PARROT_INTERP,
+void Parrot_gc_destroy_memory_pools(SHIM_INTERP,
     ARGMOD(Memory_Pools *mem_pools))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*mem_pools);
 
@@ -560,8 +556,7 @@
         FUNC_MODIFIES(*dest_arena);
 
 #define ASSERT_ARGS_aligned_mem __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(buffer) \
-    , PARROT_ASSERT_ARG(mem))
+       PARROT_ASSERT_ARG(mem))
 #define ASSERT_ARGS_aligned_string_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_check_buffer_ptr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pobj) \
@@ -571,8 +566,7 @@
     , PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_initialize_var_size_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_mem_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -586,8 +580,7 @@
     , PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_Parrot_gc_destroy_memory_pools \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_Parrot_gc_merge_memory_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(dest_interp) \
     , PARROT_ASSERT_ARG(dest_arena) \

Modified: branches/avl_string_cache/src/gc/mark_sweep.c
==============================================================================
--- branches/avl_string_cache/src/gc/mark_sweep.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/gc/mark_sweep.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -862,7 +862,7 @@
     ASSERT_ARGS(header_pools_iterate_callback)
 
     if (flag & POOL_PMC) {
-        Fixed_Size_Pool *pool = flag & POOL_CONST
+        Fixed_Size_Pool * const pool = flag & POOL_CONST
             ? mem_pools->constant_pmc_pool
             : mem_pools->pmc_pool;
 

Modified: branches/avl_string_cache/src/global.c
==============================================================================
--- branches/avl_string_cache/src/global.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/global.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -648,7 +648,7 @@
     ASSERT_ARGS(Parrot_find_global_op)
     PMC *res;
 
-    if (!globalname)
+    if (STRING_IS_NULL(globalname))
         Parrot_ex_throw_from_c_args(interp, next, EXCEPTION_GLOBAL_NOT_FOUND,
             "Tried to get null global");
 

Modified: branches/avl_string_cache/src/global_setup.c
==============================================================================
--- branches/avl_string_cache/src/global_setup.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/global_setup.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -211,8 +211,7 @@
 parrot_global_setup_2(PARROT_INTERP)
 {
     ASSERT_ARGS(parrot_global_setup_2)
-    PMC *classname_hash, *iglobals;
-    int  i;
+    PMC *classname_hash;
 
     create_initial_context(interp);
 
@@ -228,13 +227,8 @@
     Parrot_register_core_pmcs(interp, classname_hash);
 
     /* init the interpreter globals array */
-    iglobals         = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
-    interp->iglobals = iglobals;
-    VTABLE_set_integer_native(interp, iglobals, (INTVAL)IGLOBALS_SIZE);
-
-    /* clear the array */
-    for (i = 0; i < (INTVAL)IGLOBALS_SIZE; i++)
-        VTABLE_set_pmc_keyed_int(interp, iglobals, i, NULL);
+    interp->iglobals = Parrot_pmc_new_init_int(interp,
+            enum_class_FixedPMCArray, (INTVAL)IGLOBALS_SIZE);
 }
 
 /*

Modified: branches/avl_string_cache/src/hash.c
==============================================================================
--- branches/avl_string_cache/src/hash.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/hash.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -54,7 +54,7 @@
         FUNC_MODIFIES(*hash);
 
 static void hash_freeze(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGMOD(PMC *info))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -76,7 +76,7 @@
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
 static size_t key_hash_pointer(SHIM_INTERP,
     ARGIN(const void *value),
     size_t seed)
@@ -94,6 +94,12 @@
         __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))
@@ -121,6 +127,7 @@
 #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 */
 
@@ -176,7 +183,8 @@
         return 1;
 
     /* COWed strings */
-    if (Buffer_bufstart(s1) == Buffer_bufstart(s2) && s1->bufused == s2->bufused)
+    if (Buffer_bufstart(s1) == Buffer_bufstart(s2)
+    &&  s1->bufused == s2->bufused)
         return 0;
 
     return CHARSET_COMPARE(interp, s1, s2);
@@ -185,7 +193,7 @@
 
 /*
 
-=item C<int pointer_compare(PARROT_INTERP, const void *a, const void *b)>
+=item C<static int pointer_compare(PARROT_INTERP, const void *a, const void *b)>
 
 Compares the two pointers, returning 0 if they are identical
 
@@ -194,8 +202,8 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-int
+PARROT_CONST_FUNCTION
+static int
 pointer_compare(SHIM_INTERP, ARGIN_NULLOK(const void *a), ARGIN_NULLOK(const void *b))
 {
     ASSERT_ARGS(pointer_compare)
@@ -215,7 +223,7 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
 static size_t
 key_hash_pointer(SHIM_INTERP, ARGIN(const void *value), size_t seed)
 {
@@ -312,7 +320,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
 int
-PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN_NULLOK(PMC *b))
+PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
 {
     ASSERT_ARGS(PMC_compare)
 
@@ -399,7 +407,7 @@
 
 PARROT_EXPORT
 void
-parrot_mark_hash(PARROT_INTERP, ARGIN(Hash *hash))
+parrot_mark_hash(PARROT_INTERP, ARGMOD(Hash *hash))
 {
     ASSERT_ARGS(parrot_mark_hash)
     int mark_key   = 0;
@@ -564,18 +572,24 @@
         HashBucket *b;
 
         switch (hash->key_type) {
+          case Hash_key_type_int:
+            {
+                const INTVAL i_key = VTABLE_shift_integer(interp, info);
+                b = parrot_hash_put(interp, hash, (void*)i_key, NULL);
+            }
+            break;
           case Hash_key_type_STRING:
             {
                 STRING * const s_key = VTABLE_shift_string(interp, info);
                 b = parrot_hash_put(interp, hash, s_key, NULL);
             }
             break;
-          case Hash_key_type_int:
+          case Hash_key_type_PMC:
             {
-                const INTVAL i_key = VTABLE_shift_integer(interp, info);
-                b = parrot_hash_put(interp, hash, (void*)i_key, NULL);
+                PMC * const p_key = VTABLE_shift_pmc(interp, info);
+                b = parrot_hash_put(interp, hash, p_key, NULL);
+                break;
             }
-            break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "unimplemented key type");
@@ -583,18 +597,24 @@
         }
 
         switch (hash->entry_type) {
-          case enum_hash_pmc:
-            {
-                PMC *p   = VTABLE_shift_pmc(interp, info);
-                b->value = (void *)p;
-                break;
-            }
           case enum_hash_int:
             {
                 const INTVAL i = VTABLE_shift_integer(interp, info);
                 b->value       = (void *)i;
                 break;
             }
+          case enum_hash_string:
+            {
+                STRING * const s = VTABLE_shift_string(interp, info);
+                b->value = (void *)s;
+                break;
+            }
+          case enum_hash_pmc:
+            {
+                PMC * const p = VTABLE_shift_pmc(interp, info);
+                b->value = (void *)p;
+                break;
+            }
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "unimplemented value type");
@@ -606,8 +626,7 @@
 
 /*
 
-=item C<static void hash_freeze(PARROT_INTERP, const Hash * const hash, PMC
-*info)>
+=item C<static void hash_freeze(PARROT_INTERP, const Hash *hash, PMC *info)>
 
 Freezes hash into a string.
 
@@ -621,7 +640,7 @@
 */
 
 static void
-hash_freeze(PARROT_INTERP, ARGIN(const Hash * const hash), ARGMOD(PMC *info))
+hash_freeze(PARROT_INTERP, ARGIN(const Hash *hash), ARGMOD(PMC *info))
 {
     ASSERT_ARGS(hash_freeze)
     size_t           i;
@@ -630,11 +649,14 @@
         HashBucket * const b = hash->bs+i;
 
         switch (hash->key_type) {
+          case Hash_key_type_int:
+            VTABLE_push_integer(interp, info, (INTVAL)b->key);
+            break;
           case Hash_key_type_STRING:
             VTABLE_push_string(interp, info, (STRING *)b->key);
             break;
-          case Hash_key_type_int:
-            VTABLE_push_integer(interp, info, (INTVAL)b->key);
+          case Hash_key_type_PMC:
+            VTABLE_push_pmc(interp, info, (PMC *)b->key);
             break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
@@ -643,12 +665,15 @@
         }
 
         switch (hash->entry_type) {
-          case enum_hash_pmc:
-            VTABLE_push_pmc(interp, info, (PMC *)b->value);
-            break;
           case enum_hash_int:
             VTABLE_push_integer(interp, info, (INTVAL)b->value);
             break;
+          case enum_hash_string:
+            VTABLE_push_string(interp, info, (STRING *)b->value);
+            break;
+          case enum_hash_pmc:
+            VTABLE_push_pmc(interp, info, (PMC *)b->value);
+            break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "unimplemented value type");
@@ -728,13 +753,13 @@
     ASSERT_ARGS(expand_hash)
     HashBucket  **old_bi, **new_bi;
     HashBucket   *bs, *b, *new_mem;
-    HashBucket   *old_offset = (HashBucket *)((char *)hash + sizeof (Hash));
+    HashBucket * const old_offset = (HashBucket *)((char *)hash + sizeof (Hash));
 
     void * const  old_mem    = hash->bs;
     const UINTVAL old_size   = hash->mask + 1;
     const UINTVAL new_size   = old_size << 1;
     const UINTVAL old_nb     = N_BUCKETS(old_size);
-    size_t        offset, i, new_loc;
+    size_t        offset, i;
 
     /*
        allocate some less buckets
@@ -792,8 +817,9 @@
      * as expand_hash is only called for that case).
      */
     if (offset) {
-        for (i = 0; i < old_size; ++i) {
-            HashBucket **next_p = new_bi + i;
+        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;
@@ -805,11 +831,11 @@
     /* recalc bucket index */
     for (i = 0; i < old_size; ++i) {
         HashBucket **next_p = new_bi + i;
-        while (*next_p) {
-            b = *next_p;
+
+        while ((b = *next_p) != NULL) {
             /* rehash the bucket */
-            new_loc = (hash->hash_val)(interp, b->key, hash->seed) &
-                (new_size - 1);
+            const size_t new_loc =
+                (hash->hash_val)(interp, b->key, hash->seed) & (new_size - 1);
 
             if (i != new_loc) {
                 *next_p         = b->next;
@@ -1002,16 +1028,18 @@
 Frees the memory allocated to the specified hash and its bucket store.  Used by
 parrot_chash_destroy.
 
+Unlike the C library function free(), the hash function must not be NULL.
+
 =cut
 
 */
 
 PARROT_EXPORT
 void
-parrot_hash_destroy(PARROT_INTERP, ARGMOD(Hash *hash))
+parrot_hash_destroy(PARROT_INTERP, ARGFREE_NOTNULL(Hash *hash))
 {
     ASSERT_ARGS(parrot_hash_destroy)
-    HashBucket *bp = (HashBucket*)((char*)hash + sizeof (Hash));
+    HashBucket * const bp = (HashBucket*)((char*)hash + sizeof (Hash));
     if (bp != hash->bs)
         mem_gc_free(interp, hash->bs);
     mem_gc_free(interp, hash);
@@ -1229,7 +1257,8 @@
 
 /*
 
-=item C<void * parrot_hash_get(PARROT_INTERP, Hash *hash, const void *key)>
+=item C<void * parrot_hash_get(PARROT_INTERP, const Hash *hash, const void
+*key)>
 
 Returns the value keyed by C<key>, or C<NULL> if no bucket is found.
 
@@ -1241,7 +1270,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 void *
-parrot_hash_get(PARROT_INTERP, ARGIN(Hash *hash), ARGIN(const void *key))
+parrot_hash_get(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN(const void *key))
 {
     ASSERT_ARGS(parrot_hash_get)
     const HashBucket * const bucket = parrot_hash_get_bucket(interp, hash, key);
@@ -1295,13 +1324,14 @@
     /* 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)) {
+    &&   PObj_constant_TEST(hash->container)) {
         if (hash->key_type == Hash_key_type_STRING
-                && !PObj_constant_TEST((PObj *)key))
+        && !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))
+            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.");
     }
@@ -1316,7 +1346,6 @@
     if (bucket)
         bucket->value = value;
     else {
-
         bucket = hash->free_list;
 
         if (!bucket) {
@@ -1407,7 +1436,7 @@
             break;
 
           case enum_type_STRING:
-            valtmp = (void *)Parrot_str_copy(interp, (STRING *)b->value);
+            valtmp = b->value;
             break;
 
           case enum_type_PMC:
@@ -1423,9 +1452,8 @@
                     "hash corruption: type = %d\n", hash->entry_type);
         };
 
-        if (key){
+        if (key)
             parrot_hash_put(interp, dest, key, valtmp);
-        }
     }
 }
 
@@ -1507,8 +1535,7 @@
 
 /*
 
-=item C<void* hash_key_from_int(PARROT_INTERP, const Hash * const hash, INTVAL
-key)>
+=item C<void* hash_key_from_int(PARROT_INTERP, const Hash *hash, INTVAL key)>
 
 Cast INTVAL to hash key.
 
@@ -1518,7 +1545,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_key_from_int(PARROT_INTERP, ARGIN(const Hash * const hash), INTVAL key)
+hash_key_from_int(PARROT_INTERP, ARGIN(const Hash *hash), INTVAL key)
 {
     ASSERT_ARGS(hash_key_from_int)
     void *ret;
@@ -1542,8 +1569,8 @@
 
 /*
 
-=item C<void* hash_key_from_string(PARROT_INTERP, const Hash * const hash,
-STRING *key)>
+=item C<void* hash_key_from_string(PARROT_INTERP, const Hash *hash, STRING
+*key)>
 
 Cast STRING to hash key.
 
@@ -1553,7 +1580,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_key_from_string(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN(STRING *key))
+hash_key_from_string(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN(STRING *key))
 {
     ASSERT_ARGS(hash_key_from_string)
     void *ret;
@@ -1583,8 +1610,7 @@
 
 /*
 
-=item C<void* hash_key_from_pmc(PARROT_INTERP, const Hash * const hash, PMC
-*key)>
+=item C<void* hash_key_from_pmc(PARROT_INTERP, const Hash *hash, PMC *key)>
 
 Cast PMC* to hash key.
 
@@ -1594,7 +1620,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_key_from_pmc(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN(PMC *key))
+hash_key_from_pmc(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN(PMC *key))
 {
     ASSERT_ARGS(hash_key_from_pmc)
     void *ret;
@@ -1636,7 +1662,7 @@
       case Hash_key_type_STRING:
         {
             STRING * const tmp = VTABLE_get_string(interp, key);
-            if (!tmp)
+            if (STRING_IS_NULL(tmp))
                 Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
                             "hash: can't use null as key");
             ret = (void *)tmp;
@@ -1651,8 +1677,7 @@
 
 /*
 
-=item C<INTVAL hash_key_to_int(PARROT_INTERP, const Hash * const hash, void
-*key)>
+=item C<INTVAL hash_key_to_int(PARROT_INTERP, const Hash *hash, void *key)>
 
 Cast hash key to INTVAL.
 
@@ -1661,7 +1686,7 @@
 */
 
 INTVAL
-hash_key_to_int(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *key))
+hash_key_to_int(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *key))
 {
     ASSERT_ARGS(hash_key_to_int)
     INTVAL ret;
@@ -1684,8 +1709,7 @@
 
 /*
 
-=item C<STRING* hash_key_to_string(PARROT_INTERP, const Hash * const hash, void
-*key)>
+=item C<STRING* hash_key_to_string(PARROT_INTERP, const Hash *hash, void *key)>
 
 Cast hash key to STRING.
 
@@ -1695,7 +1719,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING*
-hash_key_to_string(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *key))
+hash_key_to_string(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *key))
 {
     ASSERT_ARGS(hash_key_to_string)
     STRING *ret;
@@ -1757,7 +1781,7 @@
 
 /*
 
-=item C<void* hash_value_from_int(PARROT_INTERP, const Hash * const hash, INTVAL
+=item C<void* hash_value_from_int(PARROT_INTERP, const Hash *hash, INTVAL
 value)>
 
 Cast INTVAL to hash value.
@@ -1768,7 +1792,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_value_from_int(PARROT_INTERP, ARGIN(const Hash * const hash), INTVAL value)
+hash_value_from_int(PARROT_INTERP, ARGIN(const Hash *hash), INTVAL value)
 {
     ASSERT_ARGS(hash_value_from_int)
     void *ret;
@@ -1794,8 +1818,8 @@
 
 /*
 
-=item C<void* hash_value_from_string(PARROT_INTERP, const Hash * const hash,
-STRING *value)>
+=item C<void* hash_value_from_string(PARROT_INTERP, const Hash *hash, STRING
+*value)>
 
 Cast STRING to hash value.
 
@@ -1805,7 +1829,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_value_from_string(PARROT_INTERP, ARGIN(const Hash * const hash),
+hash_value_from_string(PARROT_INTERP, ARGIN(const Hash *hash),
         ARGIN_NULLOK(STRING *value))
 {
     ASSERT_ARGS(hash_value_from_string)
@@ -1837,8 +1861,7 @@
 
 /*
 
-=item C<void* hash_value_from_pmc(PARROT_INTERP, const Hash * const hash, PMC
-*value)>
+=item C<void* hash_value_from_pmc(PARROT_INTERP, const Hash *hash, PMC *value)>
 
 Cast PMC to hash value.
 
@@ -1848,7 +1871,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_value_from_pmc(PARROT_INTERP, ARGIN(const Hash * const hash),
+hash_value_from_pmc(PARROT_INTERP, ARGIN(const Hash *hash),
     ARGIN_NULLOK(PMC *value))
 {
     ASSERT_ARGS(hash_value_from_pmc)
@@ -1877,8 +1900,8 @@
 
 /*
 
-=item C<void* hash_value_from_number(PARROT_INTERP, const Hash * const hash,
-FLOATVAL value)>
+=item C<void* hash_value_from_number(PARROT_INTERP, const Hash *hash, FLOATVAL
+value)>
 
 Cast FLOATVAL to hash value.
 
@@ -1888,7 +1911,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_value_from_number(PARROT_INTERP, ARGIN(const Hash * const hash), FLOATVAL value)
+hash_value_from_number(PARROT_INTERP, ARGIN(const Hash *hash), FLOATVAL value)
 {
     ASSERT_ARGS(hash_value_from_number)
     void *ret;
@@ -1917,8 +1940,7 @@
 
 /*
 
-=item C<INTVAL hash_value_to_int(PARROT_INTERP, const Hash * const hash, void
-*value)>
+=item C<INTVAL hash_value_to_int(PARROT_INTERP, const Hash *hash, void *value)>
 
 Cast hash value to INTVAL.
 
@@ -1927,7 +1949,7 @@
 */
 
 INTVAL
-hash_value_to_int(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *value))
+hash_value_to_int(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *value))
 {
     ASSERT_ARGS(hash_value_to_int)
     INTVAL ret;
@@ -1951,8 +1973,8 @@
 
 /*
 
-=item C<STRING* hash_value_to_string(PARROT_INTERP, const Hash * const hash,
-void *value)>
+=item C<STRING* hash_value_to_string(PARROT_INTERP, const Hash *hash, void
+*value)>
 
 Cast hash value to STRING.
 
@@ -1962,7 +1984,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING*
-hash_value_to_string(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *value))
+hash_value_to_string(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *value))
 {
     ASSERT_ARGS(hash_value_to_string)
     STRING *ret;
@@ -1985,8 +2007,7 @@
 
 /*
 
-=item C<PMC* hash_value_to_pmc(PARROT_INTERP, const Hash * const hash, void
-*value)>
+=item C<PMC* hash_value_to_pmc(PARROT_INTERP, const Hash *hash, void *value)>
 
 Cast hash value to PMC.
 
@@ -1996,7 +2017,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 PMC*
-hash_value_to_pmc(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *value))
+hash_value_to_pmc(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *value))
 {
     ASSERT_ARGS(hash_value_to_pmc)
     PMC *ret;
@@ -2019,8 +2040,8 @@
 
 /*
 
-=item C<FLOATVAL hash_value_to_number(PARROT_INTERP, const Hash * const hash,
-void *value)>
+=item C<FLOATVAL hash_value_to_number(PARROT_INTERP, const Hash *hash, void
+*value)>
 
 Cast hash value to FLOATVAL.
 
@@ -2029,7 +2050,7 @@
 */
 
 FLOATVAL
-hash_value_to_number(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *value))
+hash_value_to_number(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *value))
 {
     ASSERT_ARGS(hash_value_to_number)
     FLOATVAL ret;

Modified: branches/avl_string_cache/src/hll.c
==============================================================================
--- branches/avl_string_cache/src/hll.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/hll.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -88,7 +88,8 @@
 
     PMC *entry_id;
 
-    PMC * const entry = Parrot_pmc_new_constant(interp, enum_class_FixedPMCArray);
+    PMC * const entry = Parrot_pmc_new_constant_init_int(interp,
+            enum_class_FixedPMCArray, e_HLL_MAX);
 
     if (entry_name && !STRING_IS_EMPTY(entry_name)) {
         VTABLE_set_pmc_keyed_str(interp, hll_info, entry_name, entry);
@@ -96,8 +97,6 @@
     else
         VTABLE_push_pmc(interp, hll_info, entry);
 
-    VTABLE_set_integer_native(interp, entry, e_HLL_MAX);
-
     entry_id = Parrot_pmc_new_constant(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, entry_id, id);
     VTABLE_set_pmc_keyed_int(interp, entry, e_HLL_id, entry_id);
@@ -522,11 +521,11 @@
         if (PMC_IS_NULL(ns_hash) ||
                 ns_hash->vtable->base_type == enum_class_Undef)
         {
-            STRING * const hll_name = Parrot_get_HLL_name(interp, hll_id);
+            STRING * hll_name = Parrot_get_HLL_name(interp, hll_id);
             if (!hll_name)
                 continue;
 
-            Parrot_str_downcase_inplace(interp, hll_name);
+            hll_name = Parrot_str_downcase(interp, hll_name);
 
             /* XXX as in Parrot_register_HLL() this needs to be fixed to use
              * the correct type of namespace. It's relatively easy to do that

Modified: branches/avl_string_cache/src/interp/inter_create.c
==============================================================================
--- branches/avl_string_cache/src/interp/inter_create.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/interp/inter_create.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -131,7 +131,11 @@
         interp->parent_interpreter = parent;
     else {
         interp->parent_interpreter = NULL;
+
+#if PARROT_CATCH_NULL
         PMCNULL                    = NULL;
+#endif
+
         /*
          * we need a global mutex to protect the interpreter array
          */

Modified: branches/avl_string_cache/src/interp/inter_misc.c
==============================================================================
--- branches/avl_string_cache/src/interp/inter_misc.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/interp/inter_misc.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -140,7 +140,7 @@
     PMC    * hash           = VTABLE_get_pmc_keyed_int(interp, interp->iglobals,
                               IGLOBALS_COMPREG_HASH);
 
-    if (!hash) {
+    if (PMC_IS_NULL(hash)) {
         hash = Parrot_pmc_new_noinit(interp, enum_class_Hash);
         VTABLE_init(interp, hash);
         VTABLE_set_pmc_keyed_int(interp, iglobals,
@@ -283,9 +283,6 @@
       case CURRENT_CONT:
         {
             PMC * const cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
-            if (!PMC_IS_NULL(cont) && cont->vtable->base_type ==
-                    enum_class_RetContinuation)
-                return VTABLE_clone(interp, cont);
             return cont;
         }
       case CURRENT_OBJECT:

Modified: branches/avl_string_cache/src/io/api.c
==============================================================================
--- branches/avl_string_cache/src/io/api.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/io/api.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -179,9 +179,8 @@
 {
     ASSERT_ARGS(Parrot_io_fdopen)
     PMC *new_filehandle;
-    INTVAL flags;
+    const INTVAL flags = Parrot_io_parse_open_flags(interp, sflags);
 
-    flags = Parrot_io_parse_open_flags(interp, sflags);
     if (!flags)
         return PMCNULL;
 
@@ -349,7 +348,7 @@
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
                 "Cannot read from a closed or non-readable filehandle");
 
-        result = Parrot_io_make_string(interp, &result, length);
+        result = Parrot_str_new_noinit(interp, enum_stringrep_one, length);
         result->bufused = length;
 
         if (Parrot_io_is_encoding(interp, pmc, CONST_STRING(interp, "utf8")))
@@ -367,7 +366,7 @@
                 "Cannot read from a closed filehandle");
 
         if (length == 0)
-            result = Parrot_str_copy(interp, string_orig);
+            result = string_orig;
         else {
             INTVAL read_length = length;
             const INTVAL orig_length = Parrot_str_byte_length(interp, string_orig);
@@ -378,8 +377,7 @@
             if (offset + read_length > orig_length)
                 read_length = orig_length - offset;
 
-            result = Parrot_str_substr(interp, string_orig, offset,
-                    read_length, NULL, 0);
+            result = Parrot_str_substr(interp, string_orig, offset, read_length);
             SETATTR_StringHandle_read_offset(interp, pmc, offset + read_length);
         }
     }
@@ -437,8 +435,7 @@
         else
             read_length = newline_pos - offset + 1; /* +1 to include the newline */
 
-        result = Parrot_str_substr(interp, result, offset,
-                read_length, NULL, 0);
+        result = Parrot_str_substr(interp, result, offset, read_length);
         SETATTR_StringHandle_read_offset(interp, pmc, newline_pos + 1);
     }
     else

Modified: branches/avl_string_cache/src/io/buffer.c
==============================================================================
--- branches/avl_string_cache/src/io/buffer.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/io/buffer.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -228,14 +228,13 @@
 Parrot_io_fill_readbuf(PARROT_INTERP, ARGMOD(PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_fill_readbuf)
-    size_t   got;
-    STRING   fake;
-    STRING  *s    = &fake;
     PIOOFF_T pos  = Parrot_io_get_file_position(interp, filehandle);
-
-    Buffer_bufstart(s) = Parrot_io_get_buffer_start(interp, filehandle);
-    fake.bufused       = Parrot_io_get_buffer_size(interp, filehandle);
-    got                = PIO_READ(interp, filehandle, &s);
+    char    *buf  = (char *) Parrot_io_get_buffer_start(interp, filehandle);
+    size_t   size = Parrot_io_get_buffer_size(interp, filehandle);
+    STRING  *s    = Parrot_str_new_init(interp, buf, size,
+                        PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                        PObj_external_FLAG);
+    size_t   got  = PIO_READ(interp, filehandle, &s);
 
     /* buffer-filling does not change fileposition */
     Parrot_io_set_file_position(interp, filehandle, pos);
@@ -267,9 +266,10 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 size_t
 Parrot_io_read_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle),
-              ARGIN(STRING **buf))
+              ARGMOD(STRING **buf))
 {
     ASSERT_ARGS(Parrot_io_read_buffer)
     unsigned char *out_buf, *buffer_start, *buffer_next, *buffer_end;
@@ -292,17 +292,11 @@
     if (Parrot_io_get_flags(interp, filehandle) & PIO_F_LINEBUF)
         return Parrot_io_readline_buffer(interp, filehandle, buf);
 
-    if (*buf == NULL) {
-        *buf = Parrot_gc_new_string_header(interp, 0);
-        (*buf)->bufused = len = 2048;
-    }
-
-    s   = *buf;
-    len = s->bufused;
-
-    if (!s->strstart)
-        Parrot_gc_allocate_string_storage(interp, s, len);
+    if (*buf == NULL)
+        *buf = Parrot_str_new_noinit(interp, enum_stringrep_one, 2048);
 
+    s       = *buf;
+    len     = s->bufused;
     out_buf = (unsigned char *)s->strstart;
 
     /* read Data from buffer */
@@ -357,11 +351,6 @@
         }
 
         got = Parrot_io_fill_readbuf(interp, filehandle);
-
-        /* got is never < 0, but C's type system can't tell */
-        if (got < 0)
-            got = 0;
-
         len = (len < got) ? len : got;
     }
 
@@ -461,6 +450,7 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 size_t
 Parrot_io_readline_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle), ARGOUT(STRING **buf))
 {

Modified: branches/avl_string_cache/src/io/filehandle.c
==============================================================================
--- branches/avl_string_cache/src/io/filehandle.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/io/filehandle.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -27,7 +27,8 @@
 
 =over 4
 
-=item C<INTVAL Parrot_io_parse_open_flags(PARROT_INTERP, STRING *mode_str)>
+=item C<INTVAL Parrot_io_parse_open_flags(PARROT_INTERP, const STRING
+*mode_str)>
 
 Parses a Parrot string for file open mode flags (C<r> for read, C<w> for write,
 C<a> for append, and C<p> for pipe) and returns the combined generic bit flags.
@@ -39,7 +40,7 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL
-Parrot_io_parse_open_flags(PARROT_INTERP, ARGIN_NULLOK(STRING *mode_str))
+Parrot_io_parse_open_flags(PARROT_INTERP, ARGIN_NULLOK(const STRING *mode_str))
 {
     ASSERT_ARGS(Parrot_io_parse_open_flags)
     INTVAL i, mode_len;
@@ -51,7 +52,7 @@
     mode_len = Parrot_str_byte_length(interp, mode_str);
 
     for (i = 0; i < mode_len; ++i) {
-        INTVAL s = Parrot_str_indexed(interp, mode_str, i);
+        const INTVAL s = Parrot_str_indexed(interp, mode_str, i);
         switch (s) {
           case 'r':
             flags |= PIO_F_READ;
@@ -124,7 +125,7 @@
         return *buf;
     }
     else {
-        STRING *s = *buf;
+        STRING * const s = *buf;
         if (s->bufused < len)
             Parrot_gc_reallocate_string_storage(interp, s, len);
         return s;
@@ -154,7 +155,7 @@
 
 PARROT_EXPORT
 void
-Parrot_io_set_os_handle(SHIM_INTERP, ARGIN(PMC *filehandle), PIOHANDLE file_descriptor)
+Parrot_io_set_os_handle(SHIM_INTERP, ARGMOD(PMC *filehandle), PIOHANDLE file_descriptor)
 {
     ASSERT_ARGS(Parrot_io_set_os_handle)
     PARROT_FILEHANDLE(filehandle)->os_handle = file_descriptor;
@@ -162,7 +163,7 @@
 
 /*
 
-=item C<PIOHANDLE Parrot_io_get_os_handle(PARROT_INTERP, PMC *filehandle)>
+=item C<PIOHANDLE Parrot_io_get_os_handle(PARROT_INTERP, const PMC *filehandle)>
 
 Retrieve the C<os_handle> attribute of the FileHandle object, which stores the
 low-level filehandle for the OS.
@@ -177,8 +178,9 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PIOHANDLE
-Parrot_io_get_os_handle(SHIM_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_get_os_handle(SHIM_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_get_os_handle)
     return PARROT_FILEHANDLE(filehandle)->os_handle;
@@ -205,7 +207,7 @@
 Parrot_io_set_flags(SHIM_INTERP, ARGIN(PMC *filehandle), INTVAL flags)
 {
     ASSERT_ARGS(Parrot_io_set_flags)
-    Parrot_FileHandle_attributes *handle_struct = PARROT_FILEHANDLE(filehandle);
+    Parrot_FileHandle_attributes * const handle_struct = PARROT_FILEHANDLE(filehandle);
     handle_struct->flags = flags;
 }
 
@@ -304,7 +306,7 @@
 */
 
 void
-Parrot_io_set_buffer_start(SHIM_INTERP, ARGIN(PMC *filehandle),
+Parrot_io_set_buffer_start(SHIM_INTERP, ARGMOD(PMC *filehandle),
         ARGIN_NULLOK(unsigned char *new_start))
 {
     ASSERT_ARGS(Parrot_io_set_buffer_start)
@@ -329,6 +331,7 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 unsigned char *
 Parrot_io_get_buffer_start(SHIM_INTERP, ARGIN(PMC *filehandle))
@@ -339,7 +342,7 @@
 
 /*
 
-=item C<unsigned char * Parrot_io_get_buffer_next(PARROT_INTERP, PMC
+=item C<unsigned char * Parrot_io_get_buffer_next(PARROT_INTERP, const PMC
 *filehandle)>
 
 Get the C<buffer_next> attribute of the FileHandle object, which stores
@@ -357,7 +360,7 @@
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 unsigned char *
-Parrot_io_get_buffer_next(SHIM_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_get_buffer_next(SHIM_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_get_buffer_next)
     return PARROT_FILEHANDLE(filehandle)->buffer_next;
@@ -381,7 +384,7 @@
 */
 
 void
-Parrot_io_set_buffer_next(SHIM_INTERP, ARGIN(PMC *filehandle),
+Parrot_io_set_buffer_next(SHIM_INTERP, ARGMOD(PMC *filehandle),
         ARGIN_NULLOK(unsigned char *new_next))
 {
     ASSERT_ARGS(Parrot_io_set_buffer_next)
@@ -390,7 +393,7 @@
 
 /*
 
-=item C<unsigned char * Parrot_io_get_buffer_end(PARROT_INTERP, PMC
+=item C<unsigned char * Parrot_io_get_buffer_end(PARROT_INTERP, const PMC
 *filehandle)>
 
 Get the C<buffer_end> attribute of the FileHandle object, which stores
@@ -406,9 +409,10 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 unsigned char *
-Parrot_io_get_buffer_end(SHIM_INTERP, ARGIN_NULLOK(PMC *filehandle))
+Parrot_io_get_buffer_end(SHIM_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_get_buffer_end)
     return PARROT_FILEHANDLE(filehandle)->buffer_end;
@@ -432,7 +436,7 @@
 */
 
 void
-Parrot_io_set_buffer_end(SHIM_INTERP, ARGIN(PMC *filehandle),
+Parrot_io_set_buffer_end(SHIM_INTERP, ARGMOD(PMC *filehandle),
         ARGIN_NULLOK(unsigned char *new_end))
 {
     ASSERT_ARGS(Parrot_io_set_buffer_end)
@@ -441,7 +445,7 @@
 
 /*
 
-=item C<INTVAL Parrot_io_get_buffer_flags(PARROT_INTERP, PMC *filehandle)>
+=item C<INTVAL Parrot_io_get_buffer_flags(PARROT_INTERP, const PMC *filehandle)>
 
 Get the C<buffer_flags> attribute of the FileHandle object, which stores
 a collection of flags specific to the buffer.
@@ -457,7 +461,7 @@
 
 PARROT_CAN_RETURN_NULL
 INTVAL
-Parrot_io_get_buffer_flags(SHIM_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_get_buffer_flags(SHIM_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_get_buffer_flags)
     return PARROT_FILEHANDLE(filehandle)->buffer_flags;
@@ -481,7 +485,7 @@
 */
 
 void
-Parrot_io_set_buffer_flags(SHIM_INTERP, ARGIN(PMC *filehandle), INTVAL new_flags)
+Parrot_io_set_buffer_flags(SHIM_INTERP, ARGMOD(PMC *filehandle), INTVAL new_flags)
 {
     ASSERT_ARGS(Parrot_io_set_buffer_flags)
     PARROT_FILEHANDLE(filehandle)->buffer_flags = new_flags;
@@ -489,7 +493,7 @@
 
 /*
 
-=item C<size_t Parrot_io_get_buffer_size(PARROT_INTERP, PMC *filehandle)>
+=item C<size_t Parrot_io_get_buffer_size(PARROT_INTERP, const PMC *filehandle)>
 
 Get the C<buffer_size> attribute of the FileHandle object, which stores
 the size of the buffer (in bytes).
@@ -504,8 +508,9 @@
 */
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 size_t
-Parrot_io_get_buffer_size(SHIM_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_get_buffer_size(SHIM_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_get_buffer_size)
     return PARROT_FILEHANDLE(filehandle)->buffer_size;
@@ -529,7 +534,7 @@
 */
 
 void
-Parrot_io_set_buffer_size(SHIM_INTERP, ARGIN(PMC *filehandle), size_t new_size)
+Parrot_io_set_buffer_size(SHIM_INTERP, ARGMOD(PMC *filehandle), size_t new_size)
 {
     ASSERT_ARGS(Parrot_io_set_buffer_size)
     PARROT_FILEHANDLE(filehandle)->buffer_size = new_size;
@@ -552,7 +557,7 @@
 
 PARROT_CAN_RETURN_NULL
 void
-Parrot_io_clear_buffer(PARROT_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_clear_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_clear_buffer)
     Parrot_FileHandle_attributes * const io = PARROT_FILEHANDLE(filehandle);
@@ -564,7 +569,8 @@
 
 /*
 
-=item C<PIOOFF_T Parrot_io_get_file_position(PARROT_INTERP, PMC *filehandle)>
+=item C<PIOOFF_T Parrot_io_get_file_position(PARROT_INTERP, const PMC
+*filehandle)>
 
 Get the C<file_pos> attribute of the FileHandle object, which stores
 the current file position of the filehandle.
@@ -579,8 +585,9 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PIOOFF_T
-Parrot_io_get_file_position(SHIM_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_get_file_position(SHIM_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_get_file_position)
     return PARROT_FILEHANDLE(filehandle)->file_pos;
@@ -588,7 +595,7 @@
 
 /*
 
-=item C<PIOOFF_T Parrot_io_get_last_file_position(PARROT_INTERP, PMC
+=item C<PIOOFF_T Parrot_io_get_last_file_position(PARROT_INTERP, const PMC
 *filehandle)>
 
 Get the C<file_pos> attribute of the FileHandle object, which stores
@@ -604,8 +611,9 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 PIOOFF_T
-Parrot_io_get_last_file_position(SHIM_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_get_last_file_position(SHIM_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_get_last_file_position)
     return PARROT_FILEHANDLE(filehandle)->last_pos;
@@ -631,7 +639,7 @@
 
 PARROT_EXPORT
 void
-Parrot_io_set_file_position(SHIM_INTERP, ARGIN(PMC *filehandle), PIOOFF_T file_pos)
+Parrot_io_set_file_position(SHIM_INTERP, ARGMOD(PMC *filehandle), PIOOFF_T file_pos)
 {
     ASSERT_ARGS(Parrot_io_set_file_position)
     Parrot_FileHandle_attributes * const handle_struct = PARROT_FILEHANDLE(filehandle);
@@ -641,8 +649,8 @@
 
 /*
 
-=item C<INTVAL Parrot_io_is_encoding(PARROT_INTERP, PMC *filehandle, STRING
-*value)>
+=item C<INTVAL Parrot_io_is_encoding(PARROT_INTERP, const PMC *filehandle,
+STRING *value)>
 
 Check whether the encoding attribute of the filehandle matches a passed in
 string.
@@ -659,7 +667,7 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL
-Parrot_io_is_encoding(PARROT_INTERP, ARGIN(PMC *filehandle), ARGIN(STRING *value))
+Parrot_io_is_encoding(PARROT_INTERP, ARGIN(const PMC *filehandle), ARGIN(STRING *value))
 {
     ASSERT_ARGS(Parrot_io_is_encoding)
     Parrot_FileHandle_attributes * const handle_struct = PARROT_FILEHANDLE(filehandle);
@@ -704,7 +712,7 @@
 
 /*
 
-=item C<INTVAL Parrot_io_is_closed_filehandle(PARROT_INTERP, PMC *pmc)>
+=item C<INTVAL Parrot_io_is_closed_filehandle(PARROT_INTERP, const PMC *pmc)>
 
 Test whether a filehandle is closed.
 
@@ -713,8 +721,9 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL
-Parrot_io_is_closed_filehandle(PARROT_INTERP, ARGMOD(PMC *pmc))
+Parrot_io_is_closed_filehandle(PARROT_INTERP, ARGIN(const PMC *pmc))
 {
     ASSERT_ARGS(Parrot_io_is_closed_filehandle)
     return PIO_IS_CLOSED(interp, pmc);

Modified: branches/avl_string_cache/src/io/unix.c
==============================================================================
--- branches/avl_string_cache/src/io/unix.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/io/unix.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -305,7 +305,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC *
-Parrot_io_fdopen_unix(PARROT_INTERP, ARGMOD(PMC *filehandle), PIOHANDLE fd, INTVAL flags)
+Parrot_io_fdopen_unix(PARROT_INTERP, ARGMOD_NULLOK(PMC *filehandle), PIOHANDLE fd, INTVAL flags)
 {
     ASSERT_ARGS(Parrot_io_fdopen_unix)
     if (io_is_tty_unix(fd))
@@ -388,7 +388,7 @@
 
 /*
 
-=item C<INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, PMC *filehandle)>
+=item C<INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, const PMC *filehandle)>
 
 Test whether the filehandle has been closed.
 
@@ -397,7 +397,7 @@
 */
 
 INTVAL
-Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_is_closed_unix)
     if (Parrot_io_get_os_handle(interp, filehandle) == -1)
@@ -815,8 +815,9 @@
 Parrot_io_pipe_unix(SHIM_INTERP, ARGMOD(PIOHANDLE *reader), ARGMOD(PIOHANDLE *writer))
 {
     ASSERT_ARGS(Parrot_io_pipe_unix)
-    int fds[2], rv;
-    rv = pipe(fds);
+    int fds[2];
+    const int rv = pipe(fds);
+
     if (rv >= 0) {
         *reader = fds[0];
         *writer = fds[1];

Modified: branches/avl_string_cache/src/io/utf8.c
==============================================================================
--- branches/avl_string_cache/src/io/utf8.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/io/utf8.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -74,18 +74,19 @@
 
                 /* need len - 1 more chars */
                 len2--;
-                s2           = NULL;
-                s2           = Parrot_io_make_string(interp, &s2, len2);
+                s2 = Parrot_str_new_init(interp, NULL, len2, Parrot_utf8_encoding_ptr,
+                                         Parrot_unicode_charset_ptr, 0);
                 s2->bufused  = len2;
-                s2->charset  = Parrot_unicode_charset_ptr;
-                s2->encoding = Parrot_utf8_encoding_ptr;
 
                 /* 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_append(interp, s, s2);
+                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;
 
                 /* check last char */
@@ -118,8 +119,7 @@
     if (s->encoding == Parrot_utf8_encoding_ptr)
         return Parrot_io_write_buffer(interp, filehandle, s);
 
-    dest = Parrot_utf8_encoding_ptr->to_encoding(interp, s,
-            Parrot_gc_new_string_header(interp, 0));
+    dest = Parrot_utf8_encoding_ptr->to_encoding(interp, s);
     return Parrot_io_write_buffer(interp, filehandle, dest);
 }
 

Modified: branches/avl_string_cache/src/io/win32.c
==============================================================================
--- branches/avl_string_cache/src/io/win32.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/io/win32.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -660,8 +660,8 @@
     if (comspec == NULL)
         comspec = "cmd";
     auxcomm = Parrot_str_new(interp, comspec, 0);
-    auxcomm = Parrot_str_append(interp, auxcomm, Parrot_str_new(interp, " /c ", 0));
-    auxcomm = Parrot_str_append(interp, auxcomm, command);
+    auxcomm = Parrot_str_concat(interp, auxcomm, Parrot_str_new(interp, " /c ", 0));
+    auxcomm = Parrot_str_concat(interp, auxcomm, command);
     cmd = Parrot_str_to_cstring(interp, auxcomm);
     start.cb = sizeof start;
     GetStartupInfo(&start);

Modified: branches/avl_string_cache/src/key.c
==============================================================================
--- branches/avl_string_cache/src/key.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/key.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -301,6 +301,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 key_type(SHIM_INTERP, ARGIN(const PMC *key))
@@ -443,19 +444,13 @@
         {
             STRING *s;
             GETATTR_Key_str_key(interp, key, s);
-            if (s)
-                s = Parrot_str_new_COW(interp, s);
             return s;
         }
       case KEY_string_FLAG | KEY_register_FLAG:
         {
             INTVAL int_key;
-            STRING *s;
             GETATTR_Key_int_key(interp, key, int_key);
-            s = REG_STR(interp, int_key);
-            if (s)
-                s = Parrot_str_new_COW(interp, s);
-            return s;
+            return REG_STR(interp, int_key);
         }
       case KEY_pmc_FLAG | KEY_register_FLAG:
         {
@@ -543,9 +538,9 @@
 key_next(PARROT_INTERP, ARGIN(PMC *key))
 {
     ASSERT_ARGS(key_next)
-    PMC *next_key;
 
     if (VTABLE_isa(interp, key, CONST_STRING(interp, "Key"))) {
+        PMC *next_key;
         GETATTR_Key_next_key(interp, key, next_key);
         return next_key;
     }
@@ -655,65 +650,65 @@
         switch (PObj_get_FLAGS(key) & KEY_type_FLAGS) {
           case KEY_integer_FLAG:
             GETATTR_Key_int_key(interp, key, int_key);
-            value = Parrot_str_append(interp, value,
-                    Parrot_str_from_int(interp, int_key));
+            value = Parrot_str_concat(interp, value,
+                        Parrot_str_from_int(interp, int_key));
             break;
           case KEY_number_FLAG:
             GETATTR_Key_int_key(interp, key, int_key);
-            value = Parrot_str_append(interp, value,
-                    Parrot_str_from_num(interp, (FLOATVAL)int_key));
+            value = Parrot_str_concat(interp, value,
+                        Parrot_str_from_num(interp, (FLOATVAL)int_key));
             break;
           case KEY_string_FLAG:
             GETATTR_Key_str_key(interp, key, str_key);
-            value = Parrot_str_append(interp, value, quote);
-            value = Parrot_str_append(interp, value, str_key);
-            value = Parrot_str_append(interp, value, quote);
+            value = Parrot_str_concat(interp, value, quote);
+            value = Parrot_str_concat(interp, value, str_key);
+            value = Parrot_str_concat(interp, value, quote);
             break;
           case KEY_pmc_FLAG:
-            value = Parrot_str_append(interp, value,
-                    VTABLE_get_string(interp, key));
+            value = Parrot_str_concat(interp, value,
+                        VTABLE_get_string(interp, key));
             break;
           case KEY_integer_FLAG | KEY_register_FLAG:
             GETATTR_Key_int_key(interp, key, int_key);
-            value = Parrot_str_append(interp, value,
+            value = Parrot_str_concat(interp, value,
                         Parrot_str_from_int(interp,
                             REG_INT(interp, int_key)));
             break;
           case KEY_number_FLAG | KEY_register_FLAG:
             GETATTR_Key_int_key(interp, key, int_key);
-            value = Parrot_str_append(interp, value,
+            value = Parrot_str_concat(interp, value,
                         Parrot_str_from_num(interp,
                             REG_NUM(interp, int_key)));
             break;
           case KEY_string_FLAG | KEY_register_FLAG:
-            value = Parrot_str_append(interp, value, quote);
+            value = Parrot_str_concat(interp, value, quote);
             GETATTR_Key_int_key(interp, key, int_key);
-            value = Parrot_str_append(interp, value,
+            value = Parrot_str_concat(interp, value,
                     REG_STR(interp, int_key));
-            value = Parrot_str_append(interp, value, quote);
+            value = Parrot_str_concat(interp, value, quote);
             break;
           case KEY_pmc_FLAG | KEY_register_FLAG:
             {
                 PMC *reg;
                 GETATTR_Key_int_key(interp, key, int_key);
                 reg = REG_PMC(interp, int_key);
-                value           = Parrot_str_append(interp, value,
-                                    VTABLE_get_string(interp, reg));
+                value = Parrot_str_concat(interp, value,
+                            VTABLE_get_string(interp, reg));
             }
             break;
           default:
-            value = Parrot_str_append(interp, value, CONST_STRING(interp, "Key type unknown"));
+            value = Parrot_str_concat(interp, value, CONST_STRING(interp, "Key type unknown"));
             break;
         }
 
         GETATTR_Key_next_key(interp, key, next_key);
         if (next_key)
-            value = Parrot_str_append(interp, value, semicolon);
+            value = Parrot_str_concat(interp, value, semicolon);
 
         GETATTR_Key_next_key(interp, key, key);
     }
 
-    value = Parrot_str_append(interp, value, Parrot_str_new(interp, " ]", 2));
+    value = Parrot_str_concat(interp, value, Parrot_str_new(interp, " ]", 2));
     return value;
 }
 
@@ -725,10 +720,6 @@
 
 F<include/parrot/key.h>.
 
-=head1 HISTORY
-
-Initial version by Jeff G. on 2001.12.05.
-
 =cut
 
 */

Modified: branches/avl_string_cache/src/library.c
==============================================================================
--- branches/avl_string_cache/src/library.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/library.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -168,9 +168,8 @@
                                 (INTVAL)IGLOBALS_CONFIG_HASH);
 
     /* create the lib_paths array */
-    PMC * const lib_paths   = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
-
-    VTABLE_set_integer_native(interp, lib_paths, PARROT_LIB_PATH_SIZE);
+    PMC * const lib_paths   = Parrot_pmc_new_init_int(interp,
+            enum_class_FixedPMCArray, PARROT_LIB_PATH_SIZE);
     VTABLE_set_pmc_keyed_int(interp, iglobals,
             IGLOBALS_LIB_PATHS, lib_paths);
 
@@ -182,7 +181,7 @@
 
         versionlib = VTABLE_get_string_keyed_str(interp, config_hash, libkey);
         entry      = VTABLE_get_string_keyed_str(interp, config_hash, verkey);
-        versionlib = Parrot_str_append(interp, versionlib, entry);
+        versionlib = Parrot_str_concat(interp, versionlib, entry);
 
         if (!VTABLE_get_integer_keyed_str(interp, config_hash, installed))
             builddir = VTABLE_get_string_keyed_str(interp,
@@ -194,32 +193,47 @@
     paths = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
     VTABLE_set_pmc_keyed_int(interp, lib_paths,
             PARROT_LIB_PATH_INCLUDE, paths);
+    { /* EXPERIMENTAL: add include path from environment */
+        const char *envvar = Parrot_getenv(interp,
+                                           Parrot_str_new_constant(interp, "PARROT_INCLUDE"));
+        if (envvar != NULL  && envvar[0]) {
+            entry = Parrot_str_new(interp, envvar, 0);
+            VTABLE_push_string(interp, paths, entry);
+        }
+    }
     if (!STRING_IS_NULL(builddir)) {
-        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/"), 0);
+        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/"));
         VTABLE_push_string(interp, paths, entry);
-        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/runtime/parrot/include/"), 0);
+        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/runtime/parrot/include/"));
         VTABLE_push_string(interp, paths, entry);
     }
     entry = CONST_STRING(interp, "./");
     VTABLE_push_string(interp, paths, entry);
     if (!STRING_IS_NULL(versionlib)) {
-        entry = Parrot_str_concat(interp, versionlib, CONST_STRING(interp, "/include/"), 0);
+        entry = Parrot_str_concat(interp, versionlib, CONST_STRING(interp, "/include/"));
         VTABLE_push_string(interp, paths, entry);
     }
 
-
     /* define library paths */
     paths = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
     VTABLE_set_pmc_keyed_int(interp, lib_paths,
             PARROT_LIB_PATH_LIBRARY, paths);
+    { /* EXPERIMENTAL: add library path from environment */
+        const char *envvar = Parrot_getenv(interp,
+                                           Parrot_str_new_constant(interp, "PARROT_LIBRARY"));
+        if (envvar != NULL && envvar[0]) {
+            entry = Parrot_str_new(interp, envvar, 0);
+            VTABLE_push_string(interp, paths, entry);
+        }
+    }
     if (!STRING_IS_NULL(builddir)) {
-        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/runtime/parrot/library/"), 0);
+        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/runtime/parrot/library/"));
         VTABLE_push_string(interp, paths, entry);
     }
     entry = CONST_STRING(interp, "./");
     VTABLE_push_string(interp, paths, entry);
     if (!STRING_IS_NULL(versionlib)) {
-        entry = Parrot_str_concat(interp, versionlib, CONST_STRING(interp, "/library/"), 0);
+        entry = Parrot_str_concat(interp, versionlib, CONST_STRING(interp, "/library/"));
         VTABLE_push_string(interp, paths, entry);
     }
 
@@ -228,13 +242,13 @@
     VTABLE_set_pmc_keyed_int(interp, lib_paths,
             PARROT_LIB_PATH_LANG, paths);
     if (!STRING_IS_NULL(builddir)) {
-        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/runtime/parrot/languages/"), 0);
+        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/runtime/parrot/languages/"));
         VTABLE_push_string(interp, paths, entry);
     }
     entry = CONST_STRING(interp, "./");
     VTABLE_push_string(interp, paths, entry);
     if (!STRING_IS_NULL(versionlib)) {
-        entry = Parrot_str_concat(interp, versionlib, CONST_STRING(interp, "/languages/"), 0);
+        entry = Parrot_str_concat(interp, versionlib, CONST_STRING(interp, "/languages/"));
         VTABLE_push_string(interp, paths, entry);
     }
 
@@ -243,13 +257,13 @@
     VTABLE_set_pmc_keyed_int(interp, lib_paths,
             PARROT_LIB_PATH_DYNEXT, paths);
     if (!STRING_IS_NULL(builddir)) {
-        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/runtime/parrot/dynext/"), 0);
+        entry = Parrot_str_concat(interp, builddir, CONST_STRING(interp, "/runtime/parrot/dynext/"));
         VTABLE_push_string(interp, paths, entry);
     }
     entry = CONST_STRING(interp, "dynext/");
     VTABLE_push_string(interp, paths, entry);
     if (!STRING_IS_NULL(versionlib)) {
-        entry = Parrot_str_concat(interp, versionlib, CONST_STRING(interp, "/dynext/"), 0);
+        entry = Parrot_str_concat(interp, versionlib, CONST_STRING(interp, "/dynext/"));
         VTABLE_push_string(interp, paths, entry);
     }
 
@@ -405,7 +419,7 @@
 
     STRING * const nul = string_chr(interp, '\0');
 
-    path = Parrot_str_append(interp, path, nul);
+    path = Parrot_str_concat(interp, path, nul);
     path->bufused--;
     path->strlen--;
 
@@ -440,7 +454,7 @@
     /* make sure the path has a trailing slash before appending the file */
     if (Parrot_str_indexed(interp, path , path->strlen - 1)
          != Parrot_str_indexed(interp, path_separator_string, 0))
-        path = Parrot_str_append(interp, path , path_separator_string);
+        path = Parrot_str_concat(interp, path , path_separator_string);
 
     return path;
 }
@@ -465,7 +479,7 @@
 {
     ASSERT_ARGS(path_append)
     l_path = path_guarantee_trailing_separator(interp, l_path);
-    l_path = Parrot_str_append(interp, l_path, r_path);
+    l_path = Parrot_str_concat(interp, l_path, r_path);
 
     return l_path;
 }
@@ -491,9 +505,9 @@
     ASSERT_ARGS(path_concat)
     STRING* join;
 
-    join = Parrot_str_copy(interp, l_path);
+    join = l_path;
     join = path_guarantee_trailing_separator(interp, join);
-    join = Parrot_str_append(interp, join, r_path);
+    join = Parrot_str_concat(interp, join, r_path);
 
     return join;
 }
@@ -518,9 +532,7 @@
     ASSERT_ARGS(try_load_path)
     STRING *final;
 
-    final = Parrot_str_copy(interp, path);
-
-    final = path_finalize(interp, final);
+    final = path_finalize(interp, path);
 
     if (Parrot_stat_info_intval(interp, final, STAT_EXISTS)) {
         return final;
@@ -552,7 +564,7 @@
     STRING * const pir_extension      = CONST_STRING(interp, ".pir");
     STRING * const pasm_extension     = CONST_STRING(interp, ".pasm");
 
-    test_path = Parrot_str_copy(interp, path);
+    test_path = path;
 
     /* First try the path as given. */
     result = try_load_path(interp, test_path);
@@ -568,11 +580,11 @@
 
     if (!STRING_IS_NULL(test_path)) {
         if (Parrot_str_byte_length(interp, test_path) > 4) {
-            STRING *orig_ext = Parrot_str_substr(interp, test_path, -4, 4, NULL, 0);
+            STRING *orig_ext = Parrot_str_substr(interp, test_path, -4, 4);
             /* First try substituting .pbc for the .pir extension */
             if (Parrot_str_equal(interp, orig_ext, pir_extension)) {
                 STRING * const without_ext = Parrot_str_chopn(interp, test_path, 4);
-                test_path = Parrot_str_append(interp, without_ext, bytecode_extension);
+                test_path = Parrot_str_concat(interp, without_ext, bytecode_extension);
                 result = try_load_path(interp, test_path);
                 if (result)
                     return result;
@@ -580,12 +592,12 @@
             /* Next try substituting .pir, then .pasm for the .pbc extension */
             else if (Parrot_str_equal(interp, orig_ext, bytecode_extension)) {
                 STRING * const without_ext = Parrot_str_chopn(interp, test_path, 4);
-                test_path = Parrot_str_append(interp, without_ext, pir_extension);
+                test_path = Parrot_str_concat(interp, without_ext, pir_extension);
                 result = try_load_path(interp, test_path);
                 if (result)
                     return result;
 
-                test_path = Parrot_str_append(interp, without_ext, pasm_extension);
+                test_path = Parrot_str_concat(interp, without_ext, pasm_extension);
                 result = try_load_path(interp, test_path);
                 if (result)
                     return result;
@@ -595,10 +607,10 @@
 
         /* Finally, try substituting .pbc for the .pasm extension. */
         if (Parrot_str_byte_length(interp, test_path) > 5) {
-            STRING * const orig_ext = Parrot_str_substr(interp, test_path, -5, 5, NULL, 0);
+            STRING * const orig_ext = Parrot_str_substr(interp, test_path, -5, 5);
             if (Parrot_str_equal(interp, orig_ext, pasm_extension)) {
                 STRING * const without_ext = Parrot_str_chopn(interp, test_path, 5);
-                test_path = Parrot_str_append(interp, without_ext, bytecode_extension);
+                test_path = Parrot_str_concat(interp, without_ext, bytecode_extension);
                 result = try_load_path(interp, test_path);
                 if (result)
                     return result;
@@ -703,8 +715,7 @@
         STRING * const path = VTABLE_get_string_keyed_int(interp, paths, i);
         STRING *found_name;
 
-        full_name = Parrot_str_copy(interp, path);
-        full_name = path_append(interp, full_name, file);
+        full_name = path_append(interp, path, file);
 
         found_name =
             (type & PARROT_RUNTIME_FT_DYNEXT)
@@ -903,23 +914,22 @@
     ++pos_dot;
     ++pos_sl;
     if (pos_sl && pos_dot) {
-        stem = Parrot_str_substr(interp, in, pos_sl, pos_dot - pos_sl - 1,
-                NULL, 0);
-        *wo_ext = Parrot_str_substr(interp, in, 0, pos_dot - 1, NULL, 0);
-        *ext = Parrot_str_substr(interp, in, pos_dot, len - pos_dot, NULL, 0);
+        stem = Parrot_str_substr(interp, in, pos_sl, pos_dot - pos_sl - 1);
+        *wo_ext = Parrot_str_substr(interp, in, 0, pos_dot - 1);
+        *ext = Parrot_str_substr(interp, in, pos_dot, len - pos_dot);
     }
     else if (pos_dot) {
-        stem = Parrot_str_substr(interp, in, 0, pos_dot - 1, NULL, 0);
+        stem = Parrot_str_substr(interp, in, 0, pos_dot - 1);
         *wo_ext = stem;
-        *ext = Parrot_str_substr(interp, in, pos_dot, len - pos_dot, NULL, 0);
+        *ext = Parrot_str_substr(interp, in, pos_dot, len - pos_dot);
     }
     else if (pos_sl) {
-        stem = Parrot_str_substr(interp, in, pos_sl, len - pos_sl, NULL, 0);
-        *wo_ext = Parrot_str_copy(interp, in);
+        stem = Parrot_str_substr(interp, in, pos_sl, len - pos_sl);
+        *wo_ext = in;
         *ext = NULL;
     }
     else {
-        stem = Parrot_str_copy(interp, in);
+        stem = in;
         *wo_ext = stem;
         *ext = NULL;
     }

Modified: branches/avl_string_cache/src/main.c
==============================================================================
--- branches/avl_string_cache/src/main.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/main.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -46,7 +46,7 @@
 PARROT_CAN_RETURN_NULL
 static const char * parseflags(PARROT_INTERP,
     ARGMOD(int *argc),
-    ARGMOD(char **argv[]),
+    ARGMOD(const char **argv[]),
     ARGMOD(Parrot_Run_core_t *core),
     ARGMOD(Parrot_trace_flags *trace))
         __attribute__nonnull__(1)
@@ -59,7 +59,9 @@
         FUNC_MODIFIES(*core)
         FUNC_MODIFIES(*trace);
 
-static void parseflags_minimal(PARROT_INTERP, int argc, ARGIN(char *argv[]))
+static void parseflags_minimal(PARROT_INTERP,
+    int argc,
+    ARGIN(const char *argv[]))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
@@ -88,7 +90,7 @@
 
 /*
 
-=item C<int main(int argc, char * argv[])>
+=item C<int main(int argc, const char *argv[])>
 
 The entry point from the command line into Parrot.
 
@@ -97,7 +99,7 @@
 */
 
 int
-main(int argc, char * argv[])
+main(int argc, const char *argv[])
 {
     int         stacktop;
     const char *sourcefile;
@@ -129,18 +131,6 @@
     initialize_interpreter(interp, (void*)&stacktop);
     imcc_initialize(interp);
 
-    { /* EXPERIMENTAL: add library and include paths from environment */
-        PMC *env = Parrot_pmc_new(interp, enum_class_Env);
-        STRING *path = VTABLE_get_string_keyed_str(interp, env,
-                Parrot_str_new_constant(interp, "PARROT_LIBRARY"));
-        if (!Parrot_str_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
-            Parrot_lib_add_path(interp, path, PARROT_LIB_PATH_LIBRARY);
-        path = VTABLE_get_string_keyed_str(interp, env,
-                Parrot_str_new_constant(interp, "PARROT_INCLUDE"));
-        if (!Parrot_str_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
-            Parrot_lib_add_path(interp, path, PARROT_LIB_PATH_INCLUDE);
-    }
-
     /* Parse flags */
     sourcefile = parseflags(interp, &argc, &argv, &core, &trace);
 
@@ -370,7 +360,8 @@
 
 /*
 
-=item C<static void parseflags_minimal(PARROT_INTERP, int argc, char *argv[])>
+=item C<static void parseflags_minimal(PARROT_INTERP, int argc, const char
+*argv[])>
 
 Parse minimal subset of args required for initializing interpreter.
 
@@ -378,7 +369,7 @@
 
 */
 static void
-parseflags_minimal(PARROT_INTERP, int argc, ARGIN(char *argv[]))
+parseflags_minimal(PARROT_INTERP, int argc, ARGIN(const char *argv[]))
 {
     ASSERT_ARGS(parseflags_minimal)
 
@@ -410,11 +401,11 @@
         }
         else if (!strncmp(arg, "--hash-seed", 11)) {
 
-            arg = strrchr(arg, '=')+1;
-            if (!arg) {
-                ++pos;
-                arg = argv[pos];
-            }
+            if ((arg = strrchr(arg, '=')))
+                arg++;
+            else
+                arg = argv[++pos];
+
             if (is_all_hex_digits(arg)) {
                 interp->hash_seed = strtoul(arg, NULL, 16);
             }
@@ -432,8 +423,8 @@
 
 /*
 
-=item C<static const char * parseflags(PARROT_INTERP, int *argc, char **argv[],
-Parrot_Run_core_t *core, Parrot_trace_flags *trace)>
+=item C<static const char * parseflags(PARROT_INTERP, int *argc, const char
+**argv[], Parrot_Run_core_t *core, Parrot_trace_flags *trace)>
 
 Parse Parrot's command line for options and set appropriate flags.
 
@@ -444,7 +435,7 @@
 PARROT_CAN_RETURN_NULL
 static const char *
 parseflags(PARROT_INTERP,
-        ARGMOD(int *argc), ARGMOD(char **argv[]),
+        ARGMOD(int *argc), ARGMOD(const char **argv[]),
         ARGMOD(Parrot_Run_core_t *core), ARGMOD(Parrot_trace_flags *trace))
 {
     ASSERT_ARGS(parseflags)

Modified: branches/avl_string_cache/src/multidispatch.c
==============================================================================
--- branches/avl_string_cache/src/multidispatch.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/multidispatch.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -268,7 +268,7 @@
     va_list args;
     const char *arg_sig, *ret_sig;
 
-    Parrot_pcc_split_signature_string(interp, sig, &arg_sig, &ret_sig);
+    Parrot_pcc_split_signature_string(sig, &arg_sig, &ret_sig);
 
     va_start(args, sig);
     call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, arg_sig, &args);
@@ -391,12 +391,11 @@
 mmd_build_type_tuple_from_type_list(PARROT_INTERP, ARGIN(PMC *type_list))
 {
     ASSERT_ARGS(mmd_build_type_tuple_from_type_list)
-    PMC   *multi_sig   = Parrot_pmc_new_constant(interp, enum_class_FixedIntegerArray);
     INTVAL param_count = VTABLE_elements(interp, type_list);
+    PMC   *multi_sig   = Parrot_pmc_new_constant_init_int(interp,
+            enum_class_FixedIntegerArray, param_count);
     INTVAL i;
 
-    VTABLE_set_integer_native(interp, multi_sig, param_count);
-
     for (i = 0; i < param_count; i++) {
         STRING *type_name = VTABLE_get_string_keyed_int(interp, type_list, i);
         INTVAL  type;
@@ -518,10 +517,8 @@
             type = Parrot_pmc_get_type(interp, sig_elem);
 
         /* create destination PMC only as necessary */
-        if (PMC_IS_NULL(ar)) {
-            ar = Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
-            VTABLE_set_integer_native(interp, ar, n);
-        }
+        if (PMC_IS_NULL(ar))
+            ar = Parrot_pmc_new_init_int(interp, enum_class_FixedIntegerArray, n);
 
         VTABLE_set_integer_keyed_int(interp, ar, i, type);
     }

Modified: branches/avl_string_cache/src/nci/api.c
==============================================================================
--- branches/avl_string_cache/src/nci/api.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/nci/api.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,30 +1,49 @@
 /* nci.c
- *  Copyright (C) 2001-2009, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     Native Call Interface routines. The code needed to build a
- *     parrot to C call frame is in here
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
+Copyright (C) 2001-2009, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/nci/api.c - Native Call Interface routines
+
+=head1 DESCRIPTION
+
+This file implements the interface to the Parrot Native Call Interface system,
+which builds parrot to C call frames.
+
+=head2 Functions
+
+=over 4
+
+=cut
+
+*/
 
 #include "parrot/parrot.h"
 #include "parrot/nci.h"
 #include "api.str"
 
 /* HEADERIZER HFILE: include/parrot/nci.h */
-/* HEADERIZER STOP */
 
-/* This function serves a single purpose. It takes the function signature for a
-   C function we want to call and returns a PMC with a pointer to a function
-   that can call it. */
+/*
+
+=item C<PMC * build_call_func(PARROT_INTERP, STRING *signature)>
 
+This function serves a single purpose. It takes the function signature for a
+C function we want to call and returns a PMC with a pointer to a function
+that can call it.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
 PMC *
-build_call_func(PARROT_INTERP, NOTNULL(STRING *signature)) {
-    PMC *iglobals;
+build_call_func(PARROT_INTERP, ARGIN(STRING *signature))
+{
+    ASSERT_ARGS(build_call_func)
+
+    PMC * const iglobals = interp->iglobals;
     PMC *nci_funcs;
     PMC *thunk;
 
@@ -32,7 +51,6 @@
     if (STRING_IS_EMPTY(signature))
         signature = CONST_STRING(interp, "v");
 
-    iglobals = interp->iglobals;
     if (PMC_IS_NULL(iglobals))
         PANIC(interp, "iglobals isn't created yet");
 
@@ -42,6 +60,19 @@
 
     thunk = VTABLE_get_pmc_keyed_str(interp, nci_funcs, signature);
 
+    if (PMC_IS_NULL(thunk)) {
+        /* try to dynamically build a thunk */
+        PMC *nci_fb_cb = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FB_CB);
+        if (!PMC_IS_NULL(nci_fb_cb)) {
+            void *cb_ptr = VTABLE_get_pointer(interp, nci_fb_cb);
+            nci_fb_func_t cb = (nci_fb_func_t)D2FPTR(cb_ptr);
+            if (cb_ptr) {
+                PMC *nci_fb_ud = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FB_UD);
+                thunk = cb(nci_fb_ud, signature);
+            }
+        }
+    }
+
     if (!PMC_IS_NULL(thunk)) {
         PARROT_ASSERT(thunk->vtable);
         PARROT_ASSERT(thunk->vtable->base_type == enum_class_UnManagedStruct);
@@ -54,6 +85,14 @@
 }
 
 /*
+
+=back
+
+=cut
+
+*/
+
+/*
  * Local variables:
  *   c-file-style: "parrot"
  * End:

Modified: branches/avl_string_cache/src/nci/core_thunks.c
==============================================================================
--- branches/avl_string_cache/src/nci/core_thunks.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/nci/core_thunks.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -45,18 +45,20 @@
     typedef double(* func_t)(PARROT_INTERP, PMC *, double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiN", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (double)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 
 
@@ -67,18 +69,20 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -89,18 +93,20 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -111,17 +117,19 @@
     typedef PMC *(* func_t)(PARROT_INTERP, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
@@ -131,18 +139,20 @@
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 
@@ -153,17 +163,19 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -173,13 +185,15 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -197,12 +211,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -219,18 +235,20 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -241,18 +259,20 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -263,18 +283,20 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiP", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -285,19 +307,21 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
     STRING * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPS", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -309,14 +333,16 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
     STRING * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPSP", &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -335,13 +361,15 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -359,13 +387,15 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, INTVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     INTVAL t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -383,13 +413,15 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -407,13 +439,15 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, FLOATVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PNP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -431,12 +465,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -453,12 +489,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -475,12 +513,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -497,12 +537,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, FLOATVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PN", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -519,19 +561,21 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -543,19 +587,21 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, INTVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -567,19 +613,21 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     STRING * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -591,19 +639,21 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, FLOATVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PNP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -615,18 +665,20 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -637,18 +689,20 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -659,18 +713,20 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, FLOATVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PN", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -681,17 +737,19 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -701,11 +759,13 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -721,18 +781,20 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -743,19 +805,21 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -767,20 +831,22 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIII", &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -793,18 +859,20 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -815,20 +883,22 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *, STRING *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     STRING * t_2;
     STRING * t_3;
     STRING * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSSS", &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -841,13 +911,15 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
     STRING * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSS", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -865,18 +937,20 @@
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 
@@ -887,12 +961,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -909,19 +985,21 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPs", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -933,19 +1011,21 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPs", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -957,20 +1037,22 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, INTVAL, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
     PMC * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiIPPs", &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -983,17 +1065,19 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 }
@@ -1003,12 +1087,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiP", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1025,36 +1111,33 @@
     typedef PMC *(* func_t)(PARROT_INTERP, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 }
 
  void
 Parrot_nci_load_core_thunks(PARROT_INTERP)
-;
- void
-Parrot_nci_load_core_thunks(PARROT_INTERP)
  {
-    PMC *iglobals;
+    PMC * const iglobals = interp->iglobals;
     PMC *nci_funcs;
     PMC *temp_pmc;
 
-    iglobals = interp->iglobals;
     PARROT_ASSERT(!(PMC_IS_NULL(iglobals)));
 
-    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals,
-            IGLOBALS_NCI_FUNCS);
+    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FUNCS);
     PARROT_ASSERT(!(PMC_IS_NULL(nci_funcs)));
 
     temp_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);

Modified: branches/avl_string_cache/src/nci/extra_thunks.c
==============================================================================
--- branches/avl_string_cache/src/nci/extra_thunks.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/nci/extra_thunks.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -45,11 +45,13 @@
     typedef void(* func_t)(PARROT_INTERP);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "");
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -64,18 +66,20 @@
     typedef int(* func_t)(int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -85,19 +89,21 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -109,18 +115,20 @@
     typedef int(* func_t)(PARROT_INTERP, void *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -131,19 +139,21 @@
     typedef int(* func_t)(PARROT_INTERP, void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -155,17 +165,19 @@
     typedef int(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -174,18 +186,20 @@
     typedef int(* func_t)(char *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SP", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 }
@@ -195,12 +209,14 @@
     typedef void *(* func_t)(PARROT_INTERP);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "");
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -210,7 +226,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
@@ -219,12 +235,14 @@
     typedef void *(* func_t)(PARROT_INTERP, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -234,7 +252,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
@@ -244,19 +262,21 @@
     typedef char *(* func_t)(PARROT_INTERP);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "");
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(interp);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
@@ -265,21 +285,23 @@
     typedef char *(* func_t)(PARROT_INTERP, void *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_1, &ts_2, &t_3);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -291,19 +313,21 @@
     typedef char *(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
@@ -312,20 +336,22 @@
     typedef char *(* func_t)(void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
@@ -335,11 +361,13 @@
     typedef void(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -354,13 +382,15 @@
     typedef void(* func_t)(void *, int, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIS", &t_0, &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -377,13 +407,15 @@
     typedef void(* func_t)(void *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSS", &t_0, &ts_1, &ts_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -400,8 +432,9 @@
     typedef void(* func_t)(PARROT_INTERP, char *, int, int, int, void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     char *t_1; STRING *ts_1;
@@ -410,6 +443,7 @@
     INTVAL t_4;
     PMC *t_5;
     char *t_6; STRING *ts_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SIIIPS", &ts_1, &t_2, &t_3, &t_4, &t_5, &ts_6);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_6 = ts_6 ? Parrot_str_to_cstring(interp, ts_6) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -430,8 +464,9 @@
     typedef void *(* func_t)(PARROT_INTERP, char *, char *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -439,6 +474,7 @@
     char *t_2; STRING *ts_2;
     PMC * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SSPP", &ts_1, &ts_2, &t_3, &t_4);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -448,7 +484,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -461,19 +497,21 @@
     typedef PMC *(* func_t)(PARROT_INTERP, char *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     char *t_1; STRING *ts_1;
     PMC *t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SPI", &ts_1, &t_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -485,20 +523,22 @@
     typedef int(* func_t)(void **, void *, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; void *v_0;
     PMC *t_1;
     PMC *t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     v_0 = VTABLE_get_pointer(interp, t_0);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&v_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_pointer(interp, t_0, v_0);
 
 
@@ -510,13 +550,15 @@
     typedef void(* func_t)(PARROT_INTERP, void *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -534,12 +576,14 @@
     typedef void(* func_t)(void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -555,12 +599,14 @@
     typedef void(* func_t)(PARROT_INTERP, void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -577,11 +623,13 @@
     typedef void(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)();
@@ -594,14 +642,16 @@
     typedef void(* func_t)(PARROT_INTERP, int, int, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
     PMC *t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIP", &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -620,11 +670,13 @@
     typedef void(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -639,12 +691,14 @@
     typedef void(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -660,8 +714,9 @@
     typedef void(* func_t)(int, long, long, long, long, long, long, long, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_0;
@@ -673,6 +728,7 @@
     INTVAL t_6;
     INTVAL t_7;
     INTVAL t_8;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -695,11 +751,13 @@
     typedef void(* func_t)(long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -714,14 +772,16 @@
     typedef void(* func_t)(void *, void *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     STRING *t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSIP", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -739,12 +799,14 @@
     typedef void(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -760,8 +822,9 @@
     typedef void(* func_t)(void *, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
@@ -769,6 +832,7 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -787,12 +851,14 @@
     typedef void(* func_t)(void *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -808,12 +874,14 @@
     typedef void(* func_t)(void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -829,18 +897,20 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -851,17 +921,19 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 }
@@ -871,18 +943,20 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -893,17 +967,19 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 }
@@ -913,17 +989,19 @@
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 }
@@ -933,17 +1011,19 @@
     typedef int(* func_t)(PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -952,19 +1032,21 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -976,20 +1058,22 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPP", &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1002,13 +1086,15 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1026,14 +1112,16 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPP", &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1052,8 +1140,9 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
@@ -1061,12 +1150,13 @@
     PMC * t_3;
     PMC * t_4;
     PMC * t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPPP", &t_1, &t_2, &t_3, &t_4, &t_5);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4, t_5);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1080,8 +1170,9 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
@@ -1090,12 +1181,13 @@
     PMC * t_4;
     PMC * t_5;
     PMC * t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPPPP", &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4, t_5, t_6);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1110,19 +1202,21 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, STRING *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     STRING * t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSI", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -1134,20 +1228,22 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *, INTVAL, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     STRING * t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSII", &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1160,20 +1256,22 @@
     typedef char *(* func_t)(void *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     PMC *t_1; int i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
@@ -1183,20 +1281,22 @@
     typedef int(* func_t)(void *, void *, int *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2; int i_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     i_2 = VTABLE_get_integer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), &i_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -1208,19 +1308,21 @@
     typedef int(* func_t)(void *, void *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2; int i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     i_2 = VTABLE_get_integer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), &i_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -1231,19 +1333,21 @@
     typedef int(* func_t)(void *, void *, double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPN", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -1254,20 +1358,22 @@
     typedef int(* func_t)(void *, char *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSII", &t_0, &ts_1, &t_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -1279,20 +1385,22 @@
     typedef int(* func_t)(void *, int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIPI", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -1304,8 +1412,9 @@
     typedef char *(* func_t)(void *, char *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
@@ -1313,13 +1422,14 @@
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSI", &t_0, &ts_1, &ts_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -1331,21 +1441,23 @@
     typedef char *(* func_t)(void *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -1356,8 +1468,9 @@
     typedef char *(* func_t)(void *, char *, char *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
@@ -1366,13 +1479,14 @@
     char *t_2; STRING *ts_2;
     char *t_3; STRING *ts_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSSI", &t_0, &ts_1, &ts_2, &ts_3, &t_4);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -1385,12 +1499,14 @@
     typedef void *(* func_t)(PARROT_INTERP, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1400,7 +1516,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
@@ -1410,14 +1526,16 @@
     typedef void *(* func_t)(PARROT_INTERP, int, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_1;
     PMC *t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IPP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1427,7 +1545,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -1439,14 +1557,16 @@
     typedef void *(* func_t)(PARROT_INTERP, void *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     STRING *t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SIP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1456,7 +1576,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -1468,11 +1588,13 @@
     typedef void(* func_t)(PARROT_INTERP, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1488,11 +1610,13 @@
     typedef void(* func_t)(PARROT_INTERP, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     STRING * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1508,20 +1632,22 @@
     typedef char *(* func_t)(char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SS", &ts_0, &ts_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0, t_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 if (t_1) Parrot_str_free_cstring(t_1);
 }
@@ -1531,18 +1657,20 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -1553,13 +1681,15 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSI", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1577,18 +1707,20 @@
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 
@@ -1599,12 +1731,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1621,17 +1755,19 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -1641,17 +1777,19 @@
     typedef FLOATVAL(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (FLOATVAL)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 
 }
@@ -1661,12 +1799,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, FLOATVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiN", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1683,18 +1823,20 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1705,12 +1847,14 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -1727,18 +1871,20 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1749,19 +1895,21 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, INTVAL, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
     STRING * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiIS", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1773,19 +1921,21 @@
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
     STRING * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSP", &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 
@@ -1797,15 +1947,17 @@
     typedef int(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)();
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -1814,19 +1966,21 @@
     typedef int(* func_t)(int, int *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; int i_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IPI", &t_0, &t_1, &t_2);
     i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &i_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 
@@ -1837,19 +1991,21 @@
     typedef int(* func_t)(int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     STRING *t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "ISI", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, Buffer_bufstart(t_1), t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -1860,20 +2016,22 @@
     typedef long(* func_t)(long, char *, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "ISSI", &t_0, &ts_1, &ts_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -1885,19 +2043,21 @@
     typedef int(* func_t)(void *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -1908,19 +2068,21 @@
     typedef int(* func_t)(void *, int, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIS", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -1931,17 +2093,19 @@
     typedef STRING *(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(t_0);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 }
 static void
@@ -1950,17 +2114,19 @@
     typedef long(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -1969,17 +2135,19 @@
     typedef char(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -1988,13 +2156,15 @@
     typedef void *(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2004,7 +2174,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
@@ -2014,12 +2184,14 @@
     typedef void *(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2029,7 +2201,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
@@ -2038,8 +2210,9 @@
     typedef int(* func_t)(void *, char *, char *, char *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -2048,12 +2221,13 @@
     char *t_3; STRING *ts_3;
     char *t_4; STRING *ts_4;
     char *t_5; STRING *ts_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSSSS", &t_0, &ts_1, &ts_2, &ts_3, &ts_4, &ts_5);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;t_4 = ts_4 ? Parrot_str_to_cstring(interp, ts_4) : (char *)NULL;t_5 = ts_5 ? Parrot_str_to_cstring(interp, ts_5) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2067,20 +2241,22 @@
     typedef char(* func_t)(void *, char *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
     char *t_3; STRING *ts_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSS", &t_0, &ts_1, &ts_2, &ts_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2092,8 +2268,9 @@
     typedef void *(* func_t)(void *, char *, char *, char *, char *, int, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2105,6 +2282,7 @@
     INTVAL t_5;
     char *t_6; STRING *ts_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSSSISI", &t_0, &ts_1, &ts_2, &ts_3, &ts_4, &t_5, &ts_6, &t_7);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;t_4 = ts_4 ? Parrot_str_to_cstring(interp, ts_4) : (char *)NULL;t_6 = ts_6 ? Parrot_str_to_cstring(interp, ts_6) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2114,7 +2292,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2130,18 +2308,20 @@
     typedef int(* func_t)(void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
@@ -2151,19 +2331,21 @@
     typedef int(* func_t)(void *, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -2174,18 +2356,20 @@
     typedef int(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -2195,18 +2379,20 @@
     typedef int(* func_t)(void *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -2216,15 +2402,17 @@
     typedef long(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)();
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -2233,13 +2421,15 @@
     typedef void *(* func_t)(void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2249,7 +2439,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
@@ -2259,14 +2449,16 @@
     typedef void *(* func_t)(void *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSS", &t_0, &ts_1, &ts_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2276,7 +2468,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2287,19 +2479,21 @@
     typedef int(* func_t)(void *, int, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIS", &t_0, &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2310,13 +2504,15 @@
     typedef void *(* func_t)(void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2326,7 +2522,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
@@ -2336,19 +2532,21 @@
     typedef long(* func_t)(char *, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SSI", &ts_0, &ts_1, &t_2);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -2359,20 +2557,22 @@
     typedef long(* func_t)(void *, char *, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSI", &t_0, &ts_1, &ts_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2384,11 +2584,13 @@
     typedef void(* func_t)(char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2403,8 +2605,9 @@
     typedef void *(* func_t)(void *, char *, char *, char *, char *, int, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2416,6 +2619,7 @@
     INTVAL t_5;
     char *t_6; STRING *ts_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSSSISI", &t_0, &ts_1, &ts_2, &ts_3, &ts_4, &t_5, &ts_6, &t_7);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;t_4 = ts_4 ? Parrot_str_to_cstring(interp, ts_4) : (char *)NULL;t_6 = ts_6 ? Parrot_str_to_cstring(interp, ts_6) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2425,7 +2629,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2441,8 +2645,9 @@
     typedef void *(* func_t)(char *, int, char **, int *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2451,6 +2656,7 @@
     char *t_2; STRING *ts_2;
     PMC *t_3; int i_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SISPP", &ts_0, &t_1, &ts_2, &t_3, &t_4);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *) NULL;i_3 = VTABLE_get_integer(interp, t_3);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2460,7 +2666,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2473,8 +2679,9 @@
     typedef void *(* func_t)(char *, int, void *, int *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2483,6 +2690,7 @@
     PMC *t_2;
     PMC *t_3; int i_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SIPPP", &ts_0, &t_1, &t_2, &t_3, &t_4);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;i_3 = VTABLE_get_integer(interp, t_3);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2492,7 +2700,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 
@@ -2505,8 +2713,9 @@
     typedef int(* func_t)(void *, PMC *, char *, int, int, int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -2517,12 +2726,13 @@
     INTVAL t_5;
     PMC *t_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPSIIIPI", &t_0, &t_1, &ts_2, &t_3, &t_4, &t_5, &t_6, &t_7);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, PMC_IS_NULL((PMC*)t_6) ? (void *)NULL : VTABLE_get_pointer(interp, t_6), t_7);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2538,8 +2748,9 @@
     typedef int(* func_t)(char *, void *, int, int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
@@ -2548,12 +2759,13 @@
     INTVAL t_3;
     STRING *t_4;
     INTVAL t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SPIISI", &ts_0, &t_1, &t_2, &t_3, &t_4, &t_5);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, Buffer_bufstart(t_4), t_5);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 
@@ -2567,8 +2779,9 @@
     typedef void *(* func_t)(void *, char *, int, void *, void *, void *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2580,6 +2793,7 @@
     PMC *t_5;
     PMC *t_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSIPPPPI", &t_0, &ts_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2589,7 +2803,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -2605,8 +2819,9 @@
     typedef void *(* func_t)(void *, int, int *, int *, int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2617,6 +2832,7 @@
     INTVAL t_4;
     PMC *t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIPPIPI", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2626,7 +2842,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -2641,8 +2857,9 @@
     typedef void *(* func_t)(void *, char *, char *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2651,6 +2868,7 @@
     char *t_2; STRING *ts_2;
     INTVAL t_3;
     PMC *t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSIP", &t_0, &ts_1, &ts_2, &t_3, &t_4);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2660,7 +2878,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2673,8 +2891,9 @@
     typedef void *(* func_t)(void *, char *, int, void *, void *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2685,6 +2904,7 @@
     PMC *t_4;
     PMC *t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSIPPPI", &t_0, &ts_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2694,7 +2914,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -2709,14 +2929,16 @@
     typedef void *(* func_t)(void *, void *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     PMC *t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2726,7 +2948,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -2737,8 +2959,9 @@
     typedef void *(* func_t)(int, int, int, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2746,6 +2969,7 @@
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2755,7 +2979,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -2767,19 +2991,21 @@
     typedef int(* func_t)(void *, void *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPI", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -2790,13 +3016,15 @@
     typedef void(* func_t)(void *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2813,14 +3041,16 @@
     typedef void *(* func_t)(void *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2830,7 +3060,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -2841,19 +3071,21 @@
     typedef int(* func_t)(void *, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -2864,8 +3096,9 @@
     typedef void *(* func_t)(void *, char *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2873,6 +3106,7 @@
     char *t_1; STRING *ts_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSII", &t_0, &ts_1, &t_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2882,7 +3116,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -2894,13 +3128,15 @@
     typedef void *(* func_t)(char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_0; STRING *ts_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SI", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2910,7 +3146,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 }
@@ -2920,14 +3156,16 @@
     typedef void *(* func_t)(void *, char *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSP", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -2937,7 +3175,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -2948,20 +3186,22 @@
     typedef int(* func_t)(void *, char *, int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     PMC *t_2; int i_2;
     PMC *t_3; int i_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSPP", &t_0, &ts_1, &t_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, &i_2, &i_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -2973,15 +3213,17 @@
     typedef char(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)();
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -2990,18 +3232,20 @@
     typedef char(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -3011,15 +3255,17 @@
     typedef double(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (double)(*fn_pointer)();
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 }
 static void
@@ -3028,17 +3274,19 @@
     typedef double(* func_t)(double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     FLOATVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "N", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (double)(*fn_pointer)(t_0);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 }
 static void
@@ -3047,15 +3295,17 @@
     typedef float(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (float)(*fn_pointer)();
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 }
 static void
@@ -3064,18 +3314,20 @@
     typedef float(* func_t)(float, float);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     FLOATVAL t_0;
     FLOATVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "NN", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (float)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 
 }
@@ -3085,18 +3337,20 @@
     typedef float(* func_t)(int, short);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (float)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 
 }
@@ -3106,17 +3360,19 @@
     typedef int(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     STRING *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(Buffer_bufstart(t_0));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -3125,17 +3381,19 @@
     typedef int(* func_t)(double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     FLOATVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "N", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -3144,17 +3402,19 @@
     typedef int(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -3163,18 +3423,20 @@
     typedef int(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -3184,19 +3446,21 @@
     typedef int(* func_t)(int, int, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     PMC *t_2; long i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIP", &t_0, &t_1, &t_2);
     i_2 = VTABLE_get_integer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, &i_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -3207,20 +3471,22 @@
     typedef int(* func_t)(int, int, long *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     PMC *t_2; long i_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIPI", &t_0, &t_1, &t_2, &t_3);
     i_2 = VTABLE_get_integer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, &i_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -3232,20 +3498,22 @@
     typedef int(* func_t)(int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3257,8 +3525,9 @@
     typedef int(* func_t)(int, int, int, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
@@ -3267,12 +3536,13 @@
     INTVAL t_3;
     INTVAL t_4;
     PMC *t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIIIP", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3, t_4, PMC_IS_NULL((PMC*)t_5) ? (void *)NULL : VTABLE_get_pointer(interp, t_5));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3286,19 +3556,21 @@
     typedef int(* func_t)(int, int, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "III", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3309,20 +3581,22 @@
     typedef int(* func_t)(int, int, long, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3334,19 +3608,21 @@
     typedef int(* func_t)(int, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIP", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3357,19 +3633,21 @@
     typedef int(* func_t)(int, int, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIS", &t_0, &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -3380,20 +3658,22 @@
     typedef int(* func_t)(int, int, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IISI", &t_0, &t_1, &ts_2, &t_3);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -3405,20 +3685,22 @@
     typedef int(* func_t)(int, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIP", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3430,19 +3712,21 @@
     typedef int(* func_t)(int, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "ISI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -3453,17 +3737,19 @@
     typedef int(* func_t)(long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -3472,18 +3758,20 @@
     typedef int(* func_t)(long, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -3493,18 +3781,20 @@
     typedef int(* func_t)(long, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -3514,19 +3804,21 @@
     typedef int(* func_t)(long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIP", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3537,19 +3829,21 @@
     typedef int(* func_t)(void *, int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; int i_1;
     PMC *t_2; int i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -3560,20 +3854,22 @@
     typedef int(* func_t)(void *, int *, int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; int i_1;
     PMC *t_2; int i_2;
     PMC *t_3; int i_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2, &i_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -3585,8 +3881,9 @@
     typedef int(* func_t)(void *, int *, int *, int *, int *, int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3596,12 +3893,13 @@
     PMC *t_4; int i_4;
     PMC *t_5; int i_5;
     PMC *t_6; int i_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPPPPP", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);i_4 = VTABLE_get_integer(interp, t_4);i_5 = VTABLE_get_integer(interp, t_5);i_6 = VTABLE_get_integer(interp, t_6);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2, &i_3, &i_4, &i_5, &i_6);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -3616,18 +3914,20 @@
     typedef int(* func_t)(void *, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; long i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
@@ -3637,20 +3937,22 @@
     typedef int(* func_t)(void *, long *, short *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; long i_1;
     PMC *t_2; short i_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -3662,19 +3964,21 @@
     typedef int(* func_t)(void *, long *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; long i_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPI", &t_0, &t_1, &t_2);
     i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 
@@ -3685,18 +3989,20 @@
     typedef int(* func_t)(void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     STRING *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), Buffer_bufstart(t_1));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -3706,19 +4012,21 @@
     typedef int(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3729,20 +4037,22 @@
     typedef int(* func_t)(void *, int, int, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     PMC *t_3; long i_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIP", &t_0, &t_1, &t_2, &t_3);
     i_3 = VTABLE_get_integer(interp, t_3);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, &i_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3754,8 +4064,9 @@
     typedef int(* func_t)(void *, int, int, long *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3763,12 +4074,13 @@
     INTVAL t_2;
     PMC *t_3; long i_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIPI", &t_0, &t_1, &t_2, &t_3, &t_4);
     i_3 = VTABLE_get_integer(interp, t_3);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, &i_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3781,20 +4093,22 @@
     typedef int(* func_t)(void *, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIII", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3806,8 +4120,9 @@
     typedef int(* func_t)(void *, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3817,12 +4132,13 @@
     INTVAL t_4;
     INTVAL t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, t_6);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3837,8 +4153,9 @@
     typedef int(* func_t)(void *, int, int, int, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3848,12 +4165,13 @@
     INTVAL t_4;
     INTVAL t_5;
     PMC *t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIIIIP", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, PMC_IS_NULL((PMC*)t_6) ? (void *)NULL : VTABLE_get_pointer(interp, t_6));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3868,20 +4186,22 @@
     typedef int(* func_t)(void *, int, int, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIII", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3893,8 +4213,9 @@
     typedef int(* func_t)(void *, int, int, long, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3902,12 +4223,13 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3920,20 +4242,22 @@
     typedef int(* func_t)(void *, int, int, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     char *t_3; STRING *ts_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIS", &t_0, &t_1, &t_2, &ts_3);
     t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3945,8 +4269,9 @@
     typedef int(* func_t)(void *, int, int, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3954,12 +4279,13 @@
     INTVAL t_2;
     char *t_3; STRING *ts_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIISI", &t_0, &t_1, &t_2, &ts_3, &t_4);
     t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3972,8 +4298,9 @@
     typedef int(* func_t)(void *, int, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3981,12 +4308,13 @@
     INTVAL t_2;
     INTVAL t_3;
     PMC *t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIIP", &t_0, &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, PMC_IS_NULL((PMC*)t_4) ? (void *)NULL : VTABLE_get_pointer(interp, t_4));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3999,19 +4327,21 @@
     typedef int(* func_t)(void *, long, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4022,19 +4352,21 @@
     typedef int(* func_t)(void *, long, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4045,8 +4377,9 @@
     typedef int(* func_t)(void *, long, long, long, long, long, long, long, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -4058,12 +4391,13 @@
     INTVAL t_6;
     INTVAL t_7;
     INTVAL t_8;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, t_6, t_7, t_8);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4080,19 +4414,21 @@
     typedef int(* func_t)(void *, long, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4103,20 +4439,22 @@
     typedef int(* func_t)(void *, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIP", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4128,18 +4466,20 @@
     typedef int(* func_t)(void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -4149,19 +4489,21 @@
     typedef int(* func_t)(void *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPI", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4172,8 +4514,9 @@
     typedef int(* func_t)(void *, void *, int, int, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -4186,12 +4529,13 @@
     INTVAL t_7;
     INTVAL t_8;
     INTVAL t_9;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8, &t_9);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4, t_5, t_6, t_7, t_8, t_9);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4209,20 +4553,22 @@
     typedef int(* func_t)(void *, void *, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4234,19 +4580,21 @@
     typedef int(* func_t)(void *, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4257,19 +4605,21 @@
     typedef int(* func_t)(void *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -4280,20 +4630,22 @@
     typedef int(* func_t)(void *, int, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PISI", &t_0, &t_1, &ts_2, &t_3);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -4305,17 +4657,19 @@
     typedef int(* func_t)(short);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -4324,19 +4678,21 @@
     typedef int(* func_t)(short, short *, short *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; short i_1;
     PMC *t_2; short i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IPP", &t_0, &t_1, &t_2);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &i_1, &i_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -4347,20 +4703,22 @@
     typedef int(* func_t)(short, short *, short *, short *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; short i_1;
     PMC *t_2; short i_2;
     PMC *t_3; short i_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IPPP", &t_0, &t_1, &t_2, &t_3);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &i_1, &i_2, &i_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -4372,18 +4730,20 @@
     typedef int(* func_t)(short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -4393,19 +4753,21 @@
     typedef int(* func_t)(short, short, short);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "III", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4416,20 +4778,22 @@
     typedef int(* func_t)(short, short, short, short);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4441,17 +4805,19 @@
     typedef int(* func_t)(char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
@@ -4460,18 +4826,20 @@
     typedef int(* func_t)(char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SI", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 }
@@ -4481,17 +4849,19 @@
     typedef int(* func_t)(long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; long i_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     i_0 = VTABLE_get_integer(interp, t_0);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&i_0);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 }
 static void
@@ -4500,18 +4870,20 @@
     typedef int(* func_t)(long *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; long i_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     i_0 = VTABLE_get_integer(interp, t_0);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&i_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 
 }
@@ -4521,19 +4893,21 @@
     typedef int(* func_t)(long *, short *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; long i_0;
     PMC *t_1; short i_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     i_0 = VTABLE_get_integer(interp, t_0);i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&i_0, &i_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 VTABLE_set_integer_native(interp, t_1, i_1);
 
@@ -4544,18 +4918,20 @@
     typedef long(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -4565,18 +4941,20 @@
     typedef long(* func_t)(long, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; long i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(t_0, &i_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
@@ -4586,18 +4964,20 @@
     typedef long(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -4607,19 +4987,21 @@
     typedef long(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4630,20 +5012,22 @@
     typedef long(* func_t)(void *, int *, int *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; int i_1;
     PMC *t_2; int i_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPI", &t_0, &t_1, &t_2, &t_3);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -4655,19 +5039,21 @@
     typedef long(* func_t)(int *, int *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; int i_0;
     PMC *t_1; int i_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPI", &t_0, &t_1, &t_2);
     i_0 = VTABLE_get_integer(interp, t_0);i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(&i_0, &i_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 VTABLE_set_integer_native(interp, t_1, i_1);
 
@@ -4678,12 +5064,14 @@
     typedef void *(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)();
@@ -4691,7 +5079,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
@@ -4700,12 +5088,14 @@
     typedef void *(* func_t)(char **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *) NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4715,7 +5105,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
@@ -4724,12 +5114,14 @@
     typedef void *(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     STRING *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4739,7 +5131,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
@@ -4748,12 +5140,14 @@
     typedef void *(* func_t)(PARROT_INTERP, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4763,7 +5157,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
@@ -4773,12 +5167,14 @@
     typedef void *(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4788,7 +5184,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
@@ -4797,13 +5193,15 @@
     typedef void *(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4813,7 +5211,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
@@ -4823,8 +5221,9 @@
     typedef void *(* func_t)(int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -4832,6 +5231,7 @@
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4841,7 +5241,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -4853,8 +5253,9 @@
     typedef void *(* func_t)(int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -4864,6 +5265,7 @@
     INTVAL t_3;
     INTVAL t_4;
     INTVAL t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4873,7 +5275,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -4887,8 +5289,9 @@
     typedef void *(* func_t)(int, int, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -4900,6 +5303,7 @@
     INTVAL t_5;
     INTVAL t_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4909,7 +5313,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -4925,14 +5329,16 @@
     typedef void *(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4942,7 +5348,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -4953,8 +5359,9 @@
     typedef void *(* func_t)(void *, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -4963,6 +5370,7 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -4972,7 +5380,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -4985,12 +5393,14 @@
     typedef void *(* func_t)(char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5000,7 +5410,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
@@ -5009,14 +5419,16 @@
     typedef void *(* func_t)(char *, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_0; STRING *ts_0;
     PMC *t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SPP", &ts_0, &t_1, &t_2);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5026,7 +5438,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 
@@ -5037,8 +5449,9 @@
     typedef void *(* func_t)(char *, char *, char *, char *, char *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -5049,6 +5462,7 @@
     char *t_4; STRING *ts_4;
     char *t_5; STRING *ts_5;
     char *t_6; STRING *ts_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SSSSSSS", &ts_0, &ts_1, &ts_2, &ts_3, &ts_4, &ts_5, &ts_6);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;t_4 = ts_4 ? Parrot_str_to_cstring(interp, ts_4) : (char *)NULL;t_5 = ts_5 ? Parrot_str_to_cstring(interp, ts_5) : (char *)NULL;t_6 = ts_6 ? Parrot_str_to_cstring(interp, ts_6) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5058,7 +5472,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -5073,15 +5487,17 @@
     typedef short(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (short)(*fn_pointer)();
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
@@ -5090,17 +5506,19 @@
     typedef char *(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)();
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
@@ -5109,19 +5527,21 @@
     typedef char *(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
@@ -5130,20 +5550,22 @@
     typedef char *(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0, t_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 
 }
@@ -5153,20 +5575,22 @@
     typedef char *(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 
 }
@@ -5176,21 +5600,23 @@
     typedef char *(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 
 
@@ -5201,19 +5627,21 @@
     typedef char *(* func_t)(char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
@@ -5222,21 +5650,23 @@
     typedef char *(* func_t)(char *, long, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
     INTVAL t_1;
     PMC *t_2; long i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SIP", &ts_0, &t_1, &t_2);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;i_2 = VTABLE_get_integer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0, t_1, &i_2);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -5247,20 +5677,22 @@
     typedef char *(* func_t)(char *, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
     PMC *t_1; long i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SP", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0, &i_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
@@ -5270,18 +5702,20 @@
     typedef int(* func_t)(short, char);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -5291,18 +5725,20 @@
     typedef short(* func_t)(short, char);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (short)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -5312,18 +5748,20 @@
     typedef char(* func_t)(short, char);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -5333,19 +5771,21 @@
     typedef int(* func_t)(int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "III", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5356,18 +5796,20 @@
     typedef int(* func_t)(int, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; int i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &i_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
@@ -5377,19 +5819,21 @@
     typedef char *(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     STRING *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(Buffer_bufstart(t_0));
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
@@ -5398,19 +5842,21 @@
     typedef char *(* func_t)(char **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *) NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(&t_0);
     final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
@@ -5419,11 +5865,13 @@
     typedef void(* func_t)(PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5438,12 +5886,14 @@
     typedef void(* func_t)(void *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5459,13 +5909,15 @@
     typedef void *(* func_t)(int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5475,7 +5927,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
@@ -5485,18 +5937,20 @@
     typedef int(* func_t)(int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; int i_0;
     PMC *t_1; int i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     i_0 = VTABLE_get_integer(interp, t_0);i_1 = VTABLE_get_integer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&i_0, &i_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
@@ -5506,13 +5960,15 @@
     typedef void(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5529,11 +5985,13 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5549,17 +6007,19 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -5569,18 +6029,20 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5591,18 +6053,20 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -5613,17 +6077,19 @@
     typedef int(* func_t)(PARROT_INTERP, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
@@ -5633,17 +6099,19 @@
     typedef int(* func_t)(PARROT_INTERP, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_1);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
@@ -5653,12 +6121,14 @@
     typedef void(* func_t)(void **, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0; void *v_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     v_0 = VTABLE_get_pointer(interp, t_0);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5674,8 +6144,9 @@
     typedef void *(* func_t)(void *, void *, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -5684,6 +6155,7 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5693,7 +6165,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -5706,8 +6178,9 @@
     typedef void *(* func_t)(void *, void *, int, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -5720,6 +6193,7 @@
     INTVAL t_6;
     INTVAL t_7;
     INTVAL t_8;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -5729,7 +6203,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -5746,20 +6220,22 @@
     typedef int(* func_t)(void *, void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPII", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5771,8 +6247,9 @@
     typedef int(* func_t)(void *, void *, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5780,12 +6257,13 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5798,8 +6276,9 @@
     typedef int(* func_t)(void *, void *, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5808,12 +6287,13 @@
     INTVAL t_3;
     INTVAL t_4;
     INTVAL t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4, t_5);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5827,8 +6307,9 @@
     typedef int(* func_t)(void *, void *, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5838,12 +6319,13 @@
     INTVAL t_4;
     INTVAL t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4, t_5, t_6);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5858,8 +6340,9 @@
     typedef int(* func_t)(void *, void *, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5870,12 +6353,13 @@
     INTVAL t_5;
     INTVAL t_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4, t_5, t_6, t_7);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5891,19 +6375,21 @@
     typedef int(* func_t)(void *, void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPS", &t_0, &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -5914,20 +6400,22 @@
     typedef int(* func_t)(void *, void *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPI", &t_0, &t_1, &t_2, &t_3);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5939,8 +6427,9 @@
     typedef int(* func_t)(void *, void *, void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5948,12 +6437,13 @@
     PMC *t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5966,8 +6456,9 @@
     typedef int(* func_t)(void *, void *, void *, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5977,12 +6468,13 @@
     INTVAL t_4;
     INTVAL t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3, t_4, t_5, t_6);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5997,8 +6489,9 @@
     typedef int(* func_t)(void *, void *, void *, void *, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -6011,12 +6504,13 @@
     INTVAL t_7;
     INTVAL t_8;
     INTVAL t_9;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPPIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8, &t_9);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3), t_4, t_5, t_6, t_7, t_8, t_9);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -6034,13 +6528,15 @@
     typedef void(* func_t)(float, float, float);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     FLOATVAL t_0;
     FLOATVAL t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "NNN", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -6057,11 +6553,13 @@
     typedef void(* func_t)(void **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0; void *v_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     v_0 = VTABLE_get_pointer(interp, t_0);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -6076,13 +6574,15 @@
     typedef void(* func_t)(void **, void **, void **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0; void *v_0;
     PMC *t_1; void *v_1;
     PMC *t_2; void *v_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     v_0 = VTABLE_get_pointer(interp, t_0);v_1 = VTABLE_get_pointer(interp, t_1);v_2 = VTABLE_get_pointer(interp, t_2);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
@@ -6099,18 +6599,20 @@
     typedef int(* func_t)(char *, void **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
     PMC *t_1; void *v_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SP", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;v_1 = VTABLE_get_pointer(interp, t_1);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &v_1);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 VTABLE_set_pointer(interp, t_1, v_1);
 }
@@ -6120,8 +6622,9 @@
     typedef int(* func_t)(void *, char *, int, void **, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -6129,12 +6632,13 @@
     INTVAL t_2;
     PMC *t_3; void *v_3;
     PMC *t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSIPP", &t_0, &ts_1, &t_2, &t_3, &t_4);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;v_3 = VTABLE_get_pointer(interp, t_3);
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, &v_3, PMC_IS_NULL((PMC*)t_4) ? (void *)NULL : VTABLE_get_pointer(interp, t_4));
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -6147,19 +6651,21 @@
     typedef int(* func_t)(void *, int, double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIN", &t_0, &t_1, &t_2);
     
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -6170,8 +6676,9 @@
     typedef int(* func_t)(void *, int, char *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -6179,12 +6686,13 @@
     char *t_2; STRING *ts_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PISII", &t_0, &t_1, &ts_2, &t_3, &t_4);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
     GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
-    Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -6194,19 +6702,14 @@
 
  void
 Parrot_nci_load_extra_thunks(PARROT_INTERP)
-;
- void
-Parrot_nci_load_extra_thunks(PARROT_INTERP)
  {
-    PMC *iglobals;
+    PMC * const iglobals = interp->iglobals;
     PMC *nci_funcs;
     PMC *temp_pmc;
 
-    iglobals = interp->iglobals;
     PARROT_ASSERT(!(PMC_IS_NULL(iglobals)));
 
-    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals,
-            IGLOBALS_NCI_FUNCS);
+    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FUNCS);
     PARROT_ASSERT(!(PMC_IS_NULL(nci_funcs)));
 
     temp_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);

Modified: branches/avl_string_cache/src/oo.c
==============================================================================
--- branches/avl_string_cache/src/oo.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/oo.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -219,8 +219,7 @@
 
 /*
 
-=item C<PMC * Parrot_oo_clone_object(PARROT_INTERP, PMC *pmc, PMC *class_, PMC
-*dest)>
+=item C<PMC * Parrot_oo_clone_object(PARROT_INTERP, PMC *pmc, PMC *dest)>
 
 Clone an Object PMC. If an existing PMC C<dest> is provided, reuse that
 PMC to store copies of the data. Otherwise, create a new PMC and populate
@@ -232,11 +231,10 @@
 
 PARROT_CANNOT_RETURN_NULL
 PMC *
-Parrot_oo_clone_object(PARROT_INTERP, ARGIN(PMC *pmc),
-    ARGMOD_NULLOK(PMC *class_), ARGMOD_NULLOK(PMC *dest))
+Parrot_oo_clone_object(PARROT_INTERP, ARGIN(PMC *pmc), ARGMOD_NULLOK(PMC *dest))
 {
     ASSERT_ARGS(Parrot_oo_clone_object)
-    Parrot_Object_attributes *obj;
+    Parrot_Object_attributes *obj = PARROT_OBJECT(pmc);
     Parrot_Object_attributes *cloned_guts;
     Parrot_Class_attributes  *_class;
     PMC                      *cloned;
@@ -244,13 +242,9 @@
     INTVAL                    i, num_attrs;
 
     if (!PMC_IS_NULL(dest)) {
-        PARROT_ASSERT(!PMC_IS_NULL(class_));
-        PARROT_ASSERT(class_->vtable->base_type == enum_class_Class);
-        obj    = PARROT_OBJECT(pmc);
         cloned = dest;
     }
     else {
-        obj    = PARROT_OBJECT(pmc);
         cloned = Parrot_pmc_new_noinit(interp, enum_class_Object);
     }
 
@@ -268,7 +262,7 @@
     /* Now clone attributes list.class. */
     cloned_guts               = (Parrot_Object_attributes *) PMC_data(cloned);
     cloned_guts->_class       = obj->_class;
-    cloned_guts->attrib_store = NULL;
+    cloned_guts->attrib_store = NULL; /* XXX Do we need to set ->attrib_store twice? */
     cloned_guts->attrib_store = VTABLE_clone(interp, obj->attrib_store);
     num_attrs                 = VTABLE_elements(interp, cloned_guts->attrib_store);
     for (i = 0; i < num_attrs; i++) {
@@ -282,9 +276,10 @@
     /* Some of the attributes may have been the PMCs providing storage for any
      * PMCs we inherited from; also need to clone those. */
     if (CLASS_has_alien_parents_TEST(obj->_class)) {
+        int j;
         /* Locate any PMC parents. */
-        for (i = 0; i < num_classes; i++) {
-            PMC * const cur_class = VTABLE_get_pmc_keyed_int(interp, _class->all_parents, i);
+        for (j = 0; j < num_classes; j++) {
+            PMC * const cur_class = VTABLE_get_pmc_keyed_int(interp, _class->all_parents, j);
             if (cur_class->vtable->base_type == enum_class_PMCProxy) {
                 /* Clone this PMC too. */
                 STRING * const proxy = CONST_STRING(interp, "proxy");

Modified: branches/avl_string_cache/src/ops/bit.ops
==============================================================================
--- branches/avl_string_cache/src/ops/bit.ops	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/ops/bit.ops	Thu Apr 22 09:55:26 2010	(r45889)
@@ -109,37 +109,37 @@
 
 =cut
 
-inline op bands(inout STR, in STR) :base_core {
-    Parrot_str_bitwise_and(interp, $1, $2, &$1);
+inline op bands(inout STR, in STR) :base_core :deprecated {
+    $1 = Parrot_str_bitwise_and(interp, $1, $2);
 }
 
 inline op bands(invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_and(interp, a, $2, NULL);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, $2);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bands(invar PMC, invar PMC) :base_core {
     STRING * a = VTABLE_get_string(interp, $1);
     STRING * const b = VTABLE_get_string(interp, $2);
-    a = Parrot_str_bitwise_and(interp, a, b, NULL);
+    a = Parrot_str_bitwise_and(interp, a, b);
     VTABLE_set_string_native(interp, $1, a);
 }
 
 inline op bands(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_and(interp, $2, $3, NULL);
+    $1 = Parrot_str_bitwise_and(interp, $2, $3);
 }
 
 inline op bands(invar PMC, invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = Parrot_str_bitwise_and(interp, a, $3, NULL);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, $3);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bands(invar PMC, invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
     STRING * const b = VTABLE_get_string(interp, $3);
-    STRING * const c = Parrot_str_bitwise_and(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_and(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
@@ -187,23 +187,23 @@
 
 =cut
 
-inline op bnots(inout STR) :base_core {
-    Parrot_str_bitwise_not(interp, $1, &$1);
+inline op bnots(inout STR) :base_core :deprecated {
+    $1 = Parrot_str_bitwise_not(interp, $1);
 }
 
 inline op bnots(out STR, in STR) :base_core {
-    Parrot_str_bitwise_not(interp, $2, &$1);
+    $1 = Parrot_str_bitwise_not(interp, $2);
 }
 
 inline op bnots(invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_not(interp, a, NULL);
+    STRING * const b = Parrot_str_bitwise_not(interp, a);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bnots(out PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = Parrot_str_bitwise_not(interp, a, NULL);
+    STRING * const b = Parrot_str_bitwise_not(interp, a);
     VTABLE_set_string_native(interp, $1, b);
 }
 
@@ -279,37 +279,37 @@
 
 =cut
 
-inline op bors(inout STR, in STR) :base_core {
-    Parrot_str_bitwise_or(interp, $1, $2, &$1);
+inline op bors(inout STR, in STR) :base_core :deprecated {
+    $1 = Parrot_str_bitwise_or(interp, $1, $2);
 }
 
 inline op bors(invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_or(interp, a, $2, NULL);
+    STRING * const b = Parrot_str_bitwise_or(interp, a, $2);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bors(invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
     STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
 inline op bors(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_or(interp, $2, $3, NULL);
+    $1 = Parrot_str_bitwise_or(interp, $2, $3);
 }
 
 inline op bors(invar PMC, invar PMC, in STR) :base_core {
     STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_or(interp, b, $3, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, b, $3);
     VTABLE_set_string_native(interp, $1, c);
 }
 
 inline op bors(invar PMC, invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
     STRING * const b = VTABLE_get_string(interp, $3);
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
@@ -579,37 +579,37 @@
 
 =cut
 
-inline op bxors(inout STR, in STR) :base_core {
-    Parrot_str_bitwise_xor(interp, $1, $2, &$1);
+inline op bxors(inout STR, in STR) :base_core :deprecated {
+    $1 = Parrot_str_bitwise_xor(interp, $1, $2);
 }
 
 inline op bxors(invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_xor(interp, a, $2, NULL);
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, $2);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bxors(invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
     STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_xor(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
 inline op bxors(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_xor(interp, $2, $3, NULL);
+    $1 = Parrot_str_bitwise_xor(interp, $2, $3);
 }
 
 inline op bxors(invar PMC, invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = Parrot_str_bitwise_xor(interp, a, $3, NULL);
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, $3);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bxors(invar PMC, invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
     STRING * const b = VTABLE_get_string(interp, $3);
-    STRING * const c = Parrot_str_bitwise_xor(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 

Modified: branches/avl_string_cache/src/ops/core.ops
==============================================================================
--- branches/avl_string_cache/src/ops/core.ops	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/ops/core.ops	Thu Apr 22 09:55:26 2010	(r45889)
@@ -746,7 +746,9 @@
     PMC * except = $1;
     opcode_t *dest;
     opcode_t * const ret    = expr NEXT();
-    PMC      * const resume = new_ret_continuation_pmc(interp, ret);
+    PMC      * const resume = pmc_new(interp, enum_class_Continuation);
+
+    VTABLE_set_pointer(interp, resume, ret);
 
     if (PMC_IS_NULL(except) || except->vtable->base_type != enum_class_Exception)
         except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
@@ -792,10 +794,12 @@
 inline op die(in STR) :flow {
     opcode_t        *dest;
     opcode_t * const ret       = expr NEXT();
-    PMC      * const resume    = new_ret_continuation_pmc(interp, ret);
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
     PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_error,
                                     CONTROL_ERROR, $1);
 
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     dest = Parrot_ex_throw_from_op(interp, exception, ret);
@@ -805,11 +809,13 @@
 inline op die(in PMC) :flow {
     opcode_t        *dest;
     opcode_t * const ret       = expr NEXT();
-    PMC      * const resume    = new_ret_continuation_pmc(interp, ret);
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
     STRING   * const msg       = PMC_IS_NULL($1) ? NULL : VTABLE_get_string(interp, $1);
     PMC      * const exception =
         Parrot_ex_build_exception(interp, EXCEPT_error, CONTROL_ERROR, msg);
 
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     dest = Parrot_ex_throw_from_op(interp, exception, ret);
@@ -831,9 +837,11 @@
 inline op exit(in INT) :flow {
     opcode_t        *dest;
     opcode_t * const ret       = expr NEXT();
-    PMC      * const resume    = new_ret_continuation_pmc(interp, ret);
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
     PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit, $1, NULL);
 
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     VTABLE_set_integer_keyed_str(interp, exception,

Modified: branches/avl_string_cache/src/ops/ops.num
==============================================================================
--- branches/avl_string_cache/src/ops/ops.num	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/ops/ops.num	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1087,193 +1087,209 @@
 substr_s_p_ic_i                1063
 substr_s_p_i_ic                1064
 substr_s_p_ic_ic               1065
-index_i_s_s                    1066
-index_i_sc_s                   1067
-index_i_s_sc                   1068
-index_i_sc_sc                  1069
-index_i_s_s_i                  1070
-index_i_sc_s_i                 1071
-index_i_s_sc_i                 1072
-index_i_sc_sc_i                1073
-index_i_s_s_ic                 1074
-index_i_sc_s_ic                1075
-index_i_s_sc_ic                1076
-index_i_sc_sc_ic               1077
-sprintf_s_s_p                  1078
-sprintf_s_sc_p                 1079
-sprintf_p_p_p                  1080
-new_s                          1081
-new_s_i                        1082
-new_s_ic                       1083
-stringinfo_i_s_i               1084
-stringinfo_i_sc_i              1085
-stringinfo_i_s_ic              1086
-stringinfo_i_sc_ic             1087
-upcase_s_s                     1088
-upcase_s_sc                    1089
-upcase_s                       1090
-downcase_s_s                   1091
-downcase_s_sc                  1092
-downcase_s                     1093
-titlecase_s_s                  1094
-titlecase_s_sc                 1095
-titlecase_s                    1096
-join_s_s_p                     1097
-join_s_sc_p                    1098
-split_p_s_s                    1099
-split_p_sc_s                   1100
-split_p_s_sc                   1101
-split_p_sc_sc                  1102
-charset_i_s                    1103
-charset_i_sc                   1104
-charsetname_s_i                1105
-charsetname_s_ic               1106
-find_charset_i_s               1107
-find_charset_i_sc              1108
-trans_charset_s_i              1109
-trans_charset_s_ic             1110
-trans_charset_s_s_i            1111
-trans_charset_s_sc_i           1112
-trans_charset_s_s_ic           1113
-trans_charset_s_sc_ic          1114
-encoding_i_s                   1115
-encoding_i_sc                  1116
-encodingname_s_i               1117
-encodingname_s_ic              1118
-find_encoding_i_s              1119
-find_encoding_i_sc             1120
-trans_encoding_s_i             1121
-trans_encoding_s_ic            1122
-trans_encoding_s_s_i           1123
-trans_encoding_s_sc_i          1124
-trans_encoding_s_s_ic          1125
-trans_encoding_s_sc_ic         1126
-is_cclass_i_i_s_i              1127
-is_cclass_i_ic_s_i             1128
-is_cclass_i_i_sc_i             1129
-is_cclass_i_ic_sc_i            1130
-is_cclass_i_i_s_ic             1131
-is_cclass_i_ic_s_ic            1132
-is_cclass_i_i_sc_ic            1133
-is_cclass_i_ic_sc_ic           1134
-find_cclass_i_i_s_i_i          1135
-find_cclass_i_ic_s_i_i         1136
-find_cclass_i_i_sc_i_i         1137
-find_cclass_i_ic_sc_i_i        1138
-find_cclass_i_i_s_ic_i         1139
-find_cclass_i_ic_s_ic_i        1140
-find_cclass_i_i_sc_ic_i        1141
-find_cclass_i_ic_sc_ic_i       1142
-find_cclass_i_i_s_i_ic         1143
-find_cclass_i_ic_s_i_ic        1144
-find_cclass_i_i_sc_i_ic        1145
-find_cclass_i_ic_sc_i_ic       1146
-find_cclass_i_i_s_ic_ic        1147
-find_cclass_i_ic_s_ic_ic       1148
-find_cclass_i_i_sc_ic_ic       1149
-find_cclass_i_ic_sc_ic_ic      1150
-find_not_cclass_i_i_s_i_i      1151
-find_not_cclass_i_ic_s_i_i     1152
-find_not_cclass_i_i_sc_i_i     1153
-find_not_cclass_i_ic_sc_i_i    1154
-find_not_cclass_i_i_s_ic_i     1155
-find_not_cclass_i_ic_s_ic_i    1156
-find_not_cclass_i_i_sc_ic_i    1157
-find_not_cclass_i_ic_sc_ic_i   1158
-find_not_cclass_i_i_s_i_ic     1159
-find_not_cclass_i_ic_s_i_ic    1160
-find_not_cclass_i_i_sc_i_ic    1161
-find_not_cclass_i_ic_sc_i_ic   1162
-find_not_cclass_i_i_s_ic_ic    1163
-find_not_cclass_i_ic_s_ic_ic   1164
-find_not_cclass_i_i_sc_ic_ic   1165
-find_not_cclass_i_ic_sc_ic_ic  1166
-escape_s_s                     1167
-compose_s_s                    1168
-compose_s_sc                   1169
-spawnw_i_s                     1170
-spawnw_i_sc                    1171
-spawnw_i_p                     1172
-err_i                          1173
-err_s                          1174
-err_s_i                        1175
-err_s_ic                       1176
-time_i                         1177
-time_n                         1178
-gmtime_s_i                     1179
-gmtime_s_ic                    1180
-localtime_s_i                  1181
-localtime_s_ic                 1182
-decodetime_p_i                 1183
-decodetime_p_ic                1184
-decodelocaltime_p_i            1185
-decodelocaltime_p_ic           1186
-sysinfo_s_i                    1187
-sysinfo_s_ic                   1188
-sysinfo_i_i                    1189
-sysinfo_i_ic                   1190
-sleep_i                        1191
-sleep_ic                       1192
-sleep_n                        1193
-sleep_nc                       1194
-sizeof_i_i                     1195
-sizeof_i_ic                    1196
-store_lex_s_p                  1197
-store_lex_sc_p                 1198
-store_dynamic_lex_s_p          1199
-store_dynamic_lex_sc_p         1200
-find_lex_p_s                   1201
-find_lex_p_sc                  1202
-find_dynamic_lex_p_s           1203
-find_dynamic_lex_p_sc          1204
-find_caller_lex_p_s            1205
-find_caller_lex_p_sc           1206
-get_namespace_p                1207
-get_namespace_p_p              1208
-get_namespace_p_pc             1209
-get_hll_namespace_p            1210
-get_hll_namespace_p_p          1211
-get_hll_namespace_p_pc         1212
-get_root_namespace_p           1213
-get_root_namespace_p_p         1214
-get_root_namespace_p_pc        1215
-get_global_p_s                 1216
-get_global_p_sc                1217
-get_global_p_p_s               1218
-get_global_p_pc_s              1219
-get_global_p_p_sc              1220
-get_global_p_pc_sc             1221
-get_hll_global_p_s             1222
-get_hll_global_p_sc            1223
-get_hll_global_p_p_s           1224
-get_hll_global_p_pc_s          1225
-get_hll_global_p_p_sc          1226
-get_hll_global_p_pc_sc         1227
-get_root_global_p_s            1228
-get_root_global_p_sc           1229
-get_root_global_p_p_s          1230
-get_root_global_p_pc_s         1231
-get_root_global_p_p_sc         1232
-get_root_global_p_pc_sc        1233
-set_global_s_p                 1234
-set_global_sc_p                1235
-set_global_p_s_p               1236
-set_global_pc_s_p              1237
-set_global_p_sc_p              1238
-set_global_pc_sc_p             1239
-set_hll_global_s_p             1240
-set_hll_global_sc_p            1241
-set_hll_global_p_s_p           1242
-set_hll_global_pc_s_p          1243
-set_hll_global_p_sc_p          1244
-set_hll_global_pc_sc_p         1245
-set_root_global_s_p            1246
-set_root_global_sc_p           1247
-set_root_global_p_s_p          1248
-set_root_global_pc_s_p         1249
-set_root_global_p_sc_p         1250
-set_root_global_pc_sc_p        1251
-find_name_p_s                  1252
-find_name_p_sc                 1253
-find_sub_not_null_p_s          1254
-find_sub_not_null_p_sc         1255
+replace_s_s_i_i_s              1066
+replace_s_sc_i_i_s             1067
+replace_s_s_ic_i_s             1068
+replace_s_sc_ic_i_s            1069
+replace_s_s_i_ic_s             1070
+replace_s_sc_i_ic_s            1071
+replace_s_s_ic_ic_s            1072
+replace_s_sc_ic_ic_s           1073
+replace_s_s_i_i_sc             1074
+replace_s_sc_i_i_sc            1075
+replace_s_s_ic_i_sc            1076
+replace_s_sc_ic_i_sc           1077
+replace_s_s_i_ic_sc            1078
+replace_s_sc_i_ic_sc           1079
+replace_s_s_ic_ic_sc           1080
+replace_s_sc_ic_ic_sc          1081
+index_i_s_s                    1082
+index_i_sc_s                   1083
+index_i_s_sc                   1084
+index_i_sc_sc                  1085
+index_i_s_s_i                  1086
+index_i_sc_s_i                 1087
+index_i_s_sc_i                 1088
+index_i_sc_sc_i                1089
+index_i_s_s_ic                 1090
+index_i_sc_s_ic                1091
+index_i_s_sc_ic                1092
+index_i_sc_sc_ic               1093
+sprintf_s_s_p                  1094
+sprintf_s_sc_p                 1095
+sprintf_p_p_p                  1096
+new_s                          1097
+new_s_i                        1098
+new_s_ic                       1099
+stringinfo_i_s_i               1100
+stringinfo_i_sc_i              1101
+stringinfo_i_s_ic              1102
+stringinfo_i_sc_ic             1103
+upcase_s_s                     1104
+upcase_s_sc                    1105
+upcase_s                       1106
+downcase_s_s                   1107
+downcase_s_sc                  1108
+downcase_s                     1109
+titlecase_s_s                  1110
+titlecase_s_sc                 1111
+titlecase_s                    1112
+join_s_s_p                     1113
+join_s_sc_p                    1114
+split_p_s_s                    1115
+split_p_sc_s                   1116
+split_p_s_sc                   1117
+split_p_sc_sc                  1118
+charset_i_s                    1119
+charset_i_sc                   1120
+charsetname_s_i                1121
+charsetname_s_ic               1122
+find_charset_i_s               1123
+find_charset_i_sc              1124
+trans_charset_s_i              1125
+trans_charset_s_ic             1126
+trans_charset_s_s_i            1127
+trans_charset_s_sc_i           1128
+trans_charset_s_s_ic           1129
+trans_charset_s_sc_ic          1130
+encoding_i_s                   1131
+encoding_i_sc                  1132
+encodingname_s_i               1133
+encodingname_s_ic              1134
+find_encoding_i_s              1135
+find_encoding_i_sc             1136
+trans_encoding_s_i             1137
+trans_encoding_s_ic            1138
+trans_encoding_s_s_i           1139
+trans_encoding_s_sc_i          1140
+trans_encoding_s_s_ic          1141
+trans_encoding_s_sc_ic         1142
+is_cclass_i_i_s_i              1143
+is_cclass_i_ic_s_i             1144
+is_cclass_i_i_sc_i             1145
+is_cclass_i_ic_sc_i            1146
+is_cclass_i_i_s_ic             1147
+is_cclass_i_ic_s_ic            1148
+is_cclass_i_i_sc_ic            1149
+is_cclass_i_ic_sc_ic           1150
+find_cclass_i_i_s_i_i          1151
+find_cclass_i_ic_s_i_i         1152
+find_cclass_i_i_sc_i_i         1153
+find_cclass_i_ic_sc_i_i        1154
+find_cclass_i_i_s_ic_i         1155
+find_cclass_i_ic_s_ic_i        1156
+find_cclass_i_i_sc_ic_i        1157
+find_cclass_i_ic_sc_ic_i       1158
+find_cclass_i_i_s_i_ic         1159
+find_cclass_i_ic_s_i_ic        1160
+find_cclass_i_i_sc_i_ic        1161
+find_cclass_i_ic_sc_i_ic       1162
+find_cclass_i_i_s_ic_ic        1163
+find_cclass_i_ic_s_ic_ic       1164
+find_cclass_i_i_sc_ic_ic       1165
+find_cclass_i_ic_sc_ic_ic      1166
+find_not_cclass_i_i_s_i_i      1167
+find_not_cclass_i_ic_s_i_i     1168
+find_not_cclass_i_i_sc_i_i     1169
+find_not_cclass_i_ic_sc_i_i    1170
+find_not_cclass_i_i_s_ic_i     1171
+find_not_cclass_i_ic_s_ic_i    1172
+find_not_cclass_i_i_sc_ic_i    1173
+find_not_cclass_i_ic_sc_ic_i   1174
+find_not_cclass_i_i_s_i_ic     1175
+find_not_cclass_i_ic_s_i_ic    1176
+find_not_cclass_i_i_sc_i_ic    1177
+find_not_cclass_i_ic_sc_i_ic   1178
+find_not_cclass_i_i_s_ic_ic    1179
+find_not_cclass_i_ic_s_ic_ic   1180
+find_not_cclass_i_i_sc_ic_ic   1181
+find_not_cclass_i_ic_sc_ic_ic  1182
+escape_s_s                     1183
+compose_s_s                    1184
+compose_s_sc                   1185
+spawnw_i_s                     1186
+spawnw_i_sc                    1187
+spawnw_i_p                     1188
+err_i                          1189
+err_s                          1190
+err_s_i                        1191
+err_s_ic                       1192
+time_i                         1193
+time_n                         1194
+gmtime_s_i                     1195
+gmtime_s_ic                    1196
+localtime_s_i                  1197
+localtime_s_ic                 1198
+decodetime_p_i                 1199
+decodetime_p_ic                1200
+decodelocaltime_p_i            1201
+decodelocaltime_p_ic           1202
+sysinfo_s_i                    1203
+sysinfo_s_ic                   1204
+sysinfo_i_i                    1205
+sysinfo_i_ic                   1206
+sleep_i                        1207
+sleep_ic                       1208
+sleep_n                        1209
+sleep_nc                       1210
+sizeof_i_i                     1211
+sizeof_i_ic                    1212
+store_lex_s_p                  1213
+store_lex_sc_p                 1214
+store_dynamic_lex_s_p          1215
+store_dynamic_lex_sc_p         1216
+find_lex_p_s                   1217
+find_lex_p_sc                  1218
+find_dynamic_lex_p_s           1219
+find_dynamic_lex_p_sc          1220
+find_caller_lex_p_s            1221
+find_caller_lex_p_sc           1222
+get_namespace_p                1223
+get_namespace_p_p              1224
+get_namespace_p_pc             1225
+get_hll_namespace_p            1226
+get_hll_namespace_p_p          1227
+get_hll_namespace_p_pc         1228
+get_root_namespace_p           1229
+get_root_namespace_p_p         1230
+get_root_namespace_p_pc        1231
+get_global_p_s                 1232
+get_global_p_sc                1233
+get_global_p_p_s               1234
+get_global_p_pc_s              1235
+get_global_p_p_sc              1236
+get_global_p_pc_sc             1237
+get_hll_global_p_s             1238
+get_hll_global_p_sc            1239
+get_hll_global_p_p_s           1240
+get_hll_global_p_pc_s          1241
+get_hll_global_p_p_sc          1242
+get_hll_global_p_pc_sc         1243
+get_root_global_p_s            1244
+get_root_global_p_sc           1245
+get_root_global_p_p_s          1246
+get_root_global_p_pc_s         1247
+get_root_global_p_p_sc         1248
+get_root_global_p_pc_sc        1249
+set_global_s_p                 1250
+set_global_sc_p                1251
+set_global_p_s_p               1252
+set_global_pc_s_p              1253
+set_global_p_sc_p              1254
+set_global_pc_sc_p             1255
+set_hll_global_s_p             1256
+set_hll_global_sc_p            1257
+set_hll_global_p_s_p           1258
+set_hll_global_pc_s_p          1259
+set_hll_global_p_sc_p          1260
+set_hll_global_pc_sc_p         1261
+set_root_global_s_p            1262
+set_root_global_sc_p           1263
+set_root_global_p_s_p          1264
+set_root_global_pc_s_p         1265
+set_root_global_p_sc_p         1266
+set_root_global_pc_sc_p        1267
+find_name_p_s                  1268
+find_name_p_sc                 1269
+find_sub_not_null_p_s          1270
+find_sub_not_null_p_sc         1271

Modified: branches/avl_string_cache/src/ops/set.ops
==============================================================================
--- branches/avl_string_cache/src/ops/set.ops	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/ops/set.ops	Thu Apr 22 09:55:26 2010	(r45889)
@@ -19,15 +19,15 @@
 
 =item B<clone>(out STR, in STR)
 
-Make a clone of $2, and put it in $1. Doesn't affect what was in
-$1. Removes the constant flag on the copy, if there was one.
+Effectively the same as set $1, $2, except that if $2 is a null STRING, $1 gets
+a new empty string instead.
 
 =cut
 
 inline op clone(out STR, in STR) :base_mem {
     /* cloning a NULL STRING produces an empty STRING; TT #964 */
     $1 = $2
-       ? Parrot_str_copy(interp, $2)
+       ? $2
        : Parrot_str_new(interp, NULL, 0);
 }
 
@@ -154,7 +154,7 @@
 }
 
 inline op set(out STR, inconst STR) :base_core {
-    $1 = Parrot_str_copy(interp, $2);
+    $1 = $2;
 }
 
 inline op set(out STR, in INT) :base_core {
@@ -186,8 +186,7 @@
 }
 
 inline op set(invar PMC, inconst STR) :base_core {
-    VTABLE_set_string_native(interp, $1,
-        Parrot_str_copy(interp, $2));
+    VTABLE_set_string_native(interp, $1, $2);
 }
 inline op set(out INT, invar PMC) :base_core {
     $1 = VTABLE_get_integer(interp, $2);
@@ -247,7 +246,7 @@
 }
 
 inline op assign(out STR, in STR) :base_core {
-    $1 = Parrot_str_set(interp, $1, $2);
+    $1 = $2;
 }
 
 inline op setref(invar PMC, invar PMC) :base_core {
@@ -560,7 +559,7 @@
 =cut
 
 inline op null(out STR) :base_core {
-    $1 = NULL;
+    $1 = STRINGNULL;
 }
 
 inline op null(out INT) :base_core {

Modified: branches/avl_string_cache/src/ops/string.ops
==============================================================================
--- branches/avl_string_cache/src/ops/string.ops	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/ops/string.ops	Thu Apr 22 09:55:26 2010	(r45889)
@@ -70,8 +70,8 @@
 
 =cut
 
-inline op chopn(inout STR, in INT) :base_core {
-    Parrot_str_chopn_inplace(interp, $1, $2);
+inline op chopn(inout STR, in INT) :base_core :deprecated {
+    $1 = Parrot_str_chopn(interp, $1, $2);
 }
 
 inline op chopn(out STR, in STR, in INT) :base_core {
@@ -97,8 +97,8 @@
 
 =cut
 
-inline op concat(inout STR, in STR) :base_mem {
-    $1 = Parrot_str_append(interp, $1, $2);
+inline op concat(inout STR, in STR) :base_mem :deprecated {
+    $1 = Parrot_str_concat(interp, $1, $2);
 }
 
 inline op concat(invar PMC, invar PMC) :base_core {
@@ -110,7 +110,7 @@
 }
 
 inline op concat(out STR, in STR, in STR) :base_mem {
-    $1 = Parrot_str_concat(interp, $2, $3, 1);
+    $1 = Parrot_str_concat(interp, $2, $3);
 }
 
 inline op concat(invar PMC, invar PMC, in STR) :base_core {
@@ -198,8 +198,8 @@
 
 inline op bytelength(out INT, in STR) :base_mem {
     UINTVAL n;
-    STRING * const s = $2;
-    if (!s)
+    const STRING * const s = $2;
+    if (STRING_IS_NULL(s))
         n = 0;
     else {
         n = s->bufused;
@@ -244,6 +244,8 @@
 
 =item B<substr>(inout STR, in INT, in INT, in STR)
 
+=item B<replace>(out STR, in STR, in INT, in INT, in STR)
+
 =item B<substr>(out STR, invar PMC, in INT, in INT)
 
 Set $1 to the portion of $2 starting at (zero-based) character position
@@ -269,25 +271,30 @@
 
 inline op substr(out STR, in STR, in INT) :base_core {
     const INTVAL len = Parrot_str_byte_length(interp, $2);
-    $1 = Parrot_str_substr(interp, $2, $3, len, &$1, 0);
+    $1 = Parrot_str_substr(interp, $2, $3, len);
 }
 
 inline op substr(out STR, in STR, in INT, in INT) :base_core {
-    $1 = Parrot_str_substr(interp, $2, $3, $4, &$1, 0);
+    $1 = Parrot_str_substr(interp, $2, $3, $4);
 }
 
-inline op substr(out STR, inout STR, in INT, in INT, in STR) :base_core {
-    $1 = Parrot_str_replace(interp, $2, $3, $4, $5, &$1);
+inline op substr(out STR, inout STR, in INT, in INT, in STR) :base_core :deprecated {
+    $1 = Parrot_str_substr(interp, $2, $3, $4);
+    $2 = Parrot_str_replace(interp, $2, $3, $4, $5);
 }
 
-inline op substr(inout STR, in INT, in INT, in STR) :base_core {
-    (void)Parrot_str_replace(interp, $1, $2, $3, $4, NULL);
+inline op substr(inout STR, in INT, in INT, in STR) :base_core :deprecated {
+    $1 = Parrot_str_replace(interp, $1, $2, $3, $4);
 }
 
 inline op substr(out STR, invar PMC, in INT, in INT) :base_core {
     $1 = VTABLE_substr_str(interp, $2, $3, $4);
 }
 
+inline op replace(out STR, in STR, in INT, in INT, in STR) :base_core {
+    $1 = Parrot_str_replace(interp, $2, $3, $4, $5);
+}
+
 
 =item B<index>(out INT, in STR, in STR)
 
@@ -429,8 +436,8 @@
     $1 = Parrot_str_upcase(interp, $2);
 }
 
-inline op upcase(inout STR) :base_core {
-    Parrot_str_upcase_inplace(interp, $1);
+inline op upcase(inout STR) :base_core :deprecated {
+    $1 = Parrot_str_upcase(interp, $1);
 }
 
 
@@ -448,8 +455,8 @@
     $1 = Parrot_str_downcase(interp, $2);
 }
 
-inline op downcase(inout STR) :base_core {
-    Parrot_str_downcase_inplace(interp, $1);
+inline op downcase(inout STR) :base_core :deprecated {
+    $1 = Parrot_str_downcase(interp, $1);
 }
 
 
@@ -467,8 +474,8 @@
     $1 = Parrot_str_titlecase(interp, $2);
 }
 
-inline op titlecase(inout STR) :base_core {
-    Parrot_str_titlecase_inplace(interp, $1);
+inline op titlecase(inout STR) :base_core :deprecated {
+    $1 = Parrot_str_titlecase(interp, $1);
 }
 
 
@@ -529,8 +536,7 @@
 }
 
 op charsetname(out STR, in INT) :base_core {
-    STRING * const name = Parrot_charset_name(interp, $2);
-    $1 = name ? Parrot_str_copy(interp, name) : NULL;
+    $1 = Parrot_charset_name(interp, $2);
 }
 
 op find_charset(out INT, in STR) :base_core {
@@ -544,13 +550,12 @@
     $1 = n;
 }
 
-op trans_charset(inout STR, in INT) {
-    $1 = Parrot_str_change_charset(interp, $1, $2, NULL);
+op trans_charset(inout STR, in INT) :deprecated {
+    $1 = Parrot_str_change_charset(interp, $1, $2);
 }
 
 op trans_charset(out STR, in STR, in INT) {
-    STRING *dest = Parrot_gc_new_string_header(interp, 0);
-    $1 = Parrot_str_change_charset(interp, $2, $3, dest);
+    $1 = Parrot_str_change_charset(interp, $2, $3);
 }
 
 
@@ -585,8 +590,7 @@
 }
 
 op encodingname(out STR, in INT) :base_core {
-    STRING * const name = Parrot_encoding_name(interp, $2);
-    $1 = name ? Parrot_str_copy(interp, name) : NULL;
+    $1 = Parrot_encoding_name(interp, $2);
 }
 
 op find_encoding(out INT, in STR) :base_core {
@@ -600,13 +604,12 @@
     $1 = n;
 }
 
-op trans_encoding(inout STR, in INT) {
-    $1 = Parrot_str_change_encoding(interp, $1, $2, NULL);
+op trans_encoding(inout STR, in INT) :deprecated {
+    $1 = Parrot_str_change_encoding(interp, $1, $2);
 }
 
 op trans_encoding(out STR, in STR, in INT) {
-    STRING * const dest = Parrot_gc_new_string_header(interp, 0);
-    $1 = Parrot_str_change_encoding(interp, $2, $3, dest);
+    $1 = Parrot_str_change_encoding(interp, $2, $3);
 }
 
 
@@ -674,7 +677,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

Modified: branches/avl_string_cache/src/ops/var.ops
==============================================================================
--- branches/avl_string_cache/src/ops/var.ops	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/ops/var.ops	Thu Apr 22 09:55:26 2010	(r45889)
@@ -484,7 +484,7 @@
     if (PMC_IS_NULL(sub)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
                        EXCEPTION_GLOBAL_NOT_FOUND,
-                       "Could not find non-existent sub %Ss", $2);
+                       "Could not find sub %Ss", $2);
         goto ADDRESS(handler);
     }
 

Modified: branches/avl_string_cache/src/packdump.c
==============================================================================
--- branches/avl_string_cache/src/packdump.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/packdump.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -299,10 +299,10 @@
                     switch (sub->namespace_name->vtable->base_type) {
                       case enum_class_String:
                         namespace_description = Parrot_str_new(interp, "'", 1);
-                        namespace_description = Parrot_str_append(interp,
+                        namespace_description = Parrot_str_concat(interp,
                                         namespace_description,
                                         VTABLE_get_string(interp, sub->namespace_name));
-                        namespace_description = Parrot_str_append(interp,
+                        namespace_description = Parrot_str_concat(interp,
                                         namespace_description,
                                         Parrot_str_new(interp, "'", 1));
                         break;

Modified: branches/avl_string_cache/src/packfile.c
==============================================================================
--- branches/avl_string_cache/src/packfile.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/packfile.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 This program is free software. It is subject to the same license as
 Parrot itself.
 $Id$
@@ -93,10 +93,10 @@
         __attribute__nonnull__(5)
         FUNC_MODIFIES(*dir);
 
-static void default_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
+static void default_destroy(PARROT_INTERP,
+    ARGFREE_NOTNULL(PackFile_Segment *self))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*self);
+        __attribute__nonnull__(2);
 
 static void default_dump(PARROT_INTERP, ARGIN(const PackFile_Segment *self))
         __attribute__nonnull__(1)
@@ -534,13 +534,9 @@
 
 PARROT_EXPORT
 void
-PackFile_destroy(PARROT_INTERP, ARGMOD_NULLOK(PackFile *pf))
+PackFile_destroy(PARROT_INTERP, ARGMOD(PackFile *pf))
 {
     ASSERT_ARGS(PackFile_destroy)
-    if (!pf) {
-        Parrot_io_eprintf(NULL, "PackFile_destroy: pf == NULL!\n");
-        return;
-    }
 
 #ifdef PARROT_HAS_HEADER_SYSMMAN
     if (pf->is_mmap_ped) {
@@ -1200,7 +1196,7 @@
 PARROT_EXPORT
 void
 PackFile_add_segment(PARROT_INTERP, ARGMOD(PackFile_Directory *dir),
-        ARGIN(PackFile_Segment *seg))
+        ARGMOD(PackFile_Segment *seg))
 {
     ASSERT_ARGS(PackFile_add_segment)
     dir->segments = mem_gc_realloc_n_typed_zeroed(interp, dir->segments,
@@ -1216,7 +1212,7 @@
 /*
 
 =item C<PackFile_Segment * PackFile_find_segment(PARROT_INTERP,
-PackFile_Directory *dir, STRING *name, int sub_dir)>
+PackFile_Directory *dir, const STRING *name, int sub_dir)>
 
 Finds the segment with the name C<name> in the C<PackFile_Directory> if
 C<sub_dir> is true, searches directories recursively.  The returned segment is
@@ -1231,7 +1227,7 @@
 PARROT_CAN_RETURN_NULL
 PackFile_Segment *
 PackFile_find_segment(PARROT_INTERP, ARGIN_NULLOK(PackFile_Directory *dir),
-    ARGIN(STRING *name), int sub_dir)
+    ARGIN(const STRING *name), int sub_dir)
 {
     ASSERT_ARGS(PackFile_find_segment)
     if (dir) {
@@ -2390,7 +2386,8 @@
 
     for (i = 0; i < num_segs; i++) {
         const PackFile_Segment * const seg = dir->segments[i];
-        char *name = Parrot_str_to_cstring(interp, seg->name);
+        char * const name = Parrot_str_to_cstring(interp, seg->name);
+
         *cursor++ = seg->type;
         cursor = PF_store_cstring(cursor, name);
         *cursor++ = seg->file_offset;
@@ -2452,7 +2449,7 @@
     self->size        = 0;
     self->data        = NULL;
     self->id          = 0;
-    self->name        = Parrot_str_copy(interp, name);
+    self->name        = name;
 }
 
 
@@ -2500,7 +2497,7 @@
 */
 
 static void
-default_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
+default_destroy(PARROT_INTERP, ARGFREE_NOTNULL(PackFile_Segment *self))
 {
     ASSERT_ARGS(default_destroy)
     if (!self->pf->is_mmap_ped && self->data) {
@@ -2786,7 +2783,7 @@
 
     /* find seg e.g. CODE_DB => CODE and attach it */
     str_len     = Parrot_str_length(interp, debug->base.name);
-    code_name   = Parrot_str_substr(interp, debug->base.name, 0, str_len - 3, NULL, 1);
+    code_name   = Parrot_str_substr(interp, debug->base.name, 0, str_len - 3);
     code        = (PackFile_ByteCode *)PackFile_find_segment(interp, self->dir, code_name, 0);
 
     if (!code || code->base.type != PF_BYTEC_SEG) {
@@ -4213,7 +4210,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 opcode_t *
-PackFile_Annotations_pack(PARROT_INTERP, ARGIN(PackFile_Segment *seg),
+PackFile_Annotations_pack(SHIM_INTERP, ARGIN(PackFile_Segment *seg),
         ARGMOD(opcode_t *cursor))
 {
     ASSERT_ARGS(PackFile_Annotations_pack)
@@ -4269,7 +4266,7 @@
         ARGIN(const opcode_t *cursor))
 {
     ASSERT_ARGS(PackFile_Annotations_unpack)
-    PackFile_Annotations *self = (PackFile_Annotations *)seg;
+    PackFile_Annotations * const self = (PackFile_Annotations *)seg;
     PackFile_ByteCode    *code;
     STRING               *code_name;
 #if TRACE_PACKFILE
@@ -4327,7 +4324,7 @@
 
     /* Need to associate this segment with the applicable code segment. */
     str_len     = Parrot_str_length(interp, self->base.name);
-    code_name   = Parrot_str_substr(interp, self->base.name, 0, str_len - 4, NULL, 1);
+    code_name   = Parrot_str_substr(interp, self->base.name, 0, str_len - 4);
     code        = (PackFile_ByteCode *)PackFile_find_segment(interp,
                                 self->base.dir, code_name, 0);
 
@@ -4359,7 +4356,7 @@
 PackFile_Annotations_dump(PARROT_INTERP, ARGIN(const PackFile_Segment *seg))
 {
     ASSERT_ARGS(PackFile_Annotations_dump)
-    const PackFile_Annotations *self = (const PackFile_Annotations *)seg;
+    const PackFile_Annotations * const self = (const PackFile_Annotations *)seg;
     INTVAL                      i;
 
     default_dump_header(interp, (const PackFile_Segment *)self);
@@ -4432,6 +4429,7 @@
         opcode_t offset)
 {
     ASSERT_ARGS(PackFile_Annotations_add_group)
+    PackFile_Annotations_Group *group;
 
     /* Allocate extra space for the group in the groups array. */
     if (self->groups)
@@ -4442,11 +4440,10 @@
                 1 + self->num_groups, PackFile_Annotations_Group *);
 
     /* Store details. */
-    self->groups[self->num_groups]                  =
-                            mem_gc_allocate_zeroed_typed(interp,
-                                    PackFile_Annotations_Group);
-    self->groups[self->num_groups]->bytecode_offset = offset;
-    self->groups[self->num_groups]->entries_offset  = self->num_entries;
+    group = self->groups[self->num_groups] =
+                mem_gc_allocate_zeroed_typed(interp, PackFile_Annotations_Group);
+    group->bytecode_offset = offset;
+    group->entries_offset  = self->num_entries;
 
     /* Increment group count. */
     self->num_groups++;
@@ -4476,12 +4473,12 @@
 {
     ASSERT_ARGS(PackFile_Annotations_add_entry)
     /* See if we already have this key. */
-    STRING  *key_name = PF_CONST(self->code, key)->u.string;
+    STRING  * const key_name = PF_CONST(self->code, key)->u.string;
     opcode_t key_id   = -1;
     INTVAL   i;
 
     for (i = 0; i < self->num_keys; i++) {
-        STRING *test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
+        STRING * const test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
         if (Parrot_str_equal(interp, test_key, key_name)) {
             key_id = i;
             break;
@@ -4600,7 +4597,7 @@
     /* If we have a key, look up its ID; if we don't find one. */
     opcode_t key_id = -1;
 
-    if (key) {
+    if (!STRING_IS_NULL(key)) {
         for (i = 0; i < self->num_keys; i++) {
             STRING * const test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
             if (Parrot_str_equal(interp, test_key, key)) {
@@ -4762,10 +4759,10 @@
 
     /* Full path to language library is "abc/abc.pbc". */
     pbc = CONST_STRING(interp, "pbc");
-    wo_ext   = Parrot_str_concat(interp, lang_name, CONST_STRING(interp, "/"), 0);
-    wo_ext   = Parrot_str_append(interp, wo_ext, lang_name);
-    file_str = Parrot_str_concat(interp, wo_ext, CONST_STRING(interp, "."), 0);
-    file_str = Parrot_str_append(interp, file_str, pbc);
+    wo_ext   = Parrot_str_concat(interp, lang_name, CONST_STRING(interp, "/"));
+    wo_ext   = Parrot_str_concat(interp, wo_ext, lang_name);
+    file_str = Parrot_str_concat(interp, wo_ext, CONST_STRING(interp, "."));
+    file_str = Parrot_str_concat(interp, file_str, pbc);
 
     /* Check if the language is already loaded */
     is_loaded_hash = VTABLE_get_pmc_keyed_int(interp,
@@ -4790,13 +4787,13 @@
     parrot_split_path_ext(interp, path, &found_path, &found_ext);
     name_length = Parrot_str_length(interp, lang_name);
     found_path = Parrot_str_substr(interp, found_path, 0,
-            Parrot_str_length(interp, found_path)-name_length, NULL, 0);
+            Parrot_str_length(interp, found_path)-name_length);
 
-    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "include/")),
+    Parrot_lib_add_path(interp, Parrot_str_concat(interp, found_path, CONST_STRING(interp, "include/")),
             PARROT_LIB_PATH_INCLUDE);
-    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "dynext/")),
+    Parrot_lib_add_path(interp, Parrot_str_concat(interp, found_path, CONST_STRING(interp, "dynext/")),
             PARROT_LIB_PATH_DYNEXT);
-    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "library/")),
+    Parrot_lib_add_path(interp, Parrot_str_concat(interp, found_path, CONST_STRING(interp, "library/")),
             PARROT_LIB_PATH_LIBRARY);
 
 

Modified: branches/avl_string_cache/src/packfile/pf_items.c
==============================================================================
--- branches/avl_string_cache/src/packfile/pf_items.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/packfile/pf_items.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1290,9 +1290,7 @@
 
 Opcode format is:
 
-    opcode_t flags
-    opcode_t encoding
-    opcode_t type
+    opcode_t flags8 | encoding
     opcode_t size
     * data
 
@@ -1315,8 +1313,19 @@
     const int wordsize   = pf ? pf->header->wordsize : sizeof (opcode_t);
     const CHARSET *charset;
 
-    /* don't let PBC mess our internals - only constant or not */
-    flags      &= (PObj_constant_FLAG | PObj_private7_FLAG);
+    flag_charset_word = PF_fetch_opcode(pf, cursor);
+
+    if (flag_charset_word == -1) {
+        return STRINGNULL;
+    }
+
+    /* decode flags and charset */
+    flags         = (flag_charset_word & 0x1 ? PObj_constant_FLAG : 0) |
+                    (flag_charset_word & 0x2 ? PObj_private7_FLAG : 0) ;
+    charset_nr    = flag_charset_word >> 8;
+
+
+    size = (size_t)PF_fetch_opcode(pf, cursor);
 
     TRACE_PRINTF(("PF_fetch_string(): flags=0x%04x, ", flags));
     TRACE_PRINTF(("charset_nr=%ld, ", charset_nr));
@@ -1374,7 +1383,12 @@
         padded_size += sizeof (opcode_t) - (padded_size % sizeof (opcode_t));
     }
 
-    *cursor++ = PObj_get_FLAGS(s); /* only constant_FLAG and private7 */
+    if (STRING_IS_NULL(s)) {
+        /* preserve NULL-ness of strings */
+        *cursor++ = -1;
+        return cursor;
+    }
+
     /*
      * TODO as soon as we have dynamically loadable charsets
      *      we have to store the charset name, not the number
@@ -1383,7 +1397,11 @@
      *
      * see also PF_fetch_string
      */
-    *cursor++ = Parrot_charset_number_of_str(NULL, s);
+
+    /* encode charset_nr and flags into the same word for a 33% savings on constant overhead */
+    *cursor++ = (Parrot_charset_number_of_str(NULL, s) << 8)         |
+                (PObj_get_FLAGS(s) & PObj_constant_FLAG ? 0x1 : 0x0) |
+                (PObj_get_FLAGS(s) & PObj_private7_FLAG ? 0x2 : 0x0) ;
     *cursor++ = s->bufused;
 
     /* Switch to char * since rest of string is addressed by
@@ -1421,7 +1439,10 @@
     ASSERT_ARGS(PF_size_string)
     /* TODO: don't break encapsulation on strings */
     const UINTVAL len = s->bufused;
-    return PF_size_strlen(len);
+    if (STRING_IS_NULL(s))
+        return 1;
+    else
+        return PF_size_strlen(len);
 }
 
 /*
@@ -1446,7 +1467,7 @@
     }
 
     /* Include space for flags, representation, and size fields.  */
-    return 3 + (size_t)padded_size / sizeof (opcode_t);
+    return 2 + (size_t)padded_size / sizeof (opcode_t);
 }
 
 /*

Modified: branches/avl_string_cache/src/parrot_debugger.c
==============================================================================
--- branches/avl_string_cache/src/parrot_debugger.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/parrot_debugger.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -147,11 +147,11 @@
 #include "parrot/runcore_api.h"
 
 static void PDB_printwelcome(void);
-static void PDB_run_code(PARROT_INTERP, int argc, char *argv[]);
+static void PDB_run_code(PARROT_INTERP, int argc, const char *argv[]);
 
 /*
 
-=item C<int main(int argc, char *argv[])>
+=item C<int main(int argc, const char *argv[])>
 
 Reads the PIR, PASM or PBC file from argv[1], loads it, and then calls
 Parrot_debug().
@@ -161,7 +161,7 @@
 */
 
 int
-main(int argc, char *argv[])
+main(int argc, const char *argv[])
 {
     int nextarg;
     Parrot_Interp     interp;
@@ -271,7 +271,7 @@
 
 /*
 
-=item C<static void PDB_run_code(PARROT_INTERP, int argc, char *argv[])>
+=item C<static void PDB_run_code(PARROT_INTERP, int argc, const char *argv[])>
 
 Run the code, catching exceptions if they are left unhandled.
 
@@ -280,7 +280,7 @@
 */
 
 static void
-PDB_run_code(PARROT_INTERP, int argc, char *argv[])
+PDB_run_code(PARROT_INTERP, int argc, const char *argv[])
 {
     new_runloop_jump_point(interp);
     if (setjmp(interp->current_runloop->resume)) {

Modified: branches/avl_string_cache/src/pbc_dump.c
==============================================================================
--- branches/avl_string_cache/src/pbc_dump.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pbc_dump.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -78,6 +78,7 @@
     Parrot_io_printf(interp, "],\n");
 }
 
+
 /*
 
 =item C<static void fixup_dump(PARROT_INTERP, const PackFile_Segment *segp)>
@@ -96,6 +97,7 @@
     Parrot_io_printf(interp, "],\n");
 }
 
+
 /*
 
 =item C<static void disas_dump(PARROT_INTERP, const PackFile_Segment *self)>
@@ -109,28 +111,110 @@
 static void
 disas_dump(PARROT_INTERP, const PackFile_Segment *self)
 {
-    opcode_t *pc;
-    size_t i, n;
+    const opcode_t *pc = self->data;
+
     Parrot_io_printf(interp, "%Ss => [ # %d ops at offs 0x%x\n",
             self->name, (int)self->size, (int)self->file_offset + 4);
-    pc = self->data;
+
     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 i;
+
         /* trace_op_dump(interp, self->pf->src, pc); */
-        Parrot_io_printf(interp, " %04x:  ", (int) (pc - self->data));
-        n = (size_t)interp->op_info_table[*pc].op_count;
+        Parrot_io_printf(interp, " %04x:  ", (int)(pc - self->data));
+
         for (i = 0; i < 6; i++)
             if (i < n)
-                Parrot_io_printf(interp, "%08lx ", (unsigned long) pc[i]);
+                Parrot_io_printf(interp, "%08lx ", (unsigned long)pc[i]);
             else
                 Parrot_io_printf(interp, "         ");
+
         Parrot_io_printf(interp, "%s\n",
                 interp->op_info_table[*pc].full_name);
+
         ADD_OP_VAR_PART(interp, interp->code, pc, n);
         pc += n;
     }
+
     Parrot_io_printf(interp, "]\n");
 }
 
+
+/*
+
+=item C<static void nums_dump(PARROT_INTERP, const PackFile_Segment *self)>
+
+Disassembles and dumps op names and line numbers only.
+
+=cut
+
+*/
+
+static void
+nums_dump(PARROT_INTERP, const PackFile_Segment *self)
+{
+    const STRING           *debug_name = Parrot_str_concat(interp, self->name,
+            Parrot_str_new_constant(interp, "_DB"));
+    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;
+
+    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;
+
+        Parrot_io_printf(interp, " %04x:  %s\n",
+            *(debug_ops++), op_info[*pc].full_name);
+
+        ADD_OP_VAR_PART(interp, interp->code, pc, n);
+        pc += n;
+    }
+}
+
+
+/*
+
+=item C<static void null_dump(PARROT_INTERP, const PackFile_Segment *self)>
+
+Produces no output for the given segment type.
+
+=cut
+
+*/
+
+static void
+null_dump(SHIM_INTERP, const PackFile_Segment *self)
+{
+    UNUSED(self);
+}
+
+
+/*
+
+=item C<static void null_dir_dump(PARROT_INTERP, const PackFile_Segment *self)>
+
+Dumps all of the segments of the given PackFile_Directory, but produces no
+output for the directory itself.
+
+=cut
+
+*/
+
+static void
+null_dir_dump(PARROT_INTERP, const PackFile_Segment *self)
+{
+    const PackFile_Directory * const dir = (const PackFile_Directory *)self;
+    size_t i;
+
+    for (i = 0; i < dir->num_segments; i++)
+        self->pf->PackFuncs[dir->segments[i]->type].dump(interp, dir->segments[i]);
+}
+
+
 /*
 
 =item C<static void PackFile_header_dump(PARROT_INTERP, PackFile *pf)>
@@ -152,24 +236,30 @@
     Parrot_io_printf(interp, "\t(interpreter's byteorder       = %d)\n",
             PARROT_BIGENDIAN);
     Parrot_io_printf(interp, "\tfloattype = %d", pf->header->floattype);
-    Parrot_io_printf(interp, "\t(interpreter's NUMVAL_SIZE     = %d)\n", NUMVAL_SIZE);
-    Parrot_io_printf(interp, "\tparrot-version %d.%d.%d, bytecode-version %d.%d\n",
-                     pf->header->major, pf->header->minor, pf->header->patch,
-                     pf->header->bc_major, pf->header->bc_minor);
+    Parrot_io_printf(interp, "\t(interpreter's NUMVAL_SIZE     = %d)\n",
+            NUMVAL_SIZE);
+    Parrot_io_printf(interp, "\tparrot-version %d.%d.%d, "
+            "bytecode-version %d.%d\n",
+            pf->header->major, pf->header->minor, pf->header->patch,
+            pf->header->bc_major, pf->header->bc_minor);
     Parrot_io_printf(interp, "\tUUID: type = %d, size = %d",
-                     pf->header->uuid_type, pf->header->uuid_size);
+            pf->header->uuid_type, pf->header->uuid_size);
+
     if (pf->header->uuid_size)
         Parrot_io_printf(interp, ", '%s'\n", pf->header->uuid_data);
     else
         Parrot_io_printf(interp, "\n");
+
     Parrot_io_printf(interp, "\t%s endianize, %s opcode, %s numval transform\n",
             pf->need_endianize ? "**need**" : "no",
-            pf->need_wordsize ? "**need**" : "no",
-            pf->fetch_nv ? "**need**" : "no");
+            pf->need_wordsize  ? "**need**" : "no",
+            pf->fetch_nv       ? "**need**" : "no");
+
     Parrot_io_printf(interp, "\tdirformat = %d\n", pf->header->dir_format);
     Parrot_io_printf(interp, "]\n");
 }
 
+
 /*
 
 =item C<static void help(void)>
@@ -184,17 +274,21 @@
 {
     printf("pbc_dump - dump or convert parrot bytecode (PBC) files\n");
     printf("usage:\n");
-    printf("pbc_dump [-tdh] [--terse|--disassemble|--header-only] file.pbc\n");
+    printf("pbc_dump [-tdh] [--terse|--disassemble|--header-only|--line-nums]"
+           " file.pbc\n");
     printf("pbc_dump -o converted.pbc file.pbc\n\n");
     printf("\t-d ... disassemble bytecode segments\n");
     printf("\t-h ... dump header only\n");
     printf("\t-t ... terse output\n");
+    printf("\t-n ... show ops and line numbers only\n");
+
 #if TRACE_PACKFILE
     printf("\t-D<1-7> --debug debug output\n");
     printf("\t   1 general info\n");
     printf("\t   2 alignment\n");
     printf("\t   4 values\n");
 #endif
+
     printf("\t-o converted.pbc ... repacks a PBC file into "
            "the platform's native\n");
     printf("\t   binary format for better efficiency on reading "
@@ -202,17 +296,21 @@
     exit(EXIT_SUCCESS);
 }
 
+
 static struct longopt_opt_decl opt_options[] = {
     { 'h', 'h', OPTION_optional_FLAG, { "--header-only" } },
-    { '?', '?', OPTION_optional_FLAG, { "--help" } },
-    { 't', 't', OPTION_optional_FLAG, { "--terse" } },
+    { '?', '?', OPTION_optional_FLAG, { "--help"        } },
+    { 't', 't', OPTION_optional_FLAG, { "--terse"       } },
+    { 'n', 'n', OPTION_optional_FLAG, { "--line-nums"   } },
     { 'd', 'd', OPTION_optional_FLAG, { "--disassemble" } },
+    { 'o', 'o', OPTION_required_FLAG, { "--output"      } }
+
 #if TRACE_PACKFILE
-    { 'D', 'D', OPTION_required_FLAG, { "--debug" } },
+    { 'D', 'D', OPTION_required_FLAG, { "--debug"       } },
 #endif
-    { 'o', 'o', OPTION_required_FLAG, { "--output" } }
 };
 
+
 /*
 
 =item C<int main(int argc, const char **argv)>
@@ -226,25 +324,35 @@
 int
 main(int argc, const char **argv)
 {
-    PackFile *pf;
-    Interp *interp;
-    int terse = 0;
-    int disas = 0;
-    int convert = 0;
-    int options = PFOPT_UTILS;
-    const char *file = NULL;
+    PackFile   *pf;
+    Interp     *interp;
+
+    const char *file            = NULL;
+    int         terse           = 0;
+    int         disas           = 0;
+    int         convert         = 0;
+    int         nums_only       = 0;
+    int         options         = PFOPT_UTILS;
+
     struct longopt_opt_info opt = LONGOPT_OPT_INFO_INIT;
-    int status;
 
-    if (argc < 2) {
+    int         status;
+
+    if (argc < 2)
         help();
-    }
+
     interp = Parrot_new(NULL);
+
     /* init and set top of stack */
     Parrot_init_stacktop(interp, &status);
-    while ((status = longopt_get(interp,
-                    argc, argv, opt_options, &opt)) > 0) {
+
+    while ((status = longopt_get(interp, argc, argv, opt_options, &opt)) > 0) {
         switch (opt.opt_id) {
+#if TRACE_PACKFILE
+          case 'D':
+            options += atoi(opt.opt_arg) << 2;
+            break;
+#endif
           case 'h':
             options += PFOPT_HEADERONLY;
             break;
@@ -254,48 +362,49 @@
           case 'd':
             disas = 1;
             break;
-#if TRACE_PACKFILE
-          case 'D':
-            options += atoi(opt.opt_arg) << 2;
-            break;
-#endif
           case 'o':
-            file = opt.opt_arg;
+            file    = opt.opt_arg;
             convert = 1;
             break;
+          case 'n':
+            nums_only = 1;
+            break;
           case '?':
           default:
             help();
             break;
         }
     }
-    if (status == -1) {
+
+    if (status == -1)
         help();
-    }
+
     argc -= opt.opt_index;
     argv += opt.opt_index;
 
-
     pf = Parrot_pbc_read(interp, *argv, options);
 
     if (!pf) {
         printf("Can't read PBC\n");
         return 1;
     }
+
     Parrot_pbc_load(interp, pf);
+
     if (convert) {
-        size_t size;
-        opcode_t *pack;
+        size_t   size  = PackFile_pack_size(interp,
+                            interp->code->base.pf) * sizeof (opcode_t);
+        opcode_t *pack = (opcode_t *)Parrot_gc_allocate_memory_chunk(interp,
+                                        size);
         FILE *fp;
 
-        size = PackFile_pack_size(interp,
-                interp->code->base.pf) * sizeof (opcode_t);
-        pack = (opcode_t*) Parrot_gc_allocate_memory_chunk(interp, size);
         if (!pack) {
             printf("out of mem\n");
             exit(EXIT_FAILURE);
         }
+
         PackFile_pack(interp, interp->code->base.pf, pack);
+
         if (STREQ(file, "-"))
             fp = stdout;
         else if ((fp = fopen(file, "wb")) == 0) {
@@ -307,28 +416,44 @@
             printf("Couldn't write %s\n", file);
             exit(EXIT_FAILURE);
         }
+
         fclose(fp);
         Parrot_gc_free_memory_chunk(interp, pack);
         Parrot_exit(interp, 0);
     }
 
-    PackFile_header_dump(interp, pf);
-    if (options & PFOPT_HEADERONLY) {
+    if (!nums_only)
+        PackFile_header_dump(interp, pf);
+
+    if (options & PFOPT_HEADERONLY)
         Parrot_exit(interp, 0);
-    }
+
     /* install a dumper function */
     if (!terse) {
         pf->PackFuncs[PF_CONST_SEG].dump = const_dump;
         pf->PackFuncs[PF_FIXUP_SEG].dump = fixup_dump;
     }
+
     if (disas)
         pf->PackFuncs[PF_BYTEC_SEG].dump = disas_dump;
+
+    if (nums_only) {
+        int i;
+
+        for (i = PF_DIR_SEG + 1; i < PF_MAX_SEG; i++)
+            pf->PackFuncs[i].dump = null_dump;
+
+        pf->PackFuncs[PF_DIR_SEG].dump   = null_dir_dump;
+        pf->PackFuncs[PF_BYTEC_SEG].dump = nums_dump;
+    }
+
     /* do a directory dump, which dumps segs then */
     PackFile_Segment_dump(interp, &pf->directory.base);
 
     Parrot_exit(interp, 0);
 }
 
+
 /*
 
 =back

Modified: branches/avl_string_cache/src/pmc.c
==============================================================================
--- branches/avl_string_cache/src/pmc.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -48,8 +48,7 @@
 PARROT_CANNOT_RETURN_NULL
 static PMC* Parrot_pmc_reuse_noinit(PARROT_INTERP,
     ARGIN(PMC *pmc),
-    INTVAL new_type,
-    SHIM(UINTVAL flags))
+    INTVAL new_type)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -82,10 +81,12 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_HOT
 INTVAL
 Parrot_pmc_is_null(SHIM_INTERP, ARGIN_NULLOK(const PMC *pmc))
 {
     ASSERT_ARGS(Parrot_pmc_is_null)
+    /* We can't use PMC_IS_NULL() because that calls us here in some cases */
 #if PARROT_CATCH_NULL
     return pmc == PMCNULL || pmc == NULL;
 #else
@@ -190,10 +191,10 @@
 PARROT_IGNORABLE_RESULT
 PMC *
 Parrot_pmc_reuse(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type,
-    UINTVAL flags)
+    SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(Parrot_pmc_reuse)
-    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type, flags);
+    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type);
 
     /* Call the base init for the redone pmc. Warning, this should not
        be called on Object PMCs. */
@@ -224,10 +225,10 @@
 PARROT_IGNORABLE_RESULT
 PMC *
 Parrot_pmc_reuse_init(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type, ARGIN(PMC *init),
-          UINTVAL flags)
+          SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(Parrot_pmc_reuse_init)
-    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type, flags);
+    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type);
 
     /* Call the base init for the redone pmc. Warning, this should not
        be called on Object PMCs. */
@@ -239,43 +240,39 @@
 /*
 
 =item C<static PMC* Parrot_pmc_reuse_noinit(PARROT_INTERP, PMC *pmc, INTVAL
-new_type, UINTVAL flags)>
+new_type)>
 
 Prepare pmc for reuse. Do all scuffolding except initing.
 
 =cut
 
 */
+
 PARROT_CANNOT_RETURN_NULL
 static PMC*
-Parrot_pmc_reuse_noinit(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type,
-    SHIM(UINTVAL flags)) {
-
+Parrot_pmc_reuse_noinit(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type)
+{
     ASSERT_ARGS(Parrot_pmc_reuse_noinit)
-    VTABLE *new_vtable;
-    INTVAL  new_flags = 0;
 
-    if (pmc->vtable->base_type == new_type)
-        return pmc;
-
-    new_vtable = interp->vtables[new_type];
-
-    /* Singleton/const PMCs/types are not eligible */
-    check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
+    if (pmc->vtable->base_type != new_type) {
+        VTABLE * const new_vtable = interp->vtables[new_type];
 
-    /* Free the old PMC resources. */
-    Parrot_pmc_destroy(interp, pmc);
+        /* Singleton/const PMCs/types are not eligible */
+        check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
 
-    PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG | new_flags);
+        /* Free the old PMC resources. */
+        Parrot_pmc_destroy(interp, pmc);
 
-    /* Set the right vtable */
-    pmc->vtable = new_vtable;
+        PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG);
 
-    if (new_vtable->attr_size)
-        Parrot_gc_allocate_pmc_attributes(interp, pmc);
+        /* Set the right vtable */
+        pmc->vtable = new_vtable;
 
-    else
-        PMC_data(pmc) = NULL;
+        if (new_vtable->attr_size)
+            Parrot_gc_allocate_pmc_attributes(interp, pmc);
+        else
+            PMC_data(pmc) = NULL;
+    }
 
     return pmc;
 }
@@ -303,26 +300,25 @@
 {
     ASSERT_ARGS(Parrot_pmc_reuse_by_class)
     const INTVAL   new_type   = PARROT_CLASS(class_)->id;
-    VTABLE * const new_vtable = interp->vtables[new_type];
-    const INTVAL   new_flags  = flags;
 
-    if (pmc->vtable->base_type == new_type)
-        return pmc;
+    if (pmc->vtable->base_type != new_type) {
+        VTABLE * const new_vtable = interp->vtables[new_type];
 
-    /* Singleton/const PMCs/types are not eligible */
-    check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
+        /* Singleton/const PMCs/types are not eligible */
+        check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
 
-    Parrot_pmc_destroy(interp, pmc);
+        Parrot_pmc_destroy(interp, pmc);
 
-    PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG | new_flags);
+        PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG | flags);
 
-    /* Set the right vtable */
-    pmc->vtable = new_vtable;
+        /* Set the right vtable */
+        pmc->vtable = new_vtable;
 
-    if (new_vtable->attr_size)
-        Parrot_gc_allocate_pmc_attributes(interp, pmc);
-    else
-        PMC_data(pmc) = NULL;
+        if (new_vtable->attr_size)
+            Parrot_gc_allocate_pmc_attributes(interp, pmc);
+        else
+            PMC_data(pmc) = NULL;
+    }
 
     return pmc;
 }
@@ -393,7 +389,7 @@
 get_new_pmc_header(PARROT_INTERP, INTVAL base_type, UINTVAL flags)
 {
     ASSERT_ARGS(get_new_pmc_header)
-    PMC    *pmc;
+    PMC    *newpmc;
     VTABLE *vtable = interp->vtables[base_type];
     UINTVAL vtable_flags;
 
@@ -455,13 +451,13 @@
     if (vtable_flags & VTABLE_IS_SHARED_FLAG)
         flags |= PObj_is_PMC_shared_FLAG;
 
-    pmc            = Parrot_gc_new_pmc_header(interp, flags);
-    pmc->vtable    = vtable;
+    newpmc         = Parrot_gc_new_pmc_header(interp, flags);
+    newpmc->vtable = vtable;
 
     if (vtable->attr_size)
-        Parrot_gc_allocate_pmc_attributes(interp, pmc);
+        Parrot_gc_allocate_pmc_attributes(interp, newpmc);
 
-    return pmc;
+    return newpmc;
 }
 
 
@@ -623,6 +619,30 @@
 
 /*
 
+=item C<PMC * Parrot_pmc_new_constant_init_int(PARROT_INTERP, INTVAL base_type,
+INTVAL init)>
+
+As C<Parrot_pmc_new_constant>, but passes C<init> to the PMC's C<init_int> vtable
+entry.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PMC *
+Parrot_pmc_new_constant_init_int(PARROT_INTERP, INTVAL base_type, INTVAL init)
+{
+    ASSERT_ARGS(Parrot_pmc_new_constant_init_int)
+    PMC * const pmc = get_new_pmc_header(interp, base_type, PObj_constant_FLAG);
+    VTABLE_init_int(interp, pmc, init);
+    return pmc;
+}
+
+
+/*
+
 =item C<PMC * Parrot_pmc_new_temporary(PARROT_INTERP, INTVAL base_type)>
 
 Creates a new temporary PMC of type C<base_type>, then call C<init>. Cannot
@@ -986,24 +1006,21 @@
         INTVAL len;
         const INTVAL idx = Parrot_str_find_index(interp, what, role, (INTVAL)pos);
 
-        if (idx < 0)
+        if ((idx < 0) || (idx >= length))
             return 0;
 
         pos = idx;
-
-        if (pos >= length)
-            return 0;
-
         len = Parrot_str_byte_length(interp, role);
 
-        if (pos && Parrot_str_indexed(interp, what, pos - 1) != 32) {
+        if (pos && (Parrot_str_indexed(interp, what, pos - 1) != 32)) {
             pos += len;
             continue;
         }
 
-        if (pos + len < length && Parrot_str_indexed(interp, what, pos + len) != 32) {
+        if (pos + len < length) {
             pos += len;
-            continue;
+            if (Parrot_str_indexed(interp, what, pos) != 32)
+                continue;
         }
 
         return 1;

Modified: branches/avl_string_cache/src/pmc/bigint.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/bigint.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/bigint.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -387,6 +387,8 @@
 static void
 bigint_init(PARROT_INTERP, ARGIN(PMC *self))
 {
+    ASSERT_ARGS(bigint_init)
+
     BIGINT * const bi = mem_gc_allocate_zeroed_typed(interp, BIGINT);
     SETATTR_BigInt_bi(interp, self, bi);
     mpz_init(bi->b);
@@ -486,6 +488,8 @@
 static int
 bigint_get_bool(PARROT_INTERP, ARGIN(PMC *self))
 {
+    ASSERT_ARGS(bigint_get_bool)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     if (mpz_sgn(bi->b) != 0)
@@ -619,6 +623,8 @@
 static void
 bigint_check_divide_zero(PARROT_INTERP, ARGIN(PMC *value))
 {
+    ASSERT_ARGS(bigint_check_divide_zero)
+
     /* Throw an exception if we are dividing by zero. */
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, value, bi);
@@ -1137,7 +1143,7 @@
 
     VTABLE STRING *get_repr() {
         STRING * const s = SELF.get_string();
-        return Parrot_str_append(INTERP, s, CONST_STRING(INTERP, "L"));
+        return Parrot_str_concat(INTERP, s, CONST_STRING(INTERP, "L"));
     }
 /*
 

Modified: branches/avl_string_cache/src/pmc/bignum.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/bignum.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/bignum.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -723,7 +723,6 @@
     ASSERT_ARGS(bignum_get_string_size)
 
     BIGNUM *bn;
-    size_t  n;
     char   *s;
     mp_exp_t exponent;
 
@@ -1509,7 +1508,7 @@
 
     VTABLE STRING *get_repr() {
         STRING *s = SELF.get_string();
-        return Parrot_str_append(INTERP, s, Parrot_str_new(interp, "N", 1));
+        return Parrot_str_concat(INTERP, s, Parrot_str_new(interp, "N", 1));
     }
 /*
 
@@ -1760,7 +1759,6 @@
 */
 
     MULTI PMC *divide(BigNum value, PMC *dest) {
-        BIGNUM *bn;
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_div_bignum(INTERP, SELF, value, dest);

Modified: branches/avl_string_cache/src/pmc/callcontext.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/callcontext.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/callcontext.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -56,11 +56,11 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static FLOATVAL autobox_floatval(PARROT_INTERP, ARGIN(Pcc_cell *cell))
+static FLOATVAL autobox_floatval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static INTVAL autobox_intval(PARROT_INTERP, ARGIN(Pcc_cell *cell))
+static INTVAL autobox_intval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -70,7 +70,7 @@
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING * autobox_string(PARROT_INTERP, ARGIN(Pcc_cell *cell))
+static STRING * autobox_string(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -194,7 +194,7 @@
 }
 
 static INTVAL
-autobox_intval(PARROT_INTERP, ARGIN(Pcc_cell *cell))
+autobox_intval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
 {
     ASSERT_ARGS(autobox_intval)
     switch (CELL_TYPE_MASK(cell)) {
@@ -217,7 +217,7 @@
 }
 
 static FLOATVAL
-autobox_floatval(PARROT_INTERP, ARGIN(Pcc_cell *cell))
+autobox_floatval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
 {
     ASSERT_ARGS(autobox_floatval)
     switch (CELL_TYPE_MASK(cell)) {
@@ -241,7 +241,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-autobox_string(PARROT_INTERP, ARGIN(Pcc_cell *cell))
+autobox_string(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
 {
     ASSERT_ARGS(autobox_string)
     switch (CELL_TYPE_MASK(cell)) {
@@ -284,7 +284,7 @@
         VTABLE_set_string_native(interp, result, CELL_STRING(cell));
         break;
       case PMCCELL:
-        return CELL_PMC(cell);
+        result = CELL_PMC(cell);
       default:
         /* exception */
         break;
@@ -355,7 +355,6 @@
 mark_hash(PARROT_INTERP, ARGIN(Hash *h))
 {
     ASSERT_ARGS(mark_hash)
-    UINTVAL entries = h->entries;
     INTVAL  i;
 
     for (i = h->mask; i >= 0; --i) {
@@ -382,8 +381,7 @@
     /* yes, this *looks* risky, but it's a Parrot STRING hash internally */
     if (hash && hash->entries) {
         UINTVAL i, j = 0;
-        result = Parrot_pmc_new(interp, enum_class_FixedStringArray);
-        VTABLE_set_integer_native(interp, result, hash->entries);
+        result = Parrot_pmc_new_init_int(interp, enum_class_FixedStringArray, hash->entries);
 
         for (i = 0; i <= hash->mask; i++) {
             HashBucket *b = hash->bi[i];
@@ -543,18 +541,17 @@
 
         GET_ATTR_bp_ps(INTERP, SELF, bp_ps);
         for (i = 0; i < n_regs_used[REGNO_PMC]; ++i) {
-            PMC *p = bp_ps.regs_p[-1L-(i)];
+            PMC * const p = bp_ps.regs_p[-1L-(i)];
             /* Original code from CTX_REG_PMC */
             if (p)
                 Parrot_gc_mark_PMC_alive(interp, p);
         }
 
         for (i = 0; i < n_regs_used[REGNO_STR]; ++i) {
-            STRING *s = bp_ps.regs_s[i];
+            STRING * const s = bp_ps.regs_s[i];
             if (s)
                 Parrot_gc_mark_STRING_alive(interp, s);
         }
-
     }
 
 /*
@@ -682,16 +679,16 @@
         for (i = 0; i < num_positionals; ++i) {
             switch (c[i].type) {
               case INTCELL:
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "I"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "I"));
                 break;
               case FLOATCELL:
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "N"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "N"));
                 break;
               case STRINGCELL:
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "S"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "S"));
                 break;
               case PMCCELL:
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "P"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "P"));
                 break;
               default:
                 PARROT_FAILURE("Impossible flag");
@@ -1098,7 +1095,7 @@
     }
 
     VTABLE void set_integer_keyed_int(INTVAL key, INTVAL value) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+        Pcc_cell * const cell = get_cell_at(INTERP, SELF, key);
         INTVAL    pos;
 
         cell->u.i   = value;
@@ -1110,7 +1107,7 @@
     }
 
     VTABLE void set_number_keyed_int(INTVAL key, FLOATVAL value) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+        Pcc_cell * const cell = get_cell_at(INTERP, SELF, key);
         INTVAL    pos;
 
         cell->u.n   = value;
@@ -1122,7 +1119,7 @@
     }
 
     VTABLE void set_string_keyed_int(INTVAL key, STRING *value) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+        Pcc_cell * const cell = get_cell_at(INTERP, SELF, key);
         INTVAL    pos;
 
         cell->u.s   = value;
@@ -1135,7 +1132,7 @@
 
     VTABLE void set_pmc_keyed_int(INTVAL key, PMC *value) {
         INTVAL    pos;
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+        Pcc_cell * const cell = get_cell_at(INTERP, SELF, key);
 
         cell->u.p   = value;
         cell->type  = PMCCELL;
@@ -1146,7 +1143,7 @@
     }
 
     VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
-        Hash     *hash = get_hash(INTERP, SELF);
+        Hash     * const hash = get_hash(INTERP, SELF);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, (void *)key);
 
         if (!cell) {
@@ -1159,7 +1156,7 @@
     }
 
     VTABLE void set_number_keyed_str(STRING *key, FLOATVAL value) {
-        Hash     *hash = get_hash(INTERP, SELF);
+        Hash     * const hash = get_hash(INTERP, SELF);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, (void *)key);
 
         if (!cell) {
@@ -1172,7 +1169,7 @@
     }
 
     VTABLE void set_string_keyed_str(STRING *key, STRING *value) {
-        Hash     *hash = get_hash(INTERP, SELF);
+        Hash     * const hash = get_hash(INTERP, SELF);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, (void *)key);
 
         if (!cell) {
@@ -1185,7 +1182,7 @@
     }
 
     VTABLE void set_pmc_keyed_str(STRING *key, PMC *value) {
-        Hash     *hash = get_hash(INTERP, SELF);
+        Hash     * const hash = get_hash(INTERP, SELF);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, (void *)key);
 
         if (!cell) {
@@ -1198,8 +1195,8 @@
     }
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
-        Hash     *hash = get_hash(INTERP, SELF);
-        void     *k    = hash_key_from_pmc(INTERP, hash, key);
+        Hash     * const hash = get_hash(INTERP, SELF);
+        void     * const k    = hash_key_from_pmc(INTERP, hash, key);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
         if (!cell) {
@@ -1212,8 +1209,8 @@
     }
 
     VTABLE void set_number_keyed(PMC *key, FLOATVAL value) {
-        Hash     *hash = get_hash(INTERP, SELF);
-        void     *k    = hash_key_from_pmc(INTERP, hash, key);
+        Hash     * const hash = get_hash(INTERP, SELF);
+        void     * const k    = hash_key_from_pmc(INTERP, hash, key);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
         if (!cell) {
@@ -1226,8 +1223,8 @@
     }
 
     VTABLE void set_string_keyed(PMC *key, STRING *value) {
-        Hash     *hash = get_hash(INTERP, SELF);
-        void     *k    = hash_key_from_pmc(INTERP, hash, key);
+        Hash     * const hash = get_hash(INTERP, SELF);
+        void     * const k    = hash_key_from_pmc(INTERP, hash, key);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
         if (!cell) {
@@ -1240,8 +1237,8 @@
     }
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
-        Hash     *hash = get_hash(INTERP, SELF);
-        void     *k    = hash_key_from_pmc(INTERP, hash, key);
+        Hash     * const hash = get_hash(INTERP, SELF);
+        void     * const k    = hash_key_from_pmc(INTERP, hash, key);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
         if (!cell) {
@@ -1254,11 +1251,11 @@
     }
 
     VTABLE INTVAL get_integer_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            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_intval(INTERP, cell);
@@ -1268,11 +1265,11 @@
     }
 
     VTABLE FLOATVAL get_number_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            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_floatval(INTERP, cell);
@@ -1283,11 +1280,11 @@
 
 
     VTABLE STRING * get_string_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            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_string(INTERP, cell);
@@ -1297,11 +1294,11 @@
     }
 
     VTABLE PMC * get_pmc_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            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);
@@ -1311,11 +1308,11 @@
     }
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            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_intval(INTERP, cell);
@@ -1325,11 +1322,11 @@
     }
 
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            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_floatval(INTERP, cell);
@@ -1339,11 +1336,11 @@
     }
 
     VTABLE STRING * get_string_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            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_string(INTERP, cell);
@@ -1353,11 +1350,11 @@
     }
 
     VTABLE PMC * get_pmc_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            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);
@@ -1367,10 +1364,10 @@
     }
 
     VTABLE INTVAL exists_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void *k = hash_key_from_pmc(INTERP, hash, key);
+            void * const k = hash_key_from_pmc(INTERP, hash, key);
             return parrot_hash_exists(INTERP, hash, k);
         }
 
@@ -1378,10 +1375,10 @@
     }
 
     VTABLE INTVAL exists_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void *k = hash_key_from_string(INTERP, hash, key);
+            void * const k = hash_key_from_string(INTERP, hash, key);
             return parrot_hash_exists(INTERP, hash, k);
         }
 
@@ -1432,7 +1429,7 @@
             SET_ATTR_type_tuple(INTERP, dest, VTABLE_clone(INTERP, type_tuple));
 
         if (short_sig)
-            SET_ATTR_short_sig(INTERP, dest, Parrot_str_copy(INTERP, short_sig));
+            SET_ATTR_short_sig(INTERP, dest, short_sig);
 
         if (!PMC_IS_NULL(arg_flags))
             SET_ATTR_arg_flags(INTERP, dest, VTABLE_clone(INTERP, arg_flags));
@@ -1464,11 +1461,11 @@
     METHOD backtrace(PMC *resume :optional, INTVAL has_resume :opt_flag) {
         PMC *result  = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
         PMC *cur_ctx = SELF;
-        Parrot_Continuation_attributes *cont = has_resume ? PMC_cont(resume) : NULL;
+        Parrot_Continuation_attributes * const cont = has_resume ? PMC_cont(resume) : NULL;
 
         /* Get starting context, then loop over them. */
         while (cur_ctx) {
-            PMC        *frame       = Parrot_pmc_new(interp, enum_class_Hash);
+            PMC        * const frame       = Parrot_pmc_new(interp, enum_class_Hash);
             PMC        *annotations = NULL;
             Parrot_Sub_attributes *sub;
 

Modified: branches/avl_string_cache/src/pmc/class.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/class.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/class.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -203,7 +203,7 @@
         STRING * const attrib_name = VTABLE_get_string_keyed_str(
             interp, cur_attrib, name_str);
 
-        STRING * const full_key    = Parrot_str_append(interp, fq_class, attrib_name);
+        STRING * const full_key    = Parrot_str_concat(interp, fq_class, attrib_name);
 
         /* Insert into hash, along with index. */
         VTABLE_set_integer_keyed_str(interp, attrib_index, full_key, cur_index);
@@ -668,7 +668,7 @@
 */
 
     VTABLE STRING *get_string() {
-        return Parrot_str_copy(interp, make_class_name(interp, SELF));
+        return make_class_name(interp, SELF);
     }
 
 /*

Modified: branches/avl_string_cache/src/pmc/codestring.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/codestring.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/codestring.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -112,15 +112,13 @@
     INTVAL pos          = 0;
     INTVAL replen       = 0;
 
-    fmt = Parrot_str_new_COW(INTERP, fmt);
-
     while (pos >= 0) {
         pos += replen;
         pos = Parrot_str_find_index(INTERP, fmt, percent, pos);
         if (pos < 0)
             break;
 
-        key = Parrot_str_substr(INTERP, fmt, pos+1, 1, &key, 0);
+        key = Parrot_str_substr(INTERP, fmt, pos+1, 1);
 
         if (VTABLE_exists_keyed_str(INTERP, hash, key)) {
             repl = VTABLE_get_string_keyed_str(INTERP, hash, key);
@@ -134,14 +132,13 @@
             INTVAL I1;
 
             repl = VTABLE_get_string_keyed_int(INTERP, args, 0);
-            repl = Parrot_str_new_COW(INTERP, repl);
             I1   = VTABLE_elements(INTERP, args);
             I0   = 1;
 
             while (I0 < I1) {
                 STRING * const S0 = VTABLE_get_string_keyed_int(INTERP, args, I0);
-                repl = Parrot_str_append(INTERP, repl, comma_space);
-                repl = Parrot_str_append(INTERP, repl, S0);
+                repl = Parrot_str_concat(INTERP, repl, comma_space);
+                repl = Parrot_str_concat(INTERP, repl, S0);
                 I0++;
             }
         }
@@ -154,16 +151,16 @@
             continue;
         }
 
-        (void) Parrot_str_replace(INTERP, fmt, pos, 2, repl, NULL);
+        fmt    = Parrot_str_replace(INTERP, fmt, pos, 2, repl);
         replen = Parrot_str_byte_length(INTERP, repl);
     }
 
     /* Add a newline if necessary */
     if ('\n' != Parrot_str_indexed(INTERP, fmt, Parrot_str_byte_length(INTERP, fmt) - 1))
-        fmt = Parrot_str_concat(INTERP, fmt, newline, 0);
+        fmt = Parrot_str_concat(INTERP, fmt, newline);
 
     GET_ATTR_str_val(INTERP, SELF, S1);
-    S1 = Parrot_str_concat(INTERP, S1, fmt, 0);
+    S1 = Parrot_str_concat(INTERP, S1, fmt);
     VTABLE_set_string_native(INTERP, SELF, S1);
 
     RETURN(PMC *SELF);
@@ -258,8 +255,7 @@
         RETURN(STRING *counter_as_string);
     }
     else {
-        STRING *result = Parrot_str_copy(INTERP, format);
-        result         = Parrot_str_concat(INTERP, result, counter_as_string, 1);
+        STRING *result = Parrot_str_concat(INTERP, format, counter_as_string);
         RETURN(STRING *result);
     }
   }
@@ -284,8 +280,8 @@
     INTVAL is_unicode = 0;
     UNUSED(SELF);
 
-    escaped_str = Parrot_str_concat(INTERP, quote, escaped_str, 1);
-    escaped_str = Parrot_str_concat(INTERP, escaped_str, quote, 1);
+    escaped_str = Parrot_str_concat(INTERP, quote, escaped_str);
+    escaped_str = Parrot_str_concat(INTERP, escaped_str, quote);
     x_pos       = Parrot_str_find_index(INTERP, escaped_str, x, 0);
 
     if (x_pos != -1) {
@@ -300,7 +296,7 @@
 
     if (is_unicode) {
         STRING * const unicode = CONST_STRING(INTERP, "unicode:");
-        escaped_str            = Parrot_str_concat(INTERP, unicode, escaped_str, 1);
+        escaped_str            = Parrot_str_concat(INTERP, unicode, escaped_str);
     }
 
     RETURN(STRING *escaped_str);
@@ -367,8 +363,8 @@
                     STRING *S0   = VTABLE_get_string_keyed_int(INTERP, P0, index2);
                     (STRING *S0) = PCCINVOKE(INTERP, SELF, "escape", STRING *S0);
                     if (prefix)
-                        out = Parrot_str_append(INTERP, out, prefix);
-                    out    = Parrot_str_append(INTERP, out, S0);
+                        out = Parrot_str_concat(INTERP, out, prefix);
+                    out    = Parrot_str_concat(INTERP, out, S0);
                     prefix = semi;
                 }
             }
@@ -376,14 +372,14 @@
                 STRING *S0   = VTABLE_get_string_keyed_int(INTERP, args, index);
                 (STRING *S0) = PCCINVOKE(INTERP, SELF, "escape", STRING *S0);
                 if (prefix)
-                    out = Parrot_str_append(INTERP, out, prefix);
-                out    = Parrot_str_append(INTERP, out, S0);
+                    out = Parrot_str_concat(INTERP, out, prefix);
+                out    = Parrot_str_concat(INTERP, out, S0);
                 prefix = semi;
             }
         }
     }
 
-    out = Parrot_str_append(INTERP, out, close_bracket);
+    out = Parrot_str_concat(INTERP, out, close_bracket);
 
     RETURN(STRING *out);
 }

Modified: branches/avl_string_cache/src/pmc/complex.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/complex.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/complex.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -80,8 +80,11 @@
 */
 
 static void
-complex_parse_string(PARROT_INTERP, ARGOUT(FLOATVAL *re), ARGOUT(FLOATVAL *im), ARGIN(STRING *value))
+complex_parse_string(PARROT_INTERP,
+                     ARGOUT(FLOATVAL *re), ARGOUT(FLOATVAL *im), ARGIN(STRING *value))
 {
+    ASSERT_ARGS(complex_parse_string)
+
     char   * const str        = Parrot_str_to_cstring(interp, value);
     char   *t                 = str;
     char   *first_num_offset  = str;
@@ -238,6 +241,8 @@
 static void
 int_check_divide_zero(PARROT_INTERP, INTVAL value)
 {
+    ASSERT_ARGS(int_check_divide_zero)
+
     if (value == 0)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_DIV_BY_ZERO,
             "Divide by zero");

Modified: branches/avl_string_cache/src/pmc/continuation.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/continuation.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/continuation.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -78,15 +78,6 @@
         SET_ATTR_address(INTERP, SELF, NULL);
 
         PObj_custom_mark_SET(SELF);
-
-        /* PANIC("don't do that"); */
-        /*
-         * Whenever we create a continuation, all return continuations
-         * up the call chain may be reused due to invoking the
-         * continuation. To avoid that all return continuations are
-         * converted to true continuations.
-         */
-        invalidate_retc_context(INTERP, SELF);
     }
 
     /*if they pass in a PMC to initialize with*/
@@ -109,15 +100,6 @@
         SET_ATTR_address(INTERP, SELF, address);
 
         PObj_custom_mark_SET(SELF);
-
-        /* PANIC("don't do that"); */
-        /*
-         * Whenever we create a continuation, all return continuations
-         * up the call chain may be reused due to invoking the
-         * continuation. To avoid that all return continuations are
-         * converted to true continuations.
-         */
-        invalidate_retc_context(INTERP, SELF);
     }
 
 

Modified: branches/avl_string_cache/src/pmc/coroutine.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/coroutine.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/coroutine.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -120,9 +120,6 @@
                 (Parrot_Coroutine_attributes *)PMC_data(SELF),
                 sizeof (Parrot_Coroutine_attributes));
 
-        GET_ATTR_name(INTERP, ret, name);
-        SET_ATTR_name(INTERP, ret, Parrot_str_copy(INTERP, name));
-
         return ret;
     }
 
@@ -172,8 +169,10 @@
             PMC               *ctx        = Parrot_pcc_get_signature(INTERP, caller_ctx);
             PMC               *ccont      = INTERP->current_cont;
 
-            if (ccont == NEED_CONTINUATION)
-                ccont = (PMC *)new_ret_continuation_pmc(INTERP, next_op);
+            if (ccont == NEED_CONTINUATION) {
+                ccont = pmc_new(interp, enum_class_Continuation);
+                VTABLE_set_pointer(interp, ccont, next_op);
+            }
 
             if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL)
                 Parrot_ex_throw_from_c_args(INTERP, NULL, CONTROL_ERROR,

Modified: branches/avl_string_cache/src/pmc/default.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/default.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/default.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -239,6 +239,8 @@
 static void
 propagate_std_props(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *prop_hash))
 {
+    ASSERT_ARGS(propagate_std_props)
+
     if (self->vtable->flags & (VTABLE_IS_CONST_FLAG | VTABLE_IS_READONLY_FLAG)){
         PMC * const pmc_true  = Parrot_pmc_new(interp, enum_class_Integer);
         VTABLE_set_integer_native(interp, pmc_true, 1);
@@ -284,6 +286,8 @@
 static PMC*
 check_get_std_props(PARROT_INTERP, ARGIN(const PMC *self), ARGIN(const STRING *key))
 {
+    ASSERT_ARGS(check_get_std_props)
+
     if ((self->vtable->flags & (VTABLE_IS_CONST_FLAG | VTABLE_IS_READONLY_FLAG))
        && Parrot_str_equal(interp, key, CONST_STRING(interp, "_ro"))) {
         PMC * const ret_val  = Parrot_pmc_new(interp, enum_class_Integer);
@@ -299,8 +303,7 @@
 =item C<static PMC* make_prop_hash(PARROT_INTERP, PMC *self)>
 
 Create a property hash for C<self>. Returns the created hash. Inferred
-properties will be added to the hash and it will be set as
-C<PMC_metadata(self)>.
+properties will be added to the hash.
 
 =cut
 
@@ -311,9 +314,9 @@
 static PMC*
 make_prop_hash(PARROT_INTERP, ARGMOD(PMC *self))
 {
-    PMC * const prop = Parrot_pmc_new(interp, enum_class_Hash);
+    ASSERT_ARGS(make_prop_hash)
 
-    PMC_metadata(self) = prop;
+    PMC * const prop = Parrot_pmc_new(interp, enum_class_Hash);
     propagate_std_props(interp, self, prop);
     return prop;
 }
@@ -444,7 +447,7 @@
             return;
 
         if (PMC_IS_NULL(PMC_metadata(SELF)))
-            make_prop_hash(INTERP, SELF);
+            PMC_metadata(SELF) = make_prop_hash(INTERP, SELF);
 
         VTABLE_set_pmc_keyed_str(INTERP, PMC_metadata(SELF), key, value);
     }
@@ -477,7 +480,7 @@
     VTABLE PMC *getprops() {
         if (PMC_IS_NULL(PMC_metadata(SELF))) {
             if (has_pending_std_props(SELF))
-                return make_prop_hash(INTERP, SELF);
+                PMC_metadata(SELF) = make_prop_hash(INTERP, SELF);
             else
                 return PMCNULL;
         }

Modified: branches/avl_string_cache/src/pmc/env.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/env.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/env.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -154,7 +154,7 @@
 
     VTABLE STRING *get_string_keyed_str(STRING *key) {
         if (!STRING_IS_EMPTY(key)) {
-            char * const val = Parrot_getenv(interp, key);
+            const char * const val = Parrot_getenv(interp, key);
 
             if (val) {
                 STRING * const retval = Parrot_str_new(interp, val, 0);
@@ -203,14 +203,13 @@
 */
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        STRING *keyname = VTABLE_get_string(INTERP, key);
+        STRING * const keyname = VTABLE_get_string(INTERP, key);
 
-        char   *val     = NULL;
         STRING *retval  = NULL;
         PMC    *return_pmc;
 
         if (!STRING_IS_EMPTY(keyname)) {
-            val         = Parrot_getenv(INTERP, keyname);
+            const char * const val = Parrot_getenv(INTERP, keyname);
 
             if (val) {
                 retval = Parrot_str_new(INTERP, val, 0);
@@ -237,7 +236,7 @@
 */
 
     VTABLE void set_string_keyed(PMC *key, STRING *value) {
-        STRING *keyname = VTABLE_get_string(INTERP, key);
+        STRING * const keyname = VTABLE_get_string(INTERP, key);
 
         if (keyname && value)
             Parrot_setenv(INTERP, keyname, value);
@@ -254,8 +253,8 @@
 */
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
-        STRING * keyname   = VTABLE_get_string(INTERP, key);
-        STRING * str_value = VTABLE_get_string(INTERP, value);
+        STRING * const keyname   = VTABLE_get_string(INTERP, key);
+        STRING * const str_value = VTABLE_get_string(INTERP, value);
 
         if (keyname && str_value)
             Parrot_setenv(INTERP, keyname, str_value);
@@ -272,12 +271,12 @@
 */
 
     VTABLE INTVAL exists_keyed(PMC *pmckey) {
-        STRING *keyname = VTABLE_get_string(INTERP, pmckey);
+        STRING * const keyname = VTABLE_get_string(INTERP, pmckey);
 
         if (!STRING_IS_EMPTY(keyname)) {
-            char * const val = Parrot_getenv(interp, keyname);
+            const char * const val = Parrot_getenv(interp, keyname);
 
-            if (val) {
+            if (val != NULL) {
                 return 1;
             }
         }
@@ -296,12 +295,12 @@
 */
 
     VTABLE void delete_keyed(PMC *key) {
-        STRING *keyname = VTABLE_get_string(INTERP, key);
+        STRING * const keyname = VTABLE_get_string(INTERP, key);
 
         if (!STRING_IS_EMPTY(keyname)) {
-            char * const val = Parrot_getenv(INTERP, keyname);
+            const char * const val = Parrot_getenv(INTERP, keyname);
 
-            if (val) {
+            if (val != NULL) {
                 Parrot_unsetenv(INTERP, keyname);
             }
         }

Modified: branches/avl_string_cache/src/pmc/eventhandler.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/eventhandler.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/eventhandler.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -167,9 +167,9 @@
         Parrot_EventHandler_attributes * const e = PARROT_EVENTHANDLER(SELF);
 
         if (e)
-            return Parrot_str_copy(INTERP, e->type);
+            return e->type;
 
-        return string_from_literal(INTERP, "");
+        return CONST_STRING(INTERP, "");
     }
 
 /*

Modified: branches/avl_string_cache/src/pmc/filehandle.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/filehandle.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/filehandle.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -253,10 +253,10 @@
                                 "Cannot reopen already open filehandle");
 
         if (got_mode && !STRING_IS_NULL(mode))
-            SET_ATTR_mode(INTERP, SELF, Parrot_str_copy(INTERP, mode));
+            SET_ATTR_mode(INTERP, SELF, mode);
 
         if (got_filename && !STRING_IS_NULL(filename))
-            SET_ATTR_filename(INTERP, SELF, Parrot_str_copy(INTERP, filename));
+            SET_ATTR_filename(INTERP, SELF, filename);
 
         /* Open the file. With no options, reopen the same file as before */
         GET_ATTR_filename(INTERP, SELF, open_filename);
@@ -475,7 +475,7 @@
 
             do {
                 STRING * const part = Parrot_io_reads(INTERP, SELF, 0);
-                result = Parrot_str_append(INTERP, result, part);
+                result = Parrot_str_concat(INTERP, result, part);
 
                 if (Parrot_io_eof(INTERP, SELF))
                     break;
@@ -618,12 +618,9 @@
 */
 
     METHOD mode() {
-        STRING *mode, *mode_copy;
-
+        STRING *mode;
         GET_ATTR_mode(INTERP, SELF, mode);
-        mode_copy = Parrot_str_copy(INTERP, mode);
-
-        RETURN(STRING *mode_copy);
+        RETURN(STRING *mode);
     }
 
 
@@ -640,20 +637,14 @@
 
     METHOD encoding(STRING *new_encoding :optional, INTVAL got_encoding :opt_flag) {
         STRING *encoding;
-        STRING *encoding_copy = NULL;
 
         if (got_encoding) {
-            if (!STRING_IS_NULL(new_encoding))
-                encoding_copy = Parrot_str_copy(INTERP, new_encoding);
-            SET_ATTR_encoding(INTERP, SELF, encoding_copy);
+            SET_ATTR_encoding(INTERP, SELF, new_encoding);
             RETURN(STRING *new_encoding);
         }
 
         GET_ATTR_encoding(INTERP, SELF, encoding);
-        if (!STRING_IS_NULL(encoding))
-            encoding_copy = Parrot_str_copy(INTERP, encoding);
-
-        RETURN(STRING *encoding_copy);
+        RETURN(STRING *encoding);
     }
 
 

Modified: branches/avl_string_cache/src/pmc/fixedbooleanarray.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/fixedbooleanarray.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/fixedbooleanarray.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -283,9 +283,9 @@
 
         for (i = 0; i < elems; i++) {
             if (SELF.get_integer_keyed_int((INTVAL)i))
-                str = Parrot_str_concat(INTERP, str, one, 0);
+                str = Parrot_str_concat(INTERP, str, one);
             else
-                str = Parrot_str_concat(INTERP, str, zero, 0);
+                str = Parrot_str_concat(INTERP, str, zero);
         }
 
         return str;

Modified: branches/avl_string_cache/src/pmc/fixedintegerarray.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/fixedintegerarray.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/fixedintegerarray.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -279,13 +279,13 @@
 
         for (j = 0; j < n; ++j) {
             PMC * const val = SELF.get_pmc_keyed_int(j);
-            res = Parrot_str_append(INTERP, res, VTABLE_get_repr(INTERP, val));
+            res = Parrot_str_concat(INTERP, res, VTABLE_get_repr(INTERP, val));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, " ]"));
+        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, " ]"));
         return res;
     }
 

Modified: branches/avl_string_cache/src/pmc/fixedpmcarray.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/fixedpmcarray.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/fixedpmcarray.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -91,20 +91,13 @@
 */
 
     VTABLE void init_int(INTVAL size) {
-        PMC **data;
-        int i;
-
         if (size < 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                     _("FixedPMCArray: Cannot set array size to a negative number (%d)"), size);
 
-        SET_ATTR_size(INTERP, SELF, size);
-        data           = mem_gc_allocate_n_typed(INTERP, size, PMC *);
+        SELF.set_integer_native(size);
 
-        for (i = 0; i < size; i++)
-            data[i] = PMCNULL;
-
-        PObj_custom_destroy_SET(SELF);
+        PObj_custom_mark_destroy_SETALL(SELF);
     }
 
 /*
@@ -138,7 +131,7 @@
 
         if (size) {
             PMC_size(dest)  = size;
-            PMC_array(dest) = mem_gc_allocate_n_zeroed_typed(INTERP, size, PMC *);
+            PMC_array(dest) = mem_gc_allocate_n_typed(INTERP, size, PMC *);
             mem_copy_n_typed(PMC_array(dest), PMC_array(SELF), size, PMC *);
             PObj_custom_mark_destroy_SETALL(dest);
         }
@@ -229,12 +222,12 @@
         for (i = 0; i < n; ++i) {
             PMC * const val = SELF.get_pmc_keyed_int(i);
             if (i > 0)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
 
-            res = Parrot_str_append(INTERP, res, VTABLE_get_repr(INTERP, val));
+            res = Parrot_str_concat(INTERP, res, VTABLE_get_repr(INTERP, val));
         }
 
-        res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ")"));
+        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ")"));
 
         return res;
     }
@@ -408,7 +401,7 @@
                     _("FixedPMCArray: Cannot set array size to a negative number"));
 
         PMC_size(SELF) = size;
-        data           = mem_gc_allocate_n_zeroed_typed(INTERP, size, PMC *);
+        data           = mem_gc_allocate_n_typed(INTERP, size, PMC *);
 
         for (i = 0; i < size; i++)
             data[i] = PMCNULL;
@@ -431,7 +424,7 @@
             mem_gc_free(INTERP, PMC_array(SELF));
 
         size            = PMC_size(SELF) = VTABLE_elements(INTERP, value);
-        PMC_array(SELF) = mem_gc_allocate_n_zeroed_typed(INTERP, size, PMC *);
+        PMC_array(SELF) = mem_gc_allocate_n_typed(INTERP, size, PMC *);
 
         for (i = 0; i < size; i++)
             (PMC_array(SELF))[i] = VTABLE_get_pmc_keyed_int(INTERP, value, i);

Modified: branches/avl_string_cache/src/pmc/fixedstringarray.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/fixedstringarray.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/fixedstringarray.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -538,15 +538,15 @@
 
         for (j = 0; j < n; ++j) {
             STRING * const val = SELF.get_string_keyed_int(j);
-            res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "\""));
-            res = Parrot_str_append(INTERP, res, val);
-            res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "\""));
+            res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "\""));
+            res = Parrot_str_concat(INTERP, res, val);
+            res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "\""));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, " ]"));
+        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, " ]"));
         return res;
     }
 

Modified: branches/avl_string_cache/src/pmc/hash.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/hash.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/hash.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -61,6 +61,10 @@
 
 Initializes the instance.
 
+=item C<void init_int(INTVAL value_type)>
+
+Initializes the instance with the value_type provided.
+
 =item C<void destroy()>
 
 Free hash structure.
@@ -78,6 +82,19 @@
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
+    VTABLE void init_int(INTVAL value_type) {
+        Parrot_Hash_attributes * const attr =
+            (Parrot_Hash_attributes *) PMC_data(SELF);
+
+        attr->hash = parrot_create_hash(INTERP,
+                (PARROT_DATA_TYPE)value_type,
+                Hash_key_type_STRING,
+                STRING_compare,
+                (hash_hash_key_fn)key_hash_STRING);
+        attr->hash->container = SELF;
+        PObj_custom_mark_destroy_SETALL(SELF);
+    }
+
     VTABLE void destroy() {
         Hash * const hash = (Hash *)SELF.get_pointer();
         if (hash)
@@ -236,18 +253,15 @@
         if (old_hash && old_hash->entry_type == type)
             return;
 
-        if (!old_hash)
-            old_hash = parrot_new_hash(INTERP);
-
         switch (type) {
           case enum_type_INTVAL:
           case enum_type_STRING:
           case enum_type_PMC:
             new_hash = parrot_create_hash(interp,
                         (PARROT_DATA_TYPE)type,
-                        old_hash->key_type,
-                        old_hash->compare,
-                        old_hash->hash_val);
+                        old_hash ? old_hash->key_type : Hash_key_type_STRING,
+                        old_hash ? old_hash->compare : STRING_compare,
+                        old_hash ? old_hash->hash_val : (hash_hash_key_fn)key_hash_STRING);
             break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
@@ -257,7 +271,8 @@
         PARROT_HASH(SELF)->hash = new_hash;
         new_hash->container     = SELF;
 
-        parrot_hash_destroy(INTERP, old_hash);
+        if (old_hash)
+            parrot_hash_destroy(INTERP, old_hash);
     }
 
     METHOD get_value_type() {
@@ -342,23 +357,23 @@
             Parrot_str_free_cstring(key_str);
 
             if (all_digit) {
-                res = Parrot_str_append(INTERP, res, key);
+                res = Parrot_str_concat(INTERP, res, key);
             }
             else {
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "'"));
-                res = Parrot_str_append(INTERP, res, key);
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "'"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "'"));
+                res = Parrot_str_concat(INTERP, res, key);
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "'"));
             }
 
-            res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ": "));
+            res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ": "));
             val = SELF.get_pmc_keyed_str(key);
-            res = Parrot_str_append(INTERP, res, VTABLE_get_string(INTERP, val));
+            res = Parrot_str_concat(INTERP, res, VTABLE_get_string(INTERP, val));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "}"));
+        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "}"));
 
         return res;
     }
@@ -1136,8 +1151,31 @@
             const INTVAL v_type = VTABLE_shift_integer(INTERP, info);
             Hash        *hash;
 
-            if (k_type == Hash_key_type_int && v_type == enum_hash_int) {
-                SELF.set_pointer(parrot_new_intval_hash(INTERP));
+            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();

Modified: branches/avl_string_cache/src/pmc/hashiterator.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/hashiterator.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/hashiterator.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -73,6 +73,8 @@
 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;
 

Modified: branches/avl_string_cache/src/pmc/imageio.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/imageio.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/imageio.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -316,7 +316,7 @@
 
         PARROT_ASSERT(pmc);
         VTABLE_push_integer(interp, info,
-                PObj_is_object_TEST(pmc) ? enum_class_Object : pmc->vtable->base_type);
+                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);
         VTABLE_freeze(interp, pmc, info);
@@ -531,8 +531,9 @@
 
     VTABLE INTVAL shift_integer()
     {
-        opcode_t *pos  = GET_VISIT_CURSOR(SELF);
-        const INTVAL i = PF_fetch_integer(PARROT_IMAGEIO(SELF)->pf, (const opcode_t **)&pos);
+        const opcode_t *pos = GET_VISIT_CURSOR(SELF);
+        const INTVAL i      = PF_fetch_integer(PARROT_IMAGEIO(SELF)->pf,
+                (const opcode_t **)&pos);
         SET_VISIT_CURSOR(SELF, (char *)pos);
         BYTECODE_SHIFT_OK(SELF);
         return i;
@@ -550,8 +551,9 @@
 */
 
     VTABLE FLOATVAL shift_float() {
-        opcode_t *pos    = GET_VISIT_CURSOR(SELF);
-        const FLOATVAL f = PF_fetch_number(PARROT_IMAGEIO(SELF)->pf, (const opcode_t **)&pos);
+        const opcode_t *pos = GET_VISIT_CURSOR(SELF);
+        const FLOATVAL f    = PF_fetch_number(PARROT_IMAGEIO(SELF)->pf,
+                (const opcode_t **)&pos);
         SET_VISIT_CURSOR(SELF, (char *)pos);
         BYTECODE_SHIFT_OK(SELF);
         return f;
@@ -570,8 +572,8 @@
 
     VTABLE STRING *shift_string()
     {
-        opcode_t *pos    = GET_VISIT_CURSOR(SELF);
-        STRING * const s = PF_fetch_string(interp, PARROT_IMAGEIO(SELF)->pf,
+        const opcode_t *pos = GET_VISIT_CURSOR(SELF);
+        STRING * const s    = PF_fetch_string(interp, PARROT_IMAGEIO(SELF)->pf,
                                            (const opcode_t **)&pos);
         SET_VISIT_CURSOR(SELF, (char *)pos);
         BYTECODE_SHIFT_OK(SELF);
@@ -612,11 +614,12 @@
     }
 
     VTABLE void set_string_native(STRING *image) {
+        PMC          *unused;
         const UINTVAL header_length = GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
         int unpacked_length;
 
-        PARROT_IMAGEIO(SELF)->what          = VISIT_THAW_NORMAL;
-        PARROT_IMAGEIO(SELF)->buffer        = (Buffer *)image;
+        PARROT_IMAGEIO(SELF)->what   = VISIT_THAW_NORMAL;
+        PARROT_IMAGEIO(SELF)->buffer = (Buffer *)image;
 
         PARROT_ASSERT(image->_bufstart == image->strstart);
 
@@ -627,16 +630,14 @@
         unpacked_length = PackFile_unpack(interp, PARROT_IMAGEIO(SELF)->pf,
             GET_VISIT_CURSOR(SELF), PARROT_IMAGEIO(SELF)->input_length);
 
-        if (!unpacked_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");
-        }
-        else {
-            INC_VISIT_CURSOR(SELF, header_length);
-        }
 
-        visit_todo_list_thaw(INTERP, SELF);
+        unused = visit_todo_list_thaw(INTERP, SELF);
         Parrot_visit_loop_visit(INTERP, SELF);
 
         /* we're done reading the image */

Modified: branches/avl_string_cache/src/pmc/integer.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/integer.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/integer.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -28,7 +28,7 @@
 static void maybe_throw_overflow_error(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PMC* upgrade_self_to_bignum(PARROT_INTERP, ARGMOD(PMC *self))
         __attribute__nonnull__(1)
@@ -56,7 +56,7 @@
             "Integer overflow");
 }
 
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PMC*
 upgrade_self_to_bignum(PARROT_INTERP, ARGMOD(PMC *self))
@@ -381,6 +381,7 @@
 
     MULTI void i_add(Complex value) {
         const INTVAL a = SELF.get_integer();
+        UNUSED(a);
 
         Parrot_pmc_reuse(INTERP, SELF, enum_class_Complex, 0);
         VTABLE_set_number_native(INTERP, SELF,
@@ -401,7 +402,6 @@
         if ((c^a) >= 0 || (c^b) >= 0)
             VTABLE_set_integer_native(INTERP, SELF, c);
         else {
-            PMC *temp;
             maybe_throw_overflow_error(interp);
             SELF = upgrade_self_to_bignum(interp, SELF);
             VTABLE_i_add_int(interp, SELF, b);
@@ -882,7 +882,6 @@
 
     VTABLE void i_floor_divide_float(FLOATVAL value) {
         FLOATVAL f;
-        INTVAL   self_val;
 
         if (FLOAT_IS_ZERO(value))
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,

Modified: branches/avl_string_cache/src/pmc/key.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/key.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/key.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -74,8 +74,7 @@
                 break;
               case KEY_string_FLAG:
               case KEY_string_FLAG | KEY_register_FLAG:
-                key_set_string(INTERP, dkey,
-                        Parrot_str_copy(INTERP, VTABLE_get_string(INTERP, key)));
+                key_set_string(INTERP, dkey, VTABLE_get_string(INTERP, key));
                 break;
               case KEY_pmc_FLAG:
               case KEY_pmc_FLAG | KEY_register_FLAG:

Modified: branches/avl_string_cache/src/pmc/lexinfo.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/lexinfo.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/lexinfo.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -61,13 +61,10 @@
     }
 
     VTABLE void init_pmc(PMC *sub) {
-        Parrot_LexInfo_attributes *attrs =
-            (Parrot_LexInfo_attributes *) PMC_data(SELF);
-
         PARROT_ASSERT(PObj_constant_TEST(SELF));
 
         /* Set value type to INTVAL */
-        Parrot_pcc_invoke_method_from_c_args(interp, SELF, CONST_STRING(INTERP, "set_value_type"), "I->", (INTVAL)enum_type_INTVAL);
+        SELF.init_int((INTVAL)enum_type_INTVAL);
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
@@ -100,9 +97,10 @@
 
     VTABLE PMC *inspect_str(STRING *what) {
         if (Parrot_str_equal(interp, what, CONST_STRING(interp, "symbols"))) {
-            PMC *result     = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-            Hash *hash      = (Hash *)SELF.get_pointer();
-            UINTVAL entries = hash->entries;
+            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;
 

Modified: branches/avl_string_cache/src/pmc/namespace.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/namespace.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/namespace.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -52,6 +52,7 @@
         FUNC_MODIFIES(*nsinfo)
         FUNC_MODIFIES(*classobj);
 
+PARROT_WARN_UNUSED_RESULT
 static int maybe_add_sub_to_namespace(PARROT_INTERP,
     ARGIN(PMC *SELF),
     ARGIN(STRING *key),
@@ -61,13 +62,15 @@
         __attribute__nonnull__(3)
         __attribute__nonnull__(4);
 
+PARROT_WARN_UNUSED_RESULT
 static int ns_insert_sub_keyed_str(PARROT_INTERP,
     ARGIN(PMC *self),
     ARGIN(STRING *key),
-    ARGIN_NULLOK(PMC *value))
+    ARGIN(PMC *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
 
 #define ASSERT_ARGS_add_multi_to_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -90,7 +93,8 @@
 #define ASSERT_ARGS_ns_insert_sub_keyed_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self) \
-    , PARROT_ASSERT_ARG(key))
+    , PARROT_ASSERT_ARG(key) \
+    , PARROT_ASSERT_ARG(value))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -116,17 +120,19 @@
     }
 }
 
+PARROT_WARN_UNUSED_RESULT
 static int
 ns_insert_sub_keyed_str(PARROT_INTERP, ARGIN(PMC *self), ARGIN(STRING *key),
-        ARGIN_NULLOK(PMC *value))
+        ARGIN(PMC *value))
 {
     ASSERT_ARGS(ns_insert_sub_keyed_str)
 
     Parrot_NameSpace_attributes * const nsinfo   = PARROT_NAMESPACE(self);
     PMC              *       vtable   = nsinfo->vtable;
     PMC              * const classobj = VTABLE_get_class(interp, self);
-    STRING           * vtable_key     = NULL;
+    STRING           * vtable_key     = STRINGNULL;
     Parrot_Sub_attributes *sub;
+    INTVAL stored = 0;
 
     PMC_get_sub(interp, value, sub);
 
@@ -151,25 +157,31 @@
             /* Insert it. */
             VTABLE_set_pmc_keyed_int(interp, vtable, sub->vtable_index, value);
         }
+        if (!(sub->comp_flags & SUB_COMP_FLAG_NSENTRY))
+            stored = 1;
     }
 
     if (sub->comp_flags & SUB_COMP_FLAG_METHOD) {
         STRING *method_name = key;
 
         if (Parrot_str_equal(interp, sub->method_name, CONST_STRING(interp, ""))) {
-            if (sub->vtable_index != -1 && vtable_key != NULL) {
-                method_name = Parrot_str_copy(interp, vtable_key);
+            if (sub->vtable_index != -1 && !STRING_IS_NULL(vtable_key)) {
+                method_name = vtable_key;
             }
         }
         else {
             method_name = sub->method_name;
         }
         add_to_class(interp, nsinfo, classobj, method_name, value);
+
+        if (!(sub->comp_flags & SUB_COMP_FLAG_NSENTRY))
+            stored = 1;
     }
 
-    return 0;
+    return stored;
 }
 
+PARROT_WARN_UNUSED_RESULT
 static int
 maybe_add_sub_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
         ARGIN(PMC *value))
@@ -397,13 +409,12 @@
             }
             else {
                 /* create new tuple */
-                new_tuple = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
+                /* for a fully typed namespace, we'd need 3 or 4 */
+                new_tuple = Parrot_pmc_new_init_int(INTERP,
+                        enum_class_FixedPMCArray, NS_max_slots);
 
                 /* flag it as special */
                 PObj_get_FLAGS(new_tuple) |= FPA_is_ns_ext;
-
-                /* for a fully typed namespace, we'd need 3 or 4 */
-                VTABLE_set_integer_native(INTERP, new_tuple, NS_max_slots);
             }
         }
 
@@ -514,7 +525,7 @@
             INTVAL i = 0;
             while (!PMC_IS_NULL(ns) && VTABLE_elements(INTERP, key)) {
                 STRING * const name = VTABLE_get_string_keyed_int(INTERP, key, i);
-                if (name == NULL || name == STRINGNULL) {
+                if (STRING_IS_NULL(name)) {
                     ns = PMCNULL;
                     /* What to do here? Throw an exception or something? */
                     break;

Modified: branches/avl_string_cache/src/pmc/object.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/object.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/object.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -119,7 +119,7 @@
 
         /* Build a string representing the fully qualified attribute name. */
         STRING *fq_name = VTABLE_get_string(interp, cur_class);
-        fq_name         = Parrot_str_append(interp, fq_name, name);
+        fq_name         = Parrot_str_concat(interp, fq_name, name);
 
         /* Look up. */
         if (VTABLE_exists_keyed_str(interp, _class->attrib_index, fq_name)) {
@@ -160,7 +160,7 @@
     /* Build a string representing the fully qualified attribute name. */
     parent_class = Parrot_oo_get_class(interp, key);
     fq_name      = VTABLE_get_string(interp, parent_class);
-    fq_name      = Parrot_str_append(interp, fq_name, name);
+    fq_name      = Parrot_str_concat(interp, fq_name, name);
 
     /* Look up. */
     if (VTABLE_exists_keyed_str(interp, _class->attrib_index, fq_name)) {
@@ -782,14 +782,16 @@
         STRING * const meth_name = CONST_STRING(interp, "clone");
         PMC * const meth =
                 Parrot_oo_find_vtable_override(interp, obj->_class, meth_name);
+        PMC *result;
+
         if (!PMC_IS_NULL(meth)) {
-            PMC *result;
-            Parrot_pcc_invoke_sub_from_c_args(interp, meth, "Pi->P",
-                    pmc, &result);
-            return result;
+            Parrot_pcc_invoke_sub_from_c_args(interp, meth, "Pi->P", pmc, &result);
         }
-        else
-            return Parrot_oo_clone_object(interp, SELF, obj->_class, NULL);
+        else {
+            result = Parrot_oo_clone_object(interp, SELF, NULL);
+        }
+
+        return result;
     }
 
 /*

Modified: branches/avl_string_cache/src/pmc/opcode.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/opcode.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/opcode.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -114,14 +114,16 @@
 
     METHOD dirs() {
         const op_info_t * const info = PARROT_OPCODE(SELF)->info;
-        PMC *result = Parrot_pmc_new(INTERP, enum_class_FixedIntegerArray);
+        PMC *result;
         INTVAL arg_count = info->op_count - 1;
         if (arg_count > 0) {
             INTVAL i;
-            VTABLE_set_integer_native(INTERP, result, arg_count);
+            result = Parrot_pmc_new_init_int(INTERP, enum_class_FixedIntegerArray, arg_count);
             for (i = 0; i < arg_count; ++i)
                 VTABLE_set_integer_keyed_int(INTERP, result, i, (INTVAL) info->dirs[i]);
         }
+        else
+            result = Parrot_pmc_new(INTERP, enum_class_FixedIntegerArray);
         RETURN(PMC *result);
     }
 

Modified: branches/avl_string_cache/src/pmc/orderedhash.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/orderedhash.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/orderedhash.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -338,8 +338,8 @@
         }
 
         /* Create new entry */
-        list_entry = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
-        VTABLE_set_integer_native(INTERP, list_entry, ORDERED_HASH_ITEM_MAX);
+        list_entry = Parrot_pmc_new_init_int(INTERP,
+                enum_class_FixedPMCArray, ORDERED_HASH_ITEM_MAX);
         VTABLE_set_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_VALUE, value);
         VTABLE_set_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_KEY, key);
 

Modified: branches/avl_string_cache/src/pmc/packfile.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/packfile.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/packfile.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -168,17 +168,21 @@
 =cut
 
 Implementation note: taken from the bottom end of Parrot_pbc_read().
+
 */
+
     VTABLE void set_string_native(STRING *str) {
-        PackFile  * const pf  = PackFile_new(interp, 0);
-        opcode_t  * const ptr = (opcode_t *)Parrot_string_cstring(interp, str);
-        const int length      = Parrot_str_byte_length(interp, str);
         Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
+        PackFile                   * const pf    = PackFile_new(interp, 0);
+        const opcode_t             * const ptr   =
+                (const opcode_t *)Parrot_string_cstring(interp, str);
+
+        const int length = Parrot_str_byte_length(interp, str);
 
         if (!PackFile_unpack(interp, pf, ptr, length)) {
             PackFile_destroy(interp, pf);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
-                                        "Can't unpack packfile.");
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_MALFORMED_PACKFILE, "Can't unpack packfile.");
         }
 
         /* Disable GC during copy data into internal structures. */

Modified: branches/avl_string_cache/src/pmc/packfileannotations.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/packfileannotations.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/packfileannotations.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -311,8 +311,7 @@
             PMC * key_array = VTABLE_get_pmc_keyed_str(interp, keys, entity_attrs->name);
             if (PMC_IS_NULL(key_array)) {
                 /* Never see this name before. Create new FIA and add to keys. */
-                key_array = Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
-                VTABLE_set_integer_native(interp, key_array, 3);
+                key_array = Parrot_pmc_new_init_int(interp, enum_class_FixedIntegerArray, 3);
                 VTABLE_set_integer_keyed_int(interp, key_array, 0, -1);
                 VTABLE_set_integer_keyed_int(interp, key_array, 1, -1);
                 VTABLE_set_integer_keyed_int(interp, key_array, 2, -1);

Modified: branches/avl_string_cache/src/pmc/packfiledirectory.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/packfiledirectory.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/packfiledirectory.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -148,7 +148,7 @@
             PackFile_Segment * const pfseg = (PackFile_Segment *)VTABLE_get_pointer(interp, seg);
 
             pfseg->pf   = pf;
-            pfseg->name = Parrot_str_copy(interp, name);
+            pfseg->name = name;
             PackFile_add_segment(interp, pfdir, pfseg);
         }
 

Modified: branches/avl_string_cache/src/pmc/parrotinterpreter.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/parrotinterpreter.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/parrotinterpreter.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -145,7 +145,7 @@
                 Parrot_Class_attributes * const source_class = PARROT_CLASS(source);
                 Parrot_Class_attributes * const dest_class   = PARROT_CLASS(dest);
 
-                dest_class->name           = Parrot_str_copy(d, source_class->name);
+                dest_class->name           = source_class->name;
                 dest_class->_namespace     = VTABLE_clone(d, source_class->_namespace);
             }
         }

Modified: branches/avl_string_cache/src/pmc/pmcproxy.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/pmcproxy.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/pmcproxy.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -486,9 +486,7 @@
 
     VTABLE STRING *get_string() {
         Parrot_Class_attributes * const proxy_info = PARROT_CLASS(SELF);
-
-        /* Copy the stored string name of the proxy. */
-        return Parrot_str_copy(interp, proxy_info->name);
+        return proxy_info->name;
     }
 
 

Modified: branches/avl_string_cache/src/pmc/resizablepmcarray.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/resizablepmcarray.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/resizablepmcarray.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -86,7 +86,7 @@
             INTVAL i, cur, needed;
             i = cur = PMC_threshold(SELF);
             if (cur < 8192)
-                cur = size < 2 * cur ? 2 * cur : size;
+                cur = (size < 2 * cur) ? (2 * cur) : size;
             else {
                 needed = size - cur;
                 cur   += needed + 4096;
@@ -285,8 +285,8 @@
     }
 
     VTABLE void delete_keyed_int(INTVAL idx) {
-        PMC   **data = PMC_array(SELF);
-        INTVAL  n    = PMC_size(SELF);
+        PMC ** const data = PMC_array(SELF);
+        const INTVAL  n   = PMC_size(SELF);
         INTVAL  i;
 
         for (i = idx; i < n - 1; ++i)
@@ -320,7 +320,7 @@
     }
 
     VTABLE INTVAL exists_keyed(PMC *key) {
-        INTVAL ix = VTABLE_get_integer(INTERP, key);
+        const INTVAL ix = VTABLE_get_integer(INTERP, key);
         return SELF.exists_keyed_int(ix);
     }
 
@@ -370,8 +370,8 @@
 
     VTABLE void push_float(FLOATVAL value) {
 
-        INTVAL size = PMC_size(SELF);
-        PMC   *val  = Parrot_pmc_new(INTERP, enum_class_Float);
+        const INTVAL size = PMC_size(SELF);
+        PMC   * const val = Parrot_pmc_new(INTERP, enum_class_Float);
 
         VTABLE_set_number_native(INTERP, val, value);
         SELF.set_pmc_keyed_int(size, val);
@@ -381,8 +381,8 @@
 
     VTABLE void push_integer(INTVAL value) {
 
-        INTVAL size = PMC_size(SELF);
-        PMC   *val  = Parrot_pmc_new(INTERP, enum_class_Integer);
+        const INTVAL size = PMC_size(SELF);
+        PMC   * const val = Parrot_pmc_new(INTERP, enum_class_Integer);
 
         VTABLE_set_integer_native(INTERP, val, value);
         SELF.set_pmc_keyed_int(size, val);
@@ -391,9 +391,14 @@
     }
 
     VTABLE void push_pmc(PMC *value) {
+        const INTVAL size   = PMC_size(SELF);
+        const INTVAL thresh = PMC_threshold(SELF);
 
-        INTVAL size = PMC_size(SELF);
-        SELF.set_integer_native(size + 1);
+        if (PMC_array(SELF) && size < thresh)
+            PMC_size(SELF) = size + 1;
+        else {
+            SELF.set_integer_native(size + 1);
+        }
         ((PMC **)PMC_array(SELF))[size] = value;
 
         return;
@@ -401,8 +406,8 @@
 
     VTABLE void push_string(STRING *value) {
 
-        INTVAL size = PMC_size(SELF);
-        PMC   *val  = Parrot_pmc_new(INTERP, enum_class_String);
+        const INTVAL size = PMC_size(SELF);
+        PMC   * const val = Parrot_pmc_new(INTERP, enum_class_String);
 
         VTABLE_assign_string_native(INTERP, val, value);
         SELF.set_pmc_keyed_int(size, val);
@@ -505,8 +510,8 @@
 
     VTABLE void unshift_float(FLOATVAL value) {
 
-        INTVAL  size = PMC_size(SELF);
-        PMC    *val  = Parrot_pmc_new(INTERP, enum_class_Float);
+        const INTVAL size = PMC_size(SELF);
+        PMC * const val   = Parrot_pmc_new(INTERP, enum_class_Float);
         PMC   **data;
         INTVAL  i;
 
@@ -525,8 +530,8 @@
 
     VTABLE void unshift_integer(INTVAL value) {
 
-        INTVAL  size = PMC_size(SELF);
-        PMC    *val  = Parrot_pmc_new(INTERP, enum_class_Integer);
+        const INTVAL size = PMC_size(SELF);
+        PMC * const val   = Parrot_pmc_new(INTERP, enum_class_Integer);
         PMC    **data;
         INTVAL   i;
 
@@ -545,7 +550,7 @@
 
     VTABLE void unshift_pmc(PMC *value) {
 
-        INTVAL  size = PMC_size(SELF);
+        const INTVAL size = PMC_size(SELF);
         PMC   **data;
         INTVAL  i;
 
@@ -563,8 +568,8 @@
 
     VTABLE void unshift_string(STRING *value) {
 
-        INTVAL  size = PMC_size(SELF);
-        PMC    *val  = Parrot_pmc_new(INTERP, enum_class_String);
+        const INTVAL size = PMC_size(SELF);
+        PMC * const val  = Parrot_pmc_new(INTERP, enum_class_String);
         PMC   **data;
         INTVAL  i;
 
@@ -592,7 +597,7 @@
 */
 
     VTABLE PMC *clone() {
-        PMC *copy = SUPER();
+        PMC * const copy = SUPER();
 
         /* copy trimmed extra space */
         PMC_threshold(copy) = PMC_size(SELF);
@@ -612,9 +617,8 @@
 
     METHOD append(PMC *other) {
 
-        INTVAL i;
-        INTVAL n = VTABLE_elements(INTERP, SELF);
-        INTVAL m = VTABLE_elements(INTERP, other);
+        const INTVAL n = VTABLE_elements(INTERP, SELF);
+        const INTVAL m = VTABLE_elements(INTERP, other);
 
         if (!m)
             RETURN(void);
@@ -624,14 +628,15 @@
 
         if (other->vtable->base_type == SELF->vtable->base_type
         ||  other->vtable->base_type == enum_class_FixedPMCArray) {
-            PMC **other_data = PMC_array(other);
-            PMC **this_data  = PMC_array(SELF);
+            PMC ** const other_data = PMC_array(other);
+            PMC ** const this_data  = PMC_array(SELF);
 
             /* libc is faster at copying data than a manual loop here */
             memmove(this_data + n, other_data, m  * sizeof (PMC *));
         }
         else {
-            PMC **this_data = PMC_array(SELF);
+            PMC ** const this_data = PMC_array(SELF);
+            INTVAL i;
 
             for (i = 0; i < m; ++i)
                 this_data[n + i] = VTABLE_get_pmc_keyed_int(INTERP, other, i);
@@ -650,18 +655,18 @@
     VTABLE STRING *get_repr() {
 
         INTVAL  j;
-        INTVAL  n   = VTABLE_elements(INTERP, SELF);
+        const INTVAL n = VTABLE_elements(INTERP, SELF);
         STRING *res = CONST_STRING(INTERP, "[ ");
 
         for (j = 0; j < n; ++j) {
-            PMC *val = SELF.get_pmc_keyed_int(j);
-            res      = Parrot_str_append(INTERP, res, VTABLE_get_repr(INTERP, val));
+            PMC * const val = SELF.get_pmc_keyed_int(j);
+            res      = Parrot_str_concat(INTERP, res, VTABLE_get_repr(INTERP, val));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        return Parrot_str_append(INTERP, res, CONST_STRING(INTERP, " ]"));
+        return Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, " ]"));
     }
 
 /*
@@ -684,7 +689,7 @@
 
         const INTVAL length = VTABLE_elements(INTERP, SELF);
         const INTVAL elems  = VTABLE_elements(INTERP, value);
-        INTVAL       shift  = elems - count;
+        const INTVAL shift  = elems - count;
         INTVAL       i;
 
         /* start from end? */
@@ -735,12 +740,12 @@
 */
 
     METHOD shift() {
-        PMC *value = VTABLE_shift_pmc(INTERP, SELF);
+        PMC * const value = VTABLE_shift_pmc(INTERP, SELF);
         RETURN(PMC *value);
     }
 
     METHOD pop() {
-        PMC *value = VTABLE_pop_pmc(INTERP, SELF);
+        PMC * const value = VTABLE_pop_pmc(INTERP, SELF);
         RETURN(PMC *value);
     }
 

Modified: branches/avl_string_cache/src/pmc/resizablestringarray.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/resizablestringarray.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/resizablestringarray.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -166,7 +166,7 @@
 */
 
     VTABLE INTVAL pop_integer() {
-        PMC *pmcval = SELF.pop_pmc();
+        PMC * const pmcval = SELF.pop_pmc();
         return VTABLE_get_integer(INTERP, pmcval);
     }
 
@@ -181,7 +181,7 @@
 */
 
     VTABLE FLOATVAL pop_float() {
-        PMC *pmcval = SELF.pop_pmc();
+        PMC * const pmcval = SELF.pop_pmc();
         return VTABLE_get_number(INTERP, pmcval);
     }
 
@@ -238,7 +238,7 @@
             INTVAL cur = i;
 
             if (cur < 8192)
-                cur = new_size < 2 * cur ? 2 * cur : new_size;
+                cur = (new_size < 2 * cur) ? (2 * cur) : new_size;
             else {
                 cur = new_size + 4096;
                 cur &= ~0xfff;
@@ -268,7 +268,7 @@
 */
 
     VTABLE PMC *clone() {
-        PMC *copy = SUPER();
+        PMC * const copy = SUPER();
         INTVAL size;
         GET_ATTR_size(interp, SELF, size);
         /* copy trimmed extra space */
@@ -311,8 +311,8 @@
 */
 
     VTABLE PMC *shift_pmc() {
-        STRING *strval = SELF.shift_string();
-        PMC    *value  = Parrot_pmc_new(INTERP, enum_class_String);
+        STRING * const strval = SELF.shift_string();
+        PMC    * const value  = Parrot_pmc_new(INTERP, enum_class_String);
 
         VTABLE_set_string_native(INTERP, value, strval);
 
@@ -330,7 +330,7 @@
 */
 
     VTABLE INTVAL shift_integer() {
-        PMC *pmcval = SELF.shift_pmc();
+        PMC * const pmcval = SELF.shift_pmc();
         return VTABLE_get_integer(INTERP, pmcval);
     }
 
@@ -345,7 +345,7 @@
 */
 
     VTABLE FLOATVAL shift_float() {
-        PMC *pmcval = SELF.shift_pmc();
+        PMC * const pmcval = SELF.shift_pmc();
         return VTABLE_get_number(INTERP, pmcval);
     }
 
@@ -362,7 +362,7 @@
 */
 
     VTABLE void push_pmc(PMC *value) {
-        STRING *strvalue = VTABLE_get_string(INTERP, value);
+        STRING * const strvalue = VTABLE_get_string(INTERP, value);
         SELF.push_string(strvalue);
     }
 
@@ -378,7 +378,7 @@
 */
 
     VTABLE void push_integer(INTVAL value) {
-        PMC    *ret = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC    * const ret = Parrot_pmc_new(INTERP, enum_class_String);
         STRING *val;
 
         VTABLE_set_integer_native(INTERP, ret, value);
@@ -398,7 +398,7 @@
 */
 
     VTABLE void push_float(FLOATVAL value) {
-        PMC    *ret = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC    * const ret = Parrot_pmc_new(INTERP, enum_class_String);
         STRING *val;
 
         VTABLE_set_number_native(INTERP, ret, value);
@@ -474,7 +474,7 @@
 */
 
     VTABLE void unshift_pmc(PMC *value) {
-        STRING *strvalue = VTABLE_get_string(INTERP, value);
+        STRING * const strvalue = VTABLE_get_string(INTERP, value);
         SELF.unshift_string(strvalue);
     }
 
@@ -490,7 +490,7 @@
 */
 
     VTABLE void unshift_integer(INTVAL value) {
-        PMC    *ret = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC    * const ret = Parrot_pmc_new(INTERP, enum_class_String);
         STRING *val;
 
         VTABLE_set_integer_native(INTERP, ret, value);
@@ -510,7 +510,7 @@
 */
 
     VTABLE void unshift_float(FLOATVAL value) {
-        PMC    *ret = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC    * const ret = Parrot_pmc_new(INTERP, enum_class_String);
         STRING *val;
 
         VTABLE_set_number_native(INTERP, ret, value);
@@ -552,7 +552,7 @@
 */
 
     VTABLE void delete_keyed(PMC *key) {
-        INTVAL    idx  = VTABLE_get_integer(INTERP, key);
+        const INTVAL idx = VTABLE_get_integer(INTERP, key);
         STRING  **str_array;
         UINTVAL   size, i;
 
@@ -642,12 +642,12 @@
 */
 
     METHOD shift() {
-        PMC *value = SELF.shift_pmc();
+        PMC * const value = SELF.shift_pmc();
         RETURN(PMC *value);
     }
 
     METHOD pop() {
-        PMC *value = SELF.pop_pmc();
+        PMC * const value = SELF.pop_pmc();
         RETURN(PMC *value);
     }
 
@@ -681,13 +681,6 @@
 
 F<docs/pdds/pdd17_basic_types.pod>.
 
-=head1 HISTORY
-
-Initial version                  - Matt Fowles 2004-06-11
-Changed allocator to double size - Matt Fowles 2004-06-15
-Added push_string                - Bernhard Schmalhofer 2004-10-17
-moved available size to int_val2 - Matt Fowles 2005-07-22
-
 =cut
 
 */

Deleted: branches/avl_string_cache/src/pmc/retcontinuation.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/retcontinuation.pmc	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,118 +0,0 @@
-/*
-Copyright (C) 2001-2008, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/pmc/retcontinuation.pmc - Return Continuation
-
-=head1 DESCRIPTION
-
-C<RetContinuation> extends C<Continuation>.
-
-A return continuation is a one shot Continuation.  It gets recycled immediately
-after invocation.
-
-=head2 Methods
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/oplib/ops.h"
-
-/* HEADERIZER HFILE: none */
-/* HEADERIZER BEGIN: static */
-/* HEADERIZER END: static */
-
-pmclass RetContinuation extends Continuation auto_attrs {
-
-/*
-
-=item C<void init()>
-
-Initializes the continuation.
-
-=cut
-
-*/
-
-    VTABLE void init() {
-        Parrot_RetContinuation_attributes * const attrs = PARROT_RETCONTINUATION(SELF);
-
-        attrs->to_ctx          = CURRENT_CONTEXT(interp);
-        attrs->from_ctx        = PMCNULL;    /* filled in during a call */
-        attrs->runloop_id      = 0;
-        attrs->seg             = interp->code;
-        attrs->address         = NULL;
-    }
-
-
-/*
-
-=item C<PMC *clone>
-
-Return a new Continuation PMC with the context of SELF. Note: the returned
-object is not a RetContinuation and creating a real Continuation invalidates
-all RetContinuation all the way up the call chain.  That is, these can't be
-recycled; they persist until the GC gets at them.
-
-=cut
-
-*/
-    VTABLE PMC *clone() {
-        invalidate_retc_context(INTERP, SELF);
-        return SUPER();
-    }
-/*
-
-=item C<opcode_t *invoke(void *next)>
-
-Transfers control to the calling context and frees the current context.
-
-=cut
-
-*/
-
-    VTABLE opcode_t *invoke(void *in_next) {
-        Parrot_Continuation_attributes *data = PARROT_CONTINUATION(SELF);
-        PMC               *from_ctx   = data->from_ctx;
-        PackFile_ByteCode * const seg = data->seg;
-        opcode_t          *next       = data->address;
-        UNUSED(in_next)
-
-        Parrot_continuation_check(interp, SELF);
-        Parrot_continuation_rewind_environment(interp, SELF);
-
-        /* recycle this PMC and make sure it doesn't get marked */
-        if (!PMC_IS_NULL(from_ctx))
-            Parrot_pcc_set_continuation(interp, from_ctx, NULL);
-
-        if (INTERP->code != seg)
-            Parrot_switch_to_cs(INTERP, seg, 1);
-
-        return next;
-    }
-}
-
-
-/*
-
-=back
-
-=head1 HISTORY
-
-Initial revision by sean 2002/08/04.
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/avl_string_cache/src/pmc/role.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/role.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/role.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -515,7 +515,7 @@
         }
 
         /* Otherwise, copy the stored string name of the class. */
-        return Parrot_str_copy(interp, role->name);
+        return role->name;
     }
 
 /*

Modified: branches/avl_string_cache/src/pmc/scalar.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/scalar.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/scalar.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -632,7 +632,7 @@
 
     VTABLE PMC *concatenate(PMC *value, PMC *dest) {
         STRING * const s = Parrot_str_concat(INTERP, SELF.get_string(),
-            VTABLE_get_string(INTERP, value), 0);
+            VTABLE_get_string(INTERP, value));
 
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
@@ -642,7 +642,7 @@
 
     VTABLE PMC *concatenate_str(STRING *value, PMC *dest) {
         STRING * const s = Parrot_str_concat(INTERP,
-            SELF.get_string(), value, 0);
+            SELF.get_string(), value);
 
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
@@ -653,12 +653,12 @@
     VTABLE void i_concatenate(PMC *value) {
         STRING * const s = SELF.get_string();
         STRING * const v = VTABLE_get_string(INTERP, value);
-        SELF.set_string_native(Parrot_str_append(INTERP, s, v));
+        SELF.set_string_native(Parrot_str_concat(INTERP, s, v));
     }
 
     VTABLE void i_concatenate_str(STRING *value) {
         STRING * const s = SELF.get_string();
-        SELF.set_string_native(Parrot_str_append(INTERP, s, value));
+        SELF.set_string_native(Parrot_str_concat(INTERP, s, value));
     }
 
 /*
@@ -924,7 +924,7 @@
 
     VTABLE STRING *substr_str(INTVAL offset, INTVAL length) {
         return Parrot_str_substr(INTERP, VTABLE_get_string(INTERP, SELF),
-            offset, length, NULL, 0);
+                offset, length);
     }
 
 /*

Modified: branches/avl_string_cache/src/pmc/schedulermessage.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/schedulermessage.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/schedulermessage.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -114,7 +114,10 @@
 */
 
     VTABLE INTVAL get_integer() {
-        Parrot_SchedulerMessage_attributes * core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        const Parrot_SchedulerMessage_attributes * const
+            core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        UNUSED(interp);
+
         return core_struct->id;
     }
 
@@ -129,7 +132,8 @@
 */
 
     VTABLE void set_integer_native(INTVAL value) {
-        Parrot_SchedulerMessage_attributes * core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        Parrot_SchedulerMessage_attributes * const core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        UNUSED(interp);
         core_struct->id = value;
     }
 
@@ -145,7 +149,9 @@
 */
 
     STRING *  get_string() {
-        Parrot_SchedulerMessage_attributes * core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        const Parrot_SchedulerMessage_attributes * const core_struct =
+            PARROT_SCHEDULERMESSAGE(SELF);
+        UNUSED(interp);
         return core_struct->type;
     }
 
@@ -160,7 +166,8 @@
 */
 
     VTABLE void set_string_native(STRING *value) {
-        Parrot_SchedulerMessage_attributes * core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        Parrot_SchedulerMessage_attributes * const core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        UNUSED(interp);
         core_struct->type = value;
     }
 

Modified: branches/avl_string_cache/src/pmc/string.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/string.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/string.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -38,7 +38,7 @@
 */
 
     VTABLE void init() {
-        STRING *str_val = STRINGNULL;
+        STRING * const str_val = STRINGNULL;
         SET_ATTR_str_val(INTERP, SELF, str_val);
 
         PObj_custom_mark_SET(SELF);
@@ -125,8 +125,7 @@
     VTABLE STRING *get_string() {
         STRING *str_val;
         GET_ATTR_str_val(INTERP, SELF, str_val);
-
-        return str_val ? Parrot_str_copy(INTERP, str_val) : NULL;
+        return str_val;
     }
 
 /*
@@ -191,7 +190,7 @@
 */
 
     VTABLE void set_string_native(STRING *value) {
-        if (!value)
+        if (value == NULL)
             value = STRINGNULL;
 
         /* Only allow constant PMCs to embed constant strings */
@@ -217,12 +216,7 @@
 */
 
     VTABLE void assign_string_native(STRING *value) {
-        if (!STRING_IS_NULL(value)) {
-            SET_ATTR_str_val(INTERP, SELF,
-                Parrot_str_set(INTERP, SELF.get_string(), value));
-        }
-        else
-            SET_ATTR_str_val(INTERP, SELF, NULL);
+        SET_ATTR_str_val(INTERP, SELF, value);
     }
 
 /*
@@ -375,7 +369,7 @@
     VTABLE void substr(INTVAL offset, INTVAL length, PMC *dest) {
         STRING *str_val, *s2;
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        s2 = Parrot_str_substr(INTERP, str_val, offset, length, NULL, 0);
+        s2 = Parrot_str_substr(INTERP, str_val, offset, length);
         VTABLE_set_string_native(INTERP, dest, s2);
     }
 
@@ -392,7 +386,7 @@
     VTABLE STRING *substr_str(INTVAL offset, INTVAL length) {
         STRING *str_val;
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        return Parrot_str_substr(INTERP, str_val, offset, length, NULL, 0);
+        return Parrot_str_substr(INTERP, str_val, offset, length);
     }
 
 /*
@@ -447,7 +441,7 @@
     VTABLE STRING *get_string_keyed_int(INTVAL pos) {
         STRING      *str_val;
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        return Parrot_str_substr(INTERP, str_val, pos, 1, NULL, 0);
+        return Parrot_str_substr(INTERP, str_val, pos, 1);
     }
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
@@ -478,7 +472,8 @@
         STRING      *str_val;
         const INTVAL len = Parrot_str_byte_length(INTERP, value);
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        Parrot_str_replace(INTERP, str_val, pos, len, value, &str_val);
+        str_val = Parrot_str_replace(INTERP, str_val, pos, len, value);
+        SET_ATTR_str_val(INTERP, SELF, str_val);
     }
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
@@ -489,7 +484,8 @@
         STRING      *str_val;
         STRING * const c = string_chr(INTERP, (UINTVAL) value);
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        Parrot_str_replace(INTERP, str_val, pos, 1, c, &str_val);
+        str_val = Parrot_str_replace(INTERP, str_val, pos, 1, c);
+        SET_ATTR_str_val(INTERP, SELF, str_val);
     }
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
@@ -512,11 +508,11 @@
     METHOD replace(STRING *orig, STRING *_new) {
         const INTVAL   old_len = Parrot_str_byte_length(INTERP, orig);
         const INTVAL   new_len = Parrot_str_byte_length(INTERP, _new);
-        STRING * const s       = VTABLE_get_string(INTERP, SELF);
+        STRING       * s       = VTABLE_get_string(INTERP, SELF);
         INTVAL         i       = 0;
 
         while (-1 != (i = Parrot_str_find_index(INTERP, s, orig, i))) {
-            (void)Parrot_str_replace(INTERP, s, i, old_len, _new, NULL);
+            s = Parrot_str_replace(INTERP, s, i, old_len, _new);
             i += new_len;
         }
 
@@ -540,7 +536,7 @@
 */
 
     METHOD to_int(INTVAL base) {
-        PMC *result = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(interp,
+        PMC * const result = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(interp,
                         enum_class_Integer));
 
         /* TODO verify encoding */
@@ -575,7 +571,7 @@
         }
 
         if (j < len) {
-            char ch = str[j];
+            const char ch = str[j];
             Parrot_str_free_cstring(str);
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                     "invalid conversion to int - bad char %c", ch);
@@ -703,7 +699,7 @@
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
                 "Can't translate non-ascii");
 
-        p = (unsigned char *)Buffer_bufstart(src);
+        p = (unsigned char *)(src->strstart);
         /* TODO verify trans table */
 
         GETATTR_FixedIntegerArray_int_array(INTERP, table, tr_data);

Modified: branches/avl_string_cache/src/pmc/stringhandle.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/stringhandle.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/stringhandle.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -110,11 +110,11 @@
         Parrot_StringHandle_attributes * const data_struct = PARROT_STRINGHANDLE(copy);
 
         if (old_struct->stringhandle != NULL)
-            data_struct->stringhandle = Parrot_str_copy(INTERP, old_struct->stringhandle);
+            data_struct->stringhandle = old_struct->stringhandle;
         if (old_struct->mode != NULL)
-            data_struct->mode     = Parrot_str_copy(INTERP, old_struct->mode);
+            data_struct->mode     = old_struct->mode;
         if (old_struct->encoding != NULL)
-            data_struct->encoding = Parrot_str_copy(INTERP, old_struct->encoding);
+            data_struct->encoding = old_struct->encoding;
         data_struct->flags    = old_struct->flags;
 
         return copy;
@@ -182,10 +182,10 @@
         INTVAL flags;
 
         if (got_mode && !STRING_IS_NULL(mode))
-            SET_ATTR_mode(INTERP, SELF, Parrot_str_copy(INTERP, mode));
+            SET_ATTR_mode(INTERP, SELF, mode);
 
         if (got_filename && !STRING_IS_NULL(filename))
-            SET_ATTR_filename(INTERP, SELF, Parrot_str_copy(INTERP, filename));
+            SET_ATTR_filename(INTERP, SELF, filename);
 
 
         /* If StringHandle hasn't already been initialized, create a new string. */
@@ -317,8 +317,6 @@
             else
                 string_result = Parrot_str_new_constant(INTERP, "");
         }
-        else
-            string_result = Parrot_str_copy(INTERP, string_result);
 
         RETURN(STRING *string_result);
     }
@@ -378,7 +376,7 @@
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
                 "Cannot write to a filehandle not opened for write");
 
-        new_string = Parrot_str_append(interp, old_string, to_print);
+        new_string = Parrot_str_concat(interp, old_string, to_print);
 
         SET_ATTR_stringhandle(INTERP, SELF, new_string);
 
@@ -464,13 +462,9 @@
 */
 
     METHOD mode() {
-        STRING *mode, *mode_copy;
-
+        STRING *mode;
         GET_ATTR_mode(INTERP, SELF, mode);
-        mode_copy = Parrot_str_copy(INTERP, mode);
-
-        RETURN(STRING *mode_copy);
-
+        RETURN(STRING *mode);
     }
 
 /*
@@ -486,21 +480,14 @@
 
     METHOD encoding(STRING *new_encoding :optional, INTVAL got_encoding :opt_flag) {
         STRING *encoding;
-        STRING *encoding_copy = NULL;
 
         if (got_encoding) {
-            if (!STRING_IS_NULL(new_encoding))
-                encoding_copy = Parrot_str_copy(INTERP, new_encoding);
-            SET_ATTR_encoding(INTERP, SELF, encoding_copy);
+            SET_ATTR_encoding(INTERP, SELF, new_encoding);
             RETURN(STRING *new_encoding);
         }
 
         GET_ATTR_encoding(INTERP, SELF, encoding);
-        if (!STRING_IS_NULL(encoding))
-            encoding_copy = Parrot_str_copy(INTERP, encoding);
-
-        RETURN(STRING *encoding_copy);
-
+        RETURN(STRING *encoding);
     }
 
 /*

Modified: branches/avl_string_cache/src/pmc/sub.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/sub.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/sub.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -252,20 +252,14 @@
 */
 
     VTABLE STRING *get_string() {
-        Parrot_Sub_attributes *sub;
-        PMC_get_sub(INTERP, SELF, sub);
-
-        if (sub->name)
-            return Parrot_str_copy(INTERP, sub->name);
-
-        return NULL;
+        STRING *name;
+        GET_ATTR_name(INTERP, SELF, name);
+        return name;
     }
 
 
     VTABLE void set_string_native(STRING *subname) {
-        Parrot_Sub_attributes *sub;
-        PMC_get_sub(INTERP, SELF, sub);
-        sub->name = Parrot_str_copy(INTERP, subname);
+        SET_ATTR_name(INTERP, SELF, subname);
     }
 
 
@@ -398,8 +392,10 @@
         pc                   = sub->seg->base.data + sub->start_offs;
         INTERP->current_cont = NULL;
 
-        if (ccont == NEED_CONTINUATION)
-            ccont = new_ret_continuation_pmc(interp, (opcode_t *)next);
+        if (ccont == NEED_CONTINUATION) {
+            ccont = pmc_new(interp, enum_class_Continuation);
+            VTABLE_set_pointer(interp, ccont, next);
+        }
 
         PARROT_ASSERT(!PMC_IS_NULL(ccont));
 
@@ -427,12 +423,9 @@
         PARROT_CONTINUATION(ccont)->from_ctx = context;
 
         /* if this is an outer sub, then we need to set sub->ctx
-         * to the new context (refcounted) and convert the
-         * retcontinuation to a normal continuation.  */
+         * to the new context (refcounted) */
         if (PObj_get_FLAGS(SELF) & SUB_FLAG_IS_OUTER) {
             sub->ctx = context;
-            /* convert retcontinuation to a continuation */
-            ccont->vtable = interp->vtables[enum_class_Continuation];
         }
 
         /* create pad if needed
@@ -528,9 +521,6 @@
         /* first set the sub struct, Parrot_str_copy may cause GC */
         *sub = *dest_sub;
 
-        if (sub->name)
-            sub->name = Parrot_str_copy(INTERP, sub->name);
-
         /* Be sure not to share arg_info. */
         dest_sub->arg_info = NULL;
 
@@ -563,10 +553,6 @@
 
             /* copy the sub struct */
             memmove(my_sub, other_sub, sizeof (Parrot_Sub_attributes));
-
-            /* copy the name so it's a different string in memory */
-            if (my_sub->name)
-                my_sub->name = Parrot_str_copy(INTERP, my_sub->name);
         }
         else
             Parrot_ex_throw_from_c_args(INTERP, NULL,

Modified: branches/avl_string_cache/src/pmc/unmanagedstruct.pmc
==============================================================================
--- branches/avl_string_cache/src/pmc/unmanagedstruct.pmc	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc/unmanagedstruct.pmc	Thu Apr 22 09:55:26 2010	(r45889)
@@ -36,8 +36,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-static size_t calc_offsets(PARROT_INTERP,
+static void calc_offsets(PARROT_INTERP,
     ARGIN(PMC *pmc),
     ARGIN(PMC *value),
     size_t toff)
@@ -50,7 +49,7 @@
 static char * char_offset_int(PARROT_INTERP,
     ARGIN(PMC *pmc),
     INTVAL ix,
-    ARGMOD(int *type))
+    ARGOUT(int *type))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(4)
@@ -61,7 +60,7 @@
 static char * char_offset_key(PARROT_INTERP,
     ARGIN(PMC *pmc),
     ARGIN(PMC *key),
-    ARGMOD(int *type))
+    ARGOUT(int *type))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
@@ -181,7 +180,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static char *
-char_offset_int(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL ix, ARGMOD(int *type))
+char_offset_int(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL ix, ARGOUT(int *type))
 {
     ASSERT_ARGS(char_offset_int)
     size_t offs, n;
@@ -271,7 +270,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static char *
-char_offset_key(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(PMC *key), ARGMOD(int *type))
+char_offset_key(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(PMC *key), ARGOUT(int *type))
 {
     ASSERT_ARGS(char_offset_key)
     size_t offs, count, size, max;
@@ -723,7 +722,7 @@
 
 /*
 
-=item C<static size_t calc_offsets(PARROT_INTERP, PMC *pmc, PMC *value, size_t
+=item C<static void calc_offsets(PARROT_INTERP, PMC *pmc, PMC *value, size_t
 toff)>
 
 Calculates the offsets for the C<struct>. See C<init_pmc()> for a description
@@ -733,8 +732,7 @@
 
 */
 
-PARROT_WARN_UNUSED_RESULT
-static size_t
+static void
 calc_offsets(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(PMC *value), size_t toff)
 {
     ASSERT_ARGS(calc_offsets)
@@ -794,8 +792,6 @@
         if (i == n - 3)
             VTABLE_set_integer_native(interp, pmc, (INTVAL)toff);
     }
-
-    return toff;
 }
 
 pmclass UnManagedStruct auto_attrs no_ro {
@@ -852,7 +848,8 @@
 */
 
     VTABLE PMC *clone() {
-        PMC *clone = Parrot_pmc_new(INTERP, enum_class_UnManagedStruct);
+        PMC * const clone = Parrot_pmc_new(INTERP, enum_class_UnManagedStruct);
+
         mem_sys_memmove(PMC_data(clone), PMC_data(SELF),
                 sizeof (Parrot_UnManagedStruct_attributes));
         PARROT_UNMANAGEDSTRUCT(clone)->init =
@@ -887,7 +884,7 @@
 */
 
     VTABLE void mark() {
-        PMC *init = PARROT_UNMANAGEDSTRUCT(SELF)->init;
+        PMC * const init = PARROT_UNMANAGEDSTRUCT(SELF)->init;
         Parrot_gc_mark_PMC_alive(INTERP, init);
     }
 
@@ -976,7 +973,7 @@
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, pmc, key, &type);
         return ret_int(INTERP, p, type);
     }
 
@@ -992,7 +989,7 @@
 
     VTABLE FLOATVAL get_number_keyed_int(INTVAL key) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
+        char * const p = char_offset_int(INTERP, pmc, key, &type);
         return ret_float(INTERP, p, type);
     }
 
@@ -1008,7 +1005,7 @@
 
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, pmc, key, &type);
         return ret_float(INTERP, p, type);
     }
 
@@ -1056,7 +1053,7 @@
 
     VTABLE PMC *get_pmc_keyed_int(INTVAL key) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
+        char * const p = char_offset_int(INTERP, pmc, key, &type);
         return ret_pmc(INTERP, pmc, p, type, key);
     }
 
@@ -1072,7 +1069,7 @@
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, pmc, key, &type);
         return ret_pmc(INTERP, pmc, p, type, key_2_idx(INTERP, pmc, key));
     }
 
@@ -1116,7 +1113,7 @@
 
     VTABLE void set_integer_keyed_int(INTVAL ix, INTVAL value) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, ix, &type);
+        char * const p = char_offset_int(INTERP, pmc, ix, &type);
         set_int(INTERP, p, type, value);
     }
 
@@ -1134,7 +1131,7 @@
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, pmc, key, &type);
         set_int(INTERP, p, type, value);
     }
 
@@ -1150,7 +1147,7 @@
 
     VTABLE void set_number_keyed_int(INTVAL key, FLOATVAL value) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
+        char * const p = char_offset_int(INTERP, pmc, key, &type);
         set_float(INTERP, p, type, value);
     }
 
@@ -1166,7 +1163,7 @@
 
     VTABLE void set_number_keyed(PMC *key, FLOATVAL value) {
         int type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, pmc, key, &type);
         set_float(INTERP, p, type, value);
     }
 
@@ -1182,7 +1179,7 @@
 
     VTABLE void set_string_keyed_int(INTVAL key, STRING *value) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
+        char * const p = char_offset_int(INTERP, pmc, key, &type);
         set_string(INTERP, p, type, value);
     }
 
@@ -1198,7 +1195,7 @@
 
     VTABLE void set_string_keyed(PMC *key, STRING *value) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, pmc, key, &type);
         set_string(INTERP, p, type, value);
     }
 
@@ -1208,10 +1205,6 @@
 
 =back
 
-=head1 HISTORY
-
-Initial revision by sean 2002/08/04
-
 =head1 SEE ALSO
 
 F<docs/pmc/struct.pod>

Modified: branches/avl_string_cache/src/pmc_freeze.c
==============================================================================
--- branches/avl_string_cache/src/pmc_freeze.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/pmc_freeze.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -54,7 +54,7 @@
 Parrot_freeze(PARROT_INTERP, ARGIN(PMC *pmc))
 {
     ASSERT_ARGS(Parrot_freeze)
-    PMC *image = Parrot_pmc_new(interp, enum_class_ImageIO);
+    PMC * const image = Parrot_pmc_new(interp, enum_class_ImageIO);
     VTABLE_set_pmc(interp, image, pmc);
     return VTABLE_get_string(interp, image);
 }
@@ -80,7 +80,7 @@
     ASSERT_ARGS(Parrot_freeze_size)
     UINTVAL int_result;
     PMC    *pmc_result;
-    PMC    *visitor = Parrot_pmc_new(interp, enum_class_ImageIOSize);
+    PMC    * const visitor = Parrot_pmc_new(interp, enum_class_ImageIOSize);
     VTABLE_set_pmc(interp, visitor, pmc);
     pmc_result = VTABLE_get_pmc(interp, visitor);
     int_result = VTABLE_get_integer(interp, pmc_result);
@@ -112,7 +112,7 @@
 {
     ASSERT_ARGS(Parrot_thaw)
 
-    PMC        *info     = Parrot_pmc_new(interp, enum_class_ImageIO);
+    PMC * const info = Parrot_pmc_new(interp, enum_class_ImageIO);
     int         gc_block = 0;
     PMC        *result;
 
@@ -199,7 +199,8 @@
 */
 
 void
-Parrot_visit_loop_visit(PARROT_INTERP, ARGIN(PMC *info)) {
+Parrot_visit_loop_visit(PARROT_INTERP, ARGIN(PMC *info))
+{
     ASSERT_ARGS(Parrot_visit_loop_visit)
 
     INTVAL      i;
@@ -207,7 +208,7 @@
 
     /* can't cache upper limit, visit may append items */
     for (i = 0; i < VTABLE_elements(interp, todo); i++) {
-        PMC *current = VTABLE_get_pmc_keyed_int(interp, todo, i);
+        PMC * const current = VTABLE_get_pmc_keyed_int(interp, todo, i);
         if (!current)
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "NULL current PMC in visit_loop_todo_list");
@@ -231,7 +232,8 @@
 */
 
 void
-Parrot_visit_loop_thawfinish(PARROT_INTERP, ARGIN(PMC *info)) {
+Parrot_visit_loop_thawfinish(PARROT_INTERP, ARGIN(PMC *info))
+{
     ASSERT_ARGS(Parrot_visit_loop_thawfinish)
 
     /* call thawfinish for each processed PMC */
@@ -267,10 +269,6 @@
 
 Lot of discussion on p6i and F<docs/dev/pmc_freeze.pod>.
 
-=head1 HISTORY
-
-Initial version by leo 2003.11.03 - 2003.11.07.
-
 =cut
 
 */

Modified: branches/avl_string_cache/src/runcore/cores.c
==============================================================================
--- branches/avl_string_cache/src/runcore/cores.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/runcore/cores.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -272,10 +272,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t * runops_cgoto_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
+    SHIM(Parrot_runcore_t *runcore),
     ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
@@ -290,10 +289,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t * runops_debugger_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
+    SHIM(Parrot_runcore_t *runcore),
     ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
@@ -308,28 +306,25 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t * runops_fast_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
+    SHIM(Parrot_runcore_t *runcore),
     ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t * runops_gc_debug_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
+    SHIM(Parrot_runcore_t *runcore),
     ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t * runops_slow_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
+    SHIM(Parrot_runcore_t *runcore),
     ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
@@ -343,16 +338,12 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-static opcode_t * runops_trace_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
-    ARGIN(opcode_t *pc))
+static opcode_t * runops_trace_core(PARROT_INTERP, ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(2);
 
 #define ASSERT_ARGS_runops_cgoto_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_cgp_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -360,7 +351,6 @@
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_debugger_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_exec_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -368,15 +358,12 @@
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_fast_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_gc_debug_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_slow_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_switch_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -384,7 +371,6 @@
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_trace_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
@@ -405,7 +391,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_slow_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "slow");
     coredata->id               = PARROT_SLOW_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
@@ -435,7 +421,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_fast_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "fast");
     coredata->id               = PARROT_FAST_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
@@ -465,7 +451,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_switch_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "switch");
     coredata->id               = PARROT_SWITCH_CORE;
     coredata->opinit           = PARROT_CORE_SWITCH_OPLIB_INIT;
@@ -495,7 +481,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_exec_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "exec");
     coredata->id               = PARROT_EXEC_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
@@ -523,7 +509,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_gc_debug_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "gc_debug");
     coredata->id               = PARROT_GC_DEBUG_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
@@ -553,7 +539,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_debugger_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "debugger");
     coredata->id               = PARROT_DEBUGGER_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
@@ -585,7 +571,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_cgp_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "cgp");
     coredata->id               = PARROT_CGP_CORE;
     coredata->opinit           = PARROT_CORE_CGP_OPLIB_INIT;
@@ -618,7 +604,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_cgoto_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "cgoto");
     coredata->id               = PARROT_CGOTO_CORE;
     coredata->opinit           = PARROT_CORE_CG_OPLIB_INIT;
@@ -652,7 +638,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_fast_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_fast_core(PARROT_INTERP, SHIM(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_fast_core)
 
@@ -692,7 +678,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_cgoto_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_cgoto_core(PARROT_INTERP, SHIM(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_cgoto_core)
 
@@ -724,8 +710,7 @@
 
 /*
 
-=item C<static opcode_t * runops_trace_core(PARROT_INTERP, Parrot_runcore_t
-*runcore, opcode_t *pc)>
+=item C<static opcode_t * runops_trace_core(PARROT_INTERP, opcode_t *pc)>
 
 Runs the Parrot operations starting at C<pc> until there are no more
 operations, using the tracing interpreter.
@@ -737,7 +722,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_trace_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_trace_core(PARROT_INTERP, ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_trace_core)
 
@@ -827,12 +812,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_slow_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_slow_core(PARROT_INTERP, SHIM(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_slow_core)
 
     if (Interp_trace_TEST(interp, PARROT_TRACE_OPS_FLAG))
-        return runops_trace_core(interp, runcore, pc);
+        return runops_trace_core(interp, pc);
 #if 0
     if (interp->debugger && interp->debugger->pdb)
         return Parrot_debug(interp, interp->debugger, pc);
@@ -868,7 +853,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_gc_debug_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_gc_debug_core(PARROT_INTERP, SHIM(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_gc_debug_core)
     while (pc) {
@@ -903,7 +888,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_debugger_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_debugger_core(PARROT_INTERP, SHIM(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_debugger_core)
 
@@ -1016,8 +1001,8 @@
         }
 
         for (i = 0; i < N;) {
-            op_info_t * const opinfo = &interp->op_info_table[*pc];
-            size_t            n      = opinfo->op_count;
+            const op_info_t * const opinfo = &interp->op_info_table[*pc];
+            size_t n = opinfo->op_count;
 
             temp[i] = pred_func;
 
@@ -1079,7 +1064,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 oplib_init_f
-get_core_op_lib_init(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore))
+get_core_op_lib_init(SHIM_INTERP, ARGIN(Parrot_runcore_t *runcore))
 {
     ASSERT_ARGS(get_core_op_lib_init)
     return runcore->opinit;
@@ -1105,6 +1090,7 @@
     ASSERT_ARGS(runops_exec_core)
 
     UNUSED(interp);
+    UNUSED(runcore);
     UNUSED(pc);
 
     return NULL;

Modified: branches/avl_string_cache/src/runcore/main.c
==============================================================================
--- branches/avl_string_cache/src/runcore/main.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/runcore/main.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -397,13 +397,15 @@
 Parrot_runcore_destroy(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_runcore_destroy)
+#ifdef HAVE_COMPUTED_GOTO
     op_lib_t         *cg_lib;
+#endif
     size_t            num_cores = interp->num_cores;
     size_t            i;
 
     for (i = 0; i < num_cores; ++i) {
-        Parrot_runcore_t        *core    = interp->cores[i];
-        runcore_destroy_fn_type  destroy = core->destroy;
+        Parrot_runcore_t * const core = interp->cores[i];
+        const runcore_destroy_fn_type destroy = core->destroy;
 
         if (destroy)
             (*destroy)(interp, core);
@@ -457,6 +459,7 @@
 
 */
 
+PARROT_EXPORT
 void
 dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
 {
@@ -577,6 +580,8 @@
 
 */
 
+#ifdef HAVE_COMPUTED_GOTO
+
 static void
 dynop_register_xx(PARROT_INTERP,
         size_t n_old, size_t n_new, oplib_init_f init_func)
@@ -586,13 +591,13 @@
     op_func_t   *ops_addr = NULL;
     op_lib_t    *cg_lib   = init_func(interp, 1);
 
-#if 0
+#  if 0
     /* related to CG and CGP ops issue below */
     op_lib_t    *new_lib;
     STRING *op_variant;
     oplib_init_f new_init_func;
     PMC *lib_variant;
-#endif
+#  endif
 
     if (cg_lib->flags & OP_FUNC_IS_ALLOCATED) {
         ops_addr = mem_gc_realloc_n_typed_zeroed(interp,
@@ -627,7 +632,7 @@
      *  compiled big switch statement with the new cases. We have
      *  always to use the wrapper__ opcode called from the default case.
      */
-#if 0
+#  if 0
     /* check if the lib_pmc exists with a _xx flavor */
     new_init_func = get_op_lib_init(0, 0, lib_pmc);
     new_lib       = new_init_func(1);
@@ -651,7 +656,7 @@
         new_init_func((long) ops_addr);
     }
     else
-#endif
+#  endif
     {
         size_t i;
 
@@ -677,6 +682,8 @@
     init_func(interp, (long) ops_addr);
 }
 
+#endif
+
 
 /*
 

Modified: branches/avl_string_cache/src/runcore/profiling.c
==============================================================================
--- branches/avl_string_cache/src/runcore/profiling.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/runcore/profiling.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -387,12 +387,12 @@
                 i++;
                 i++; /* the root namespace has an empty name, so ignore it */
                 for (;i < MAX_NS_DEPTH; i++) {
-                    full_ns = Parrot_str_concat(interp, full_ns, ns_names[i], 0);
-                    full_ns = Parrot_str_concat(interp, full_ns, ns_separator, 0);
+                    full_ns = Parrot_str_concat(interp, full_ns, ns_names[i]);
+                    full_ns = Parrot_str_concat(interp, full_ns, ns_separator);
                 }
 
                 GETATTR_Sub_name(interp, preop_ctx->current_sub, sub_name);
-                full_ns = Parrot_str_concat(interp, full_ns, sub_name, 0);
+                full_ns = Parrot_str_concat(interp, full_ns, sub_name);
                 full_ns_cstr = Parrot_str_to_cstring(interp, full_ns);
 
                 pprof_data[PPROF_DATA_NAMESPACE] = (PPROF_DATA) full_ns_cstr;

Modified: branches/avl_string_cache/src/runcore/trace.c
==============================================================================
--- branches/avl_string_cache/src/runcore/trace.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/runcore/trace.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -80,18 +80,18 @@
 trace_class_name(PARROT_INTERP, ARGIN(const PMC* pmc))
 {
     ASSERT_ARGS(trace_class_name)
-    STRING *class_name;
+
     if (PObj_is_class_TEST(pmc)) {
-        SLOTTYPE * const class_array = (SLOTTYPE *)PMC_data(pmc);
-        PMC * const class_name_pmc = get_attrib_num(class_array,
+        SLOTTYPE * const class_array    = PMC_data_typed(pmc, SLOTTYPE *);
+        PMC      * const class_name_pmc = get_attrib_num(class_array,
                                                     PCD_CLASS_NAME);
-        class_name = VTABLE_get_string(interp, class_name_pmc);
+        return VTABLE_get_string(interp, class_name_pmc);
     }
     else
-        class_name = pmc->vtable->whoami;
-    return class_name;
+        return pmc->vtable->whoami;
 }
 
+
 /*
 
 =item C<void trace_pmc_dump(PARROT_INTERP, PMC *pmc)>
@@ -113,17 +113,21 @@
         Parrot_io_eprintf(debugger, "(null)");
         return;
     }
+
     if (PMC_IS_NULL(pmc))  {
         Parrot_io_eprintf(debugger, "PMCNULL");
         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 (PObj_on_free_list_TEST(pmc))
+        Parrot_io_eprintf(debugger,
+            "**************** PMC is on free list *****\n");
+
     if (pmc->vtable->pmc_class == pmc) {
         STRING * const name = trace_class_name(interp, pmc);
         Parrot_io_eprintf(debugger, "Class=%Ss:PMC(%#p)", name, pmc);
@@ -134,25 +138,23 @@
             Parrot_io_eprintf(debugger, "%S=PMC(%#p Str:(NULL))",
                     VTABLE_name(interp, pmc), pmc);
         else {
-            STRING* const escaped = Parrot_str_escape_truncate(
-                            interp, s, 20);
+            STRING * const escaped = Parrot_str_escape_truncate(interp, s, 20);
             if (escaped)
                 Parrot_io_eprintf(debugger, "%S=PMC(%#p Str:\"%Ss\")",
-                    VTABLE_name(interp, pmc), pmc,
-                    escaped);
+                    VTABLE_name(interp, pmc), pmc, escaped);
             else
                 Parrot_io_eprintf(debugger, "%S=PMC(%#p Str:\"(null)\")",
                     VTABLE_name(interp, pmc), pmc);
         }
     }
-    else if (pmc->vtable->base_type == enum_class_Boolean) {
+    else if (pmc->vtable->base_type == enum_class_Boolean)
         Parrot_io_eprintf(debugger, "Boolean=PMC(%#p: %d)",
                 pmc, VTABLE_get_integer(interp, pmc));
-    }
-    else if (pmc->vtable->base_type == enum_class_Integer) {
+
+    else if (pmc->vtable->base_type == enum_class_Integer)
         Parrot_io_eprintf(debugger, "Integer=PMC(%#p: %d)",
                 pmc, VTABLE_get_integer(interp, pmc));
-    }
+
     else if (pmc->vtable->base_type == enum_class_BigInt) {
         STRING * const s = VTABLE_get_string(interp, pmc);
         Parrot_io_eprintf(debugger, "BigInt=PMC(%#p: %Ss)",
@@ -160,8 +162,7 @@
     }
     else if (pmc->vtable->base_type == enum_class_Complex) {
         STRING * const s = VTABLE_get_string(interp, pmc);
-        Parrot_io_eprintf(debugger, "Complex=PMC(%#p: %Ss)",
-                pmc, s);
+        Parrot_io_eprintf(debugger, "Complex=PMC(%#p: %Ss)", pmc, s);
     }
     else if (pmc->vtable->base_type == enum_class_Sub) {
         PMC_get_sub(interp, pmc, sub);
@@ -178,6 +179,7 @@
     }
 }
 
+
 /*
 
 =item C<int trace_key_dump(PARROT_INTERP, PMC *key)>
@@ -199,16 +201,18 @@
     while (key) {
         switch (PObj_get_FLAGS(key) & KEY_type_FLAGS) {
           case KEY_integer_FLAG:
-            len += Parrot_io_eprintf(debugger, "%vi", VTABLE_get_integer(interp, key));
+              len += Parrot_io_eprintf(debugger, "%vi",
+                 VTABLE_get_integer(interp, key));
             break;
           case KEY_number_FLAG:
-            len += Parrot_io_eprintf(debugger, "%vg", VTABLE_get_number(interp, key));
+              len += Parrot_io_eprintf(debugger, "%vg",
+                  VTABLE_get_number(interp, key));
             break;
           case KEY_string_FLAG:
             {
             const STRING * const s = key_string(interp, key);
-            STRING* const escaped = Parrot_str_escape_truncate(
-                            interp, s, 20);
+            STRING * const escaped = Parrot_str_escape_truncate(interp, s, 20);
+
             if (escaped)
                 len += Parrot_io_eprintf(debugger, "\"%Ss\"", escaped);
             else
@@ -216,33 +220,37 @@
             }
             break;
           case KEY_integer_FLAG|KEY_register_FLAG:
-            len += Parrot_io_eprintf(debugger, "I%vd=%vd", VTABLE_get_integer(interp, key),
+              len += Parrot_io_eprintf(debugger, "I%vd=%vd",
+                  VTABLE_get_integer(interp, key),
                     REG_INT(interp, VTABLE_get_integer(interp, key)));
             break;
           case KEY_number_FLAG|KEY_register_FLAG:
-            len += Parrot_io_eprintf(debugger, "I%vd=%vd", VTABLE_get_integer(interp, key),
+              len += Parrot_io_eprintf(debugger, "I%vd=%vd",
+                  VTABLE_get_integer(interp, key),
                     REG_NUM(interp, VTABLE_get_integer(interp, key)));
             break;
           case KEY_string_FLAG|KEY_register_FLAG:
             {
-            const STRING * const s = REG_STR(interp, VTABLE_get_integer(interp, key));
-            STRING* const escaped = Parrot_str_escape_truncate(
-                            interp, s, 20);
+            const STRING * const s = REG_STR(interp,
+                 VTABLE_get_integer(interp, key));
+            STRING * const escaped = Parrot_str_escape_truncate(interp, s, 20);
             if (escaped)
-                len += Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"", VTABLE_get_integer(interp, key),
-                        escaped);
+                len += Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"",
+                    VTABLE_get_integer(interp, key), escaped);
             else
                 len += Parrot_io_eprintf(debugger, "S%vd=\"(null)\"",
                         VTABLE_get_integer(interp, key));
             }
             break;
           case KEY_pmc_FLAG|KEY_register_FLAG:
-            len += Parrot_io_eprintf(debugger, "P%vd=", VTABLE_get_integer(interp, key));
-            trace_pmc_dump(debugger, REG_PMC(interp, VTABLE_get_integer(interp, key)));
+              len += Parrot_io_eprintf(debugger, "P%vd=",
+                  VTABLE_get_integer(interp, key));
+              trace_pmc_dump(debugger, REG_PMC(interp,
+                  VTABLE_get_integer(interp, key)));
             break;
           default:
             len += Parrot_io_eprintf(debugger, "??");
-            key = NULL;
+            key  = NULL;
             break;
         }
 
@@ -251,12 +259,13 @@
             if (key)
                 len += Parrot_io_eprintf(debugger, ";");
         }
-    } /* while */
+    }
 
     len += Parrot_io_eprintf(debugger, "]");
     return len;
 }
 
+
 /*
 
 =item C<void trace_op_dump(PARROT_INTERP, const opcode_t *code_start, const
@@ -276,29 +285,23 @@
         ARGIN(const opcode_t *pc))
 {
     ASSERT_ARGS(trace_op_dump)
-    INTVAL s, n;
-    int more = 0, var_args;
-    Interp * const debugger = debugger_or_interp(interp);
-    op_info_t * const info = &interp->op_info_table[*pc];
-    PMC *sig;
-    int type;
-    int len;
-#define ARGS_COLUMN 40
+    Interp    * const debugger = debugger_or_interp(interp);
+    op_info_t * const info     = &interp->op_info_table[*pc];
+    PMC *sig                   = PMCNULL;
+    INTVAL n                   = info->op_count;
+    INTVAL s                   = 1;
+    int more                   = 0, type;
+    int var_args               = 0;
 
-    PARROT_ASSERT(debugger);
-    sig = NULL; /* silence compiler uninit warning */
+    int len = Parrot_io_eprintf(debugger, "%04vx ", (UINTVAL)(pc - code_start))
+            + Parrot_io_eprintf(debugger, "%s", info->name);
+
+#define ARGS_COLUMN 40
 
-    s = 1;
-    len = Parrot_io_eprintf(debugger, "%04vx ", (UINTVAL)(pc - code_start));
-    len += Parrot_io_eprintf(debugger, "%s", info->name);
-
-    n = info->op_count;
-    var_args = 0;
-
-    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 (*pc == PARROT_OP_set_args_pc
+    ||  *pc == PARROT_OP_get_results_pc
+    ||  *pc == PARROT_OP_get_params_pc
+    ||  *pc == PARROT_OP_set_returns_pc) {
         sig = interp->code->const_table->constants[pc[1]]->u.key;
 
         if (!sig)
@@ -306,7 +309,7 @@
                 "NULL sig PMC detected in trace_op_dump");
 
         var_args = VTABLE_elements(interp, sig);
-        n += var_args;
+        n       += var_args;
     }
 
     if (n > 1) {
@@ -315,9 +318,9 @@
         /* pass 1 print arguments */
         for (i = s; i < n; i++) {
             const opcode_t o = pc[i];
-            if (i < info->op_count) {
+
+            if (i < info->op_count)
                 type = info->types[i - 1];
-            }
             else {
                 if (!sig)
                     Parrot_ex_throw_from_c_args(interp, NULL, 1,
@@ -326,21 +329,22 @@
                 type = VTABLE_get_integer_keyed_int(interp, sig, i - 2) &
                     (PARROT_ARG_TYPE_MASK|PARROT_ARG_CONSTANT);
             }
-            if (i > s &&
-                    type != PARROT_ARG_KC &&
-                    type != PARROT_ARG_KIC &&
-                    type != PARROT_ARG_KI &&
-                    type != PARROT_ARG_K) {
+
+            if (i > s
+            &&  type != PARROT_ARG_KC
+            &&  type != PARROT_ARG_KIC
+            &&  type != PARROT_ARG_KI
+            &&  type != PARROT_ARG_K)
                 len += Parrot_io_eprintf(debugger, ", ");
-            }
+
             switch (type) {
               case PARROT_ARG_IC:
                 len += Parrot_io_eprintf(debugger, "%vd", o);
                 break;
               case PARROT_ARG_NC:
                 len += Parrot_io_eprintf(debugger, "%vg",
-                                         Parrot_pcc_get_num_constant(interp,
-                                                                     CURRENT_CONTEXT(interp), o));
+                        Parrot_pcc_get_num_constant(interp,
+                            CURRENT_CONTEXT(interp), o));
                 break;
               case PARROT_ARG_PC:
                 if (var_args)
@@ -351,10 +355,9 @@
                 break;
               case PARROT_ARG_SC:
                 {
-                    STRING* const escaped = Parrot_str_escape_truncate(
-                            interp,
-                            Parrot_pcc_get_string_constant(interp,
-                                                           CURRENT_CONTEXT(interp), o), 20);
+                    STRING * const escaped = Parrot_str_escape_truncate(
+                            interp, Parrot_pcc_get_string_constant(interp,
+                                        CURRENT_CONTEXT(interp), o), 20);
                     if (escaped)
                         len += Parrot_io_eprintf(debugger, "\"%Ss\"", escaped);
                     else
@@ -363,8 +366,8 @@
                 break;
               case PARROT_ARG_KC:
                 len += trace_key_dump(interp,
-                                      Parrot_pcc_get_pmc_constant(interp,
-                                                                  CURRENT_CONTEXT(interp), o));
+                        Parrot_pcc_get_pmc_constant(interp,
+                            CURRENT_CONTEXT(interp), o));
                 break;
               case PARROT_ARG_KIC:
                 len += Parrot_io_eprintf(debugger, "[%vd]", o);
@@ -399,17 +402,17 @@
                 break;
             }
         }
+
         if (!more)
             goto done;
+
         if (len < ARGS_COLUMN)  {
             STRING * const fill = Parrot_str_repeat(debugger,
-                    Parrot_str_new_constant(debugger, " "),
-                    ARGS_COLUMN);
+                    Parrot_str_new_constant(debugger, " "), ARGS_COLUMN);
             Parrot_io_putps(debugger, Parrot_io_STDERR(debugger), fill);
         }
-        else {
+        else
             Parrot_io_eprintf(debugger, "\t");
-        }
 
         /* pass 2 print argument details if needed */
         for (i = 1; i < n; i++) {
@@ -419,9 +422,10 @@
             else
                 type = VTABLE_get_integer_keyed_int(interp, sig, i - 2) &
                     (PARROT_ARG_TYPE_MASK|PARROT_ARG_CONSTANT);
-            if (i > s) {
+
+            if (i > s)
                 Parrot_io_eprintf(debugger, " ");
-            }
+
             switch (type) {
               case PARROT_ARG_I:
                 Parrot_io_eprintf(debugger, "I%vd=%vd", o, REG_INT(interp, o));
@@ -432,7 +436,7 @@
               case PARROT_ARG_PC:
                 Parrot_io_eprintf(debugger, "PC%vd=", o);
                 trace_pmc_dump(interp, Parrot_pcc_get_pmc_constant(interp,
-                                                                   CURRENT_CONTEXT(interp), o));
+                                            CURRENT_CONTEXT(interp), o));
                 break;
               case PARROT_ARG_P:
                 Parrot_io_eprintf(debugger, "P%vd=", o);
@@ -440,10 +444,9 @@
                 break;
               case PARROT_ARG_S:
                 if (REG_STR(interp, o)) {
-                    STRING* const escaped = Parrot_str_escape_truncate(
+                    STRING * const escaped = Parrot_str_escape_truncate(
                                 interp, REG_STR(interp, o), 20);
-                    Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"", o,
-                                escaped);
+                    Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"", o, escaped);
                 }
                 else
                     Parrot_io_eprintf(debugger, "S%vd=\"(null)\"", o);
@@ -463,20 +466,21 @@
 done:
 
     if (interp->code->annotations) {
-        PMC * const annot = PackFile_Annotations_lookup(interp, interp->code->annotations,
-                pc - code_start + 1, NULL);
+        PMC * const annot = PackFile_Annotations_lookup(interp,
+                interp->code->annotations, pc - code_start + 1, NULL);
+
         if (!PMC_IS_NULL(annot)) {
             PMC * const pfile = VTABLE_get_pmc_keyed_str(interp, annot,
                     Parrot_str_new_constant(interp, "file"));
             PMC * const pline = VTABLE_get_pmc_keyed_str(interp, annot,
                     Parrot_str_new_constant(interp, "line"));
+
             if ((!PMC_IS_NULL(pfile)) && (!PMC_IS_NULL(pline))) {
                 /* The debugger interpreter may not be the same as
                  * the main interpreter, extract values from the
-                 * PMC instad of passing them directly
-                 */
+                 * PMC instad of passing them directly */
                 STRING * const file = VTABLE_get_string(interp, pfile);
-                const INTVAL line   = VTABLE_get_integer(interp, pline);
+                const INTVAL   line = VTABLE_get_integer(interp, pline);
                 Parrot_io_eprintf(debugger, " (%Ss:%li)", file, (long)line);
             }
         }
@@ -485,13 +489,13 @@
     Parrot_io_eprintf(debugger, "\n");
 }
 
+
 /*
 
 =item C<void trace_op(PARROT_INTERP, const opcode_t *code_start, const opcode_t
 *code_end, const opcode_t *pc)>
 
-Prints the PC, OP and ARGS. Used by C<runops_trace()>. With bounds
-checking.
+Prints the PC, OP and ARGS. Used by C<runops_trace()>. With bounds checking.
 
 I<Not really part of the API.>
 
@@ -506,16 +510,18 @@
         ARGIN_NULLOK(const opcode_t *pc))
 {
     ASSERT_ARGS(trace_op)
-    if (!pc) {
+
+    if (!pc)
         return;
-    }
 
     if (pc >= code_start && pc < code_end)
         trace_op_dump(interp, code_start, pc);
     else
-        Parrot_io_eprintf(interp, "PC=%ld; OP=<err>\n", (long)(pc - code_start));
+        Parrot_io_eprintf(interp, "PC=%ld; OP=<err>\n",
+        (long)(pc - code_start));
 }
 
+
 /*
 
 =back

Modified: branches/avl_string_cache/src/scheduler.c
==============================================================================
--- branches/avl_string_cache/src/scheduler.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/scheduler.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2007-2009, Parrot Foundation.
+Copyright (C) 2007-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -18,6 +18,7 @@
 
 #include "parrot/parrot.h"
 #include "parrot/scheduler_private.h"
+#include "parrot/runcore_api.h"
 
 #include "pmc/pmc_scheduler.h"
 #include "pmc/pmc_task.h"
@@ -328,7 +329,7 @@
     FLOATVAL duration = VTABLE_get_number_keyed_int(interp, task,
             PARROT_TIMER_INTERVAL);
     if (repeat != 0) {
-        PMC *repeat_task = VTABLE_clone(interp, task);
+        PMC * const repeat_task = VTABLE_clone(interp, task);
         VTABLE_set_number_keyed_int(interp, repeat_task, PARROT_TIMER_NSEC, duration);
 
         if (repeat > 0)
@@ -356,7 +357,7 @@
         ARGIN(PMC *user_data), ARGIN(char *ext_data))
 {
     ASSERT_ARGS(Parrot_cx_schedule_callback)
-    PMC *callback = Parrot_pmc_new(interp, enum_class_Task);
+    PMC * const callback = Parrot_pmc_new(interp, enum_class_Task);
     Parrot_Task_attributes * const task_struct = PARROT_TASK(callback);
 
     task_struct->type    = CONST_STRING(interp, "callback");
@@ -530,11 +531,10 @@
             Parrot_str_equal(interp, handler_type, event_str) ?
                 Hevent :
                 Hunknown;
-        STRING * const handler_name = (htype == Hexception) ?
-            handler_str : (STRING *) NULL;
+        STRING * const handler_name = (htype == Hexception) ? handler_str : (STRING *)NULL;
 
         for (index = 0; index < elements; ++index) {
-            PMC *handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
+            PMC * const handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
             if (!PMC_IS_NULL(handler)) {
                 switch (htype) {
                   case Hexception:
@@ -578,7 +578,7 @@
 Parrot_cx_count_handlers_local(PARROT_INTERP, ARGIN(STRING *handler_type))
 {
     ASSERT_ARGS(Parrot_cx_count_handlers_local)
-    PMC *handlers = Parrot_pcc_get_handlers(interp, interp->ctx);
+    PMC * const handlers = Parrot_pcc_get_handlers(interp, interp->ctx);
     INTVAL elements;
 
     if (PMC_IS_NULL(handlers))
@@ -604,11 +604,10 @@
             (Parrot_str_equal(interp, handler_type, event_str)) ?
                 Hevent :
                 Hunknown;
-        STRING * const handler_name = (htype == Hexception) ?
-            handler_str : (STRING *) NULL;
+        STRING * const handler_name = (htype == Hexception) ? handler_str : (STRING *)NULL;
 
         for (index = 0; index < elements; ++index) {
-            PMC *handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
+            PMC * const handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
             if (!PMC_IS_NULL(handler)) {
                 switch (htype) {
                   case Hexception:
@@ -644,7 +643,7 @@
 Parrot_cx_add_handler(PARROT_INTERP, ARGIN(PMC *handler))
 {
     ASSERT_ARGS(Parrot_cx_add_handler)
-    STRING *add_handler = CONST_STRING(interp, "add_handler");
+    STRING * const add_handler = CONST_STRING(interp, "add_handler");
     if (!interp->scheduler)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
             "Scheduler was not initialized for this interpreter.\n");
@@ -894,7 +893,7 @@
         keep_context = context;
         /* Loop from newest handler to oldest handler. */
         while (!PMC_IS_NULL(iter) && VTABLE_get_bool(interp, iter)) {
-            PMC *handler = VTABLE_shift_pmc(interp, iter);
+            PMC * const handler = VTABLE_shift_pmc(interp, iter);
 
             if (!PMC_IS_NULL(handler)) {
                 INTVAL valid_handler = 0;

Modified: branches/avl_string_cache/src/spf_render.c
==============================================================================
--- branches/avl_string_cache/src/spf_render.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/spf_render.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -65,19 +65,19 @@
         FUNC_MODIFIES(*out)
         FUNC_MODIFIES(*info);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING * handle_flags(PARROT_INTERP,
     ARGIN(const SpfInfo *info),
-    ARGMOD(STRING *str),
+    ARGIN(STRING *str),
     INTVAL is_int_type,
     ARGIN_NULLOK(STRING* prefix))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*str);
+        __attribute__nonnull__(3);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* str_append_w_flags(PARROT_INTERP,
+static STRING* str_concat_w_flags(PARROT_INTERP,
     ARGOUT(STRING *dest),
     ARGIN(const SpfInfo *info),
     ARGMOD(STRING *src),
@@ -96,7 +96,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(info) \
     , PARROT_ASSERT_ARG(str))
-#define ASSERT_ARGS_str_append_w_flags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_str_concat_w_flags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(dest) \
     , PARROT_ASSERT_ARG(info) \
@@ -123,9 +123,10 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-handle_flags(PARROT_INTERP, ARGIN(const SpfInfo *info), ARGMOD(STRING *str),
+handle_flags(PARROT_INTERP, ARGIN(const SpfInfo *info), ARGIN(STRING *str),
         INTVAL is_int_type, ARGIN_NULLOK(STRING* prefix))
 {
     ASSERT_ARGS(handle_flags)
@@ -135,26 +136,26 @@
         if (info->flags & FLAG_PREC && info->prec == 0 &&
                 len == 1 &&
                 string_ord(interp, str, 0) == '0') {
-            Parrot_str_chopn_inplace(interp, str, len);
+            str = Parrot_str_chopn(interp, str, len);
             len = 0;
         }
         /* +, space */
         if (!len || string_ord(interp, str, 0) != '-') {
             if (info->flags & FLAG_PLUS) {
                 STRING * const cs = CONST_STRING(interp, "+");
-                str = Parrot_str_concat(interp, cs, str, 0);
+                str = Parrot_str_concat(interp, cs, str);
                 len++;
             }
             else if (info->flags & FLAG_SPACE) {
                 STRING * const cs = CONST_STRING(interp, " ");
-                str = Parrot_str_concat(interp, cs, str, 0);
+                str = Parrot_str_concat(interp, cs, str);
                 len++;
             }
         }
 
         /* # 0x ... */
         if ((info->flags & FLAG_SHARP) && prefix) {
-            str = Parrot_str_concat(interp, prefix, str, 0);
+            str = Parrot_str_concat(interp, prefix, str);
             len += Parrot_str_byte_length(interp, prefix);
         }
         /* XXX sharp + fill ??? */
@@ -176,11 +177,11 @@
     else {
         /* string precision */
         if (info->flags & FLAG_PREC && info->prec == 0) {
-            Parrot_str_chopn_inplace(interp, str, len);
+            str = Parrot_str_chopn(interp, str, len);
             len = 0;
         }
         else if (info->flags & FLAG_PREC && info->prec < len) {
-            Parrot_str_chopn_inplace(interp, str, -(INTVAL)(info->prec));
+            str = Parrot_str_chopn(interp, str, -(INTVAL)(info->prec));
             len = info->prec;
         }
     }
@@ -193,7 +194,7 @@
         STRING * const fill = Parrot_str_repeat(interp, filler, info->width - len);
 
         if (info->flags & FLAG_MINUS) { /* left-align */
-            str = Parrot_str_concat(interp, str, fill, 0);
+            str = Parrot_str_concat(interp, str, fill);
         }
         else {                  /* right-align */
             /* signed and zero padded */
@@ -202,14 +203,13 @@
                     string_ord(interp, str, 0) == '+')) {
                 STRING *temp = NULL;
                 STRING *ignored;
-                ignored = Parrot_str_substr(interp, str, 1, len-1, &temp, 0);
-                UNUSED(ignored);
-                Parrot_str_chopn_inplace(interp, str, -1);
-                str = Parrot_str_append(interp, str, fill);
-                str = Parrot_str_append(interp, str, temp);
+                temp = Parrot_str_substr(interp, str, 1, len-1);
+                str = Parrot_str_chopn(interp, str, -1);
+                str = Parrot_str_concat(interp, str, fill);
+                str = Parrot_str_concat(interp, str, temp);
             }
             else {
-                str = Parrot_str_concat(interp, fill, str, 0);
+                str = Parrot_str_concat(interp, fill, str);
             }
         }
     }
@@ -218,7 +218,7 @@
 
 /*
 
-=item C<static STRING* str_append_w_flags(PARROT_INTERP, STRING *dest, const
+=item C<static STRING* str_concat_w_flags(PARROT_INTERP, STRING *dest, const
 SpfInfo *info, STRING *src, STRING *prefix)>
 
 Used by Parrot_sprintf_format.  Prepends supplied prefix for numeric
@@ -232,12 +232,12 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-str_append_w_flags(PARROT_INTERP, ARGOUT(STRING *dest), ARGIN(const SpfInfo *info),
+str_concat_w_flags(PARROT_INTERP, ARGOUT(STRING *dest), ARGIN(const SpfInfo *info),
         ARGMOD(STRING *src), ARGIN_NULLOK(STRING *prefix))
 {
-    ASSERT_ARGS(str_append_w_flags)
+    ASSERT_ARGS(str_concat_w_flags)
     src = handle_flags(interp, info, src, 1, prefix);
-    dest = Parrot_str_append(interp, dest, src);
+    dest = Parrot_str_concat(interp, dest, src);
     return dest;
 }
 
@@ -328,7 +328,7 @@
     INTVAL i;
     INTVAL len     = 0;
     INTVAL old     = 0;
-    INTVAL pat_len = (INTVAL)Parrot_str_byte_length(interp, pat);
+    const INTVAL pat_len = (INTVAL)Parrot_str_byte_length(interp, pat);
     HUGEINTVAL num;
 
     /* start with a buffer; double the pattern length to avoid realloc #1 */
@@ -344,11 +344,9 @@
     for (i = 0; i < pat_len; i++) {
         if (string_ord(interp, pat, i) == '%') {        /* % */
             if (len) {
-                STRING *ignored
-                    = Parrot_str_substr(interp, pat, old, len, &substr, 1);
-                UNUSED(ignored);
+                substr = Parrot_str_substr(interp, pat, old, len);
                 /* XXX This shouldn't modify targ the pointer */
-                targ = Parrot_str_append(interp, targ, substr);
+                targ = Parrot_str_concat(interp, targ, substr);
             }
             len = 0;
             old = i;
@@ -602,7 +600,7 @@
                             {
                             STRING * const ts = string_chr(interp,
                                  (UINTVAL)obj->getint(interp, info.type, obj));
-                            targ = str_append_w_flags(interp, targ, &info, ts, NULL);
+                            targ = str_concat_w_flags(interp, targ, &info, ts, NULL);
                             }
                             break;
 
@@ -616,7 +614,7 @@
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -631,7 +629,7 @@
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -641,13 +639,13 @@
                             STRING * const prefix = CONST_STRING(interp, "0X");
                             const UHUGEINTVAL theuint =
                                 obj->getuint(interp, info.type, obj);
-                            STRING * const ts =
+                            STRING * ts =
                                 Parrot_str_from_uint(interp, tc, theuint, 16, 0);
-                            Parrot_str_upcase_inplace(interp, ts);
+                            ts = Parrot_str_upcase(interp, ts);
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -662,7 +660,7 @@
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -677,7 +675,7 @@
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -716,7 +714,7 @@
 #endif
                                 Parrot_str_free_cstring(tempstr);
                             }
-                            targ = Parrot_str_append(interp, targ, cstr2pstr(tc));
+                            targ = Parrot_str_concat(interp, targ, cstr2pstr(tc));
                             }
                             break;
 
@@ -728,7 +726,7 @@
                             STRING * const ts = Parrot_str_from_uint(interp, tc,
                                        (UHUGEINTVAL) (size_t) ptr, 16, 0);
 
-                            targ = str_append_w_flags(interp, targ, &info,
+                            targ = str_concat_w_flags(interp, targ, &info,
                                     ts, prefix);
                             }
                             break;
@@ -816,7 +814,7 @@
                             }
 #endif /* WIN32 */
 
-                            targ = Parrot_str_append(interp, targ, cstr2pstr(tc));
+                            targ = Parrot_str_concat(interp, targ, cstr2pstr(tc));
                             }
                             break;
 
@@ -836,7 +834,7 @@
                                                     string, 0, NULL);
                                 obj->index++;
 
-                                targ = Parrot_str_append(interp, targ, ts);
+                                targ = Parrot_str_concat(interp, targ, ts);
                                 break;
                             }
 
@@ -849,7 +847,7 @@
                             if (!STRING_IS_NULL(string)) {
                                 STRING * const ts = handle_flags(interp,
                                         &info, string, 0, NULL);
-                                targ = Parrot_str_append(interp, targ, ts);
+                                targ = Parrot_str_concat(interp, targ, ts);
                             }
                             }
                             break;
@@ -892,9 +890,8 @@
         }
     }
     if (len) {
-        STRING *ignored = Parrot_str_substr(interp, pat, old, len, &substr, 1);
-        UNUSED(ignored);
-        targ = Parrot_str_append(interp, targ, substr);
+        substr = Parrot_str_substr(interp, pat, old, len);
+        targ = Parrot_str_concat(interp, targ, substr);
     }
 
     return targ;

Modified: branches/avl_string_cache/src/spf_vtable.c
==============================================================================
--- branches/avl_string_cache/src/spf_vtable.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/spf_vtable.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -453,7 +453,7 @@
     obj->index++;
     s = VTABLE_get_string(interp, tmp);
     /* XXX Parrot_str_copy like below? + adjusting bufused */
-    return Parrot_str_substr(interp, s, 0, 1, NULL, 0);
+    return Parrot_str_substr(interp, s, 0, 1);
 }
 
 /*

Modified: branches/avl_string_cache/src/string/api.c
==============================================================================
--- branches/avl_string_cache/src/string/api.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/api.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -28,10 +28,12 @@
 #include "api.str"
 
 /* for parrot/interpreter.h */
+#if PARROT_CATCH_NULL
 STRING *STRINGNULL;
+#endif
 
 #define nonnull_encoding_name(s) (s) ? (s)->encoding->name : "null string"
-#define saneify_string(s) \
+#define ASSERT_STRING_SANITY(s) \
     PARROT_ASSERT((s)->encoding); \
     PARROT_ASSERT((s)->charset); \
     PARROT_ASSERT(!PObj_on_free_list_TEST(s))
@@ -41,16 +43,8 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void make_writable(PARROT_INTERP,
-    ARGMOD(STRING **s),
-    const size_t len,
-    parrot_string_representation_t representation)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
 PARROT_INLINE
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CAN_RETURN_NULL
 static const CHARSET * string_rep_compatible(SHIM_INTERP,
     ARGIN(const STRING *a),
@@ -61,9 +55,6 @@
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*e);
 
-#define ASSERT_ARGS_make_writable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_string_rep_compatible __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(a) \
     , PARROT_ASSERT_ARG(b) \
@@ -82,11 +73,13 @@
 */
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL
 Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_is_null)
-    return !s || s == STRINGNULL;
+    return STRING_IS_NULL(s);
 }
 
 
@@ -101,171 +94,17 @@
 */
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL
 STRING_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(STRING_is_null)
-    return !s || s == STRINGNULL;
-}
-
-
-/*
-
-=item C<void Parrot_str_write_COW(PARROT_INTERP, STRING *s)>
-
-If the specified Parrot string is copy-on-write then the memory is
-copied over and the copy-on-write flag is cleared.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_write_COW(PARROT_INTERP, ARGMOD(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_write_COW)
-
-    /* COW_FLAG | constant_FLAG | external_FLAG) */
-    if (PObj_is_cowed_TESTALL(s)) {
-        STRING for_alloc;
-        size_t alloc_size;
-
-        /* Create new pool data for this header to use,
-         * independent of the original COW data */
-        PObj_constant_CLEAR(s);
-
-        /* constant may have been marked */
-        PObj_live_CLEAR(s);
-
-        if (Buffer_buflen(s)) {
-            PObj_flags_CLEARALL(&for_alloc);
-            alloc_size = s->bufused;
-            Parrot_gc_allocate_string_storage(interp, &for_alloc, alloc_size);
-
-            /* now copy memory over */
-            mem_sys_memcopy(for_alloc.strstart, s->strstart, alloc_size);
-
-            /* and finally use that string memory */
-
-            Buffer_bufstart(s) = Buffer_bufstart(&for_alloc);
-            s->strstart      = for_alloc.strstart;
-            Buffer_buflen(s)   = Buffer_buflen(&for_alloc);
-            PARROT_ASSERT(Buffer_buflen(s) >= alloc_size);
-        }
-
-        /* COW_FLAG | external_FLAG */
-        PObj_is_external_CLEARALL(s);
-    }
-
-    s->hashval = 0;
+    return STRING_IS_NULL(s);
 }
 
 /*
 
-=item C<STRING * Parrot_str_new_COW(PARROT_INTERP, STRING *s)>
-
-Creates a copy-on-write string, cloning a string header without
-allocating a new buffer.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING *
-Parrot_str_new_COW(PARROT_INTERP, ARGMOD(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_new_COW)
-    STRING *d;
-
-    if (PObj_constant_TEST(s)) {
-        d = Parrot_gc_new_string_header(interp,
-            PObj_get_FLAGS(s) & ~PObj_constant_FLAG);
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        /* we can't move the memory, because constants aren't
-         * scanned in compact_pool, therefore the other end
-         * would point to garbage.
-         */
-        PObj_constant_CLEAR(d);
-        PObj_external_SET(d);
-    }
-    else {
-        d = Parrot_gc_new_string_header(interp, PObj_get_FLAGS(s));
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        PObj_sysmem_CLEAR(d);
-    }
-    return d;
-}
-
-/*
-
-=item C<STRING * Parrot_str_reuse_COW(PARROT_INTERP, STRING *s, STRING *d)>
-
-Creates a copy-on-write string by cloning a string header without
-allocating a new buffer. Doesn't allocate a new string header, instead
-using the one passed in and returns it.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-Parrot_str_reuse_COW(SHIM_INTERP, ARGMOD(STRING *s), ARGOUT(STRING *d))
-{
-    ASSERT_ARGS(Parrot_str_reuse_COW)
-
-    if (PObj_constant_TEST(s)) {
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        PObj_constant_CLEAR(d);
-        PObj_external_SET(d);
-    }
-    else {
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        PObj_sysmem_CLEAR(d);
-    }
-    return d;
-}
-
-/*
-
-=item C<STRING * Parrot_str_set(PARROT_INTERP, STRING *dest, STRING *src)>
-
-Makes the contents of first Parrot string a copy of the contents of
-second.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-Parrot_str_set(PARROT_INTERP, ARGIN_NULLOK(STRING *dest), ARGMOD(STRING *src))
-{
-    ASSERT_ARGS(Parrot_str_set)
-    if (dest == src)
-        return dest;
-    if (dest) { /* && dest != src */
-        /* they are different, dest is not an external string */
-        dest = Parrot_str_reuse_COW(interp, src, dest);
-    }
-    else
-        dest = Parrot_str_new_COW(interp, src);
-    return dest;
-}
-
-
-/*
-
 =back
 
 =head2 Basic String Functions
@@ -292,15 +131,16 @@
     const size_t n_parrot_cstrings =
         sizeof (parrot_cstrings) / sizeof (parrot_cstrings[0]);
 
-    if (interp->parent_interpreter) {
+    if (interp->parent_interpreter)
         interp->hash_seed = interp->parent_interpreter->hash_seed;
-    }
+
     /* interp is initialized from zeroed memory, so this is fine */
     else if (interp->hash_seed == 0) {
         /* TT #64 - use an entropy source once available */
         Parrot_srand(Parrot_intval_time());
         interp->hash_seed = Parrot_uint_rand(0);
     }
+
     /* initialize the constant string table */
     if (interp->parent_interpreter) {
         interp->const_cstring_table =
@@ -319,10 +159,12 @@
 
     Parrot_charsets_encodings_init(interp);
 
+#if PARROT_CATCH_NULL
     /* initialize STRINGNULL, but not in the constant table */
     STRINGNULL = Parrot_str_new_init(interp, NULL, 0,
                        PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
                        PObj_constant_FLAG);
+#endif
 
     interp->const_cstring_table =
         mem_gc_allocate_n_zeroed_typed(interp, n_parrot_cstrings, STRING *);
@@ -339,6 +181,7 @@
     }
 }
 
+
 /*
 
 =item C<void Parrot_str_finish(PARROT_INTERP)>
@@ -354,6 +197,7 @@
 Parrot_str_finish(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_str_finish)
+
     /* all are shared between interpreters */
     if (!interp->parent_interpreter) {
         mem_internal_free(interp->const_cstring_table);
@@ -365,28 +209,6 @@
     }
 }
 
-/*
-
-=item C<UINTVAL string_capacity(PARROT_INTERP, const STRING *s)>
-
-Returns the capacity of the specified Parrot string in bytes, that
-is how many bytes can be appended onto strstart.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-UINTVAL
-string_capacity(SHIM_INTERP, ARGIN(const STRING *s))
-{
-    ASSERT_ARGS(string_capacity)
-
-    return ((ptrcast_t)Buffer_bufstart(s) + Buffer_buflen(s) -
-            (ptrcast_t)s->strstart);
-}
 
 /*
 
@@ -422,6 +244,7 @@
     return s;
 }
 
+
 /*
 
 =item C<static const CHARSET * string_rep_compatible(PARROT_INTERP, const STRING
@@ -439,13 +262,14 @@
 */
 
 PARROT_INLINE
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CAN_RETURN_NULL
 static const CHARSET *
 string_rep_compatible(SHIM_INTERP,
     ARGIN(const STRING *a), ARGIN(const STRING *b), ARGOUT(const ENCODING **e))
 {
     ASSERT_ARGS(string_rep_compatible)
+
     if (a->encoding == b->encoding && a->charset == b->charset) {
         *e = a->encoding;
         return a->charset;
@@ -453,7 +277,7 @@
 
     /* a table could possibly simplify the logic */
     if (a->encoding == Parrot_utf8_encoding_ptr
-    &&  b->charset == Parrot_ascii_charset_ptr) {
+    &&  b->charset  == Parrot_ascii_charset_ptr) {
         if (a->strlen == a->bufused) {
             *e = Parrot_fixed_8_encoding_ptr;
             return b->charset;
@@ -463,7 +287,7 @@
     }
 
     if (b->encoding == Parrot_utf8_encoding_ptr
-    &&  a->charset == Parrot_ascii_charset_ptr) {
+    &&  a->charset  == Parrot_ascii_charset_ptr) {
         if (b->strlen == b->bufused) {
             *e = Parrot_fixed_8_encoding_ptr;
             return a->charset;
@@ -497,14 +321,47 @@
 
 /*
 
-=item C<STRING * Parrot_str_concat(PARROT_INTERP, STRING *a, STRING *b, UINTVAL
-Uflags)>
+=item C<STRING* Parrot_str_clone(PARROT_INTERP, const STRING *s)>
 
-Concatenates two Parrot strings. If necessary, converts the second
-string's encoding and/or type to match those of the first string. If
-either string is C<NULL>, then a copy of the non-C<NULL> string is
-returned. If both strings are C<NULL>, then a new zero-length string is
-created and returned.
+Helper function to clone string.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING*
+Parrot_str_clone(PARROT_INTERP, ARGIN(const STRING *s))
+{
+    ASSERT_ARGS(Parrot_str_clone)
+
+    const size_t alloc_size = s->bufused;
+    STRING * const result = Parrot_gc_new_string_header(interp, 0);
+
+    /* Copy encoding/charset/etc */
+    STRUCT_COPY(result, s);
+
+    /* Clear COW flag. We own buffer */
+    PObj_get_FLAGS(result)  = PObj_is_string_FLAG
+                            | PObj_is_COWable_FLAG
+                            | PObj_live_FLAG;
+
+    /* Allocate new chunk of memory */
+    Parrot_gc_allocate_string_storage(interp, result, alloc_size);
+
+    /* and copy it over */
+    mem_sys_memcopy(result->strstart, s->strstart, alloc_size);
+
+    return result;
+}
+
+
+/*
+
+=item C<STRING * Parrot_str_copy(PARROT_INTERP, STRING *s)>
+
+Creates and returns a shallow copy of the specified Parrot string.
 
 =cut
 
@@ -512,50 +369,63 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 STRING *
-Parrot_str_concat(PARROT_INTERP, ARGIN_NULLOK(STRING *a),
-            ARGIN_NULLOK(STRING *b), UINTVAL Uflags)
+Parrot_str_copy(PARROT_INTERP, ARGMOD(STRING *s))
 {
-    ASSERT_ARGS(Parrot_str_concat)
-    if (a && a->strlen) {
-        if (b && b->strlen) {
-            STRING *result = Parrot_str_copy(interp, a);
-            Parrot_str_write_COW(interp, result);
-            return Parrot_str_append(interp, result, b);
-        }
+    ASSERT_ARGS(Parrot_str_copy)
+    STRING *d;
 
-        return Parrot_str_copy(interp, a);
+    /* We set COW flag to avoid cloning buffer in compact_pool */
+
+    if (PObj_constant_TEST(s)) {
+        d = Parrot_gc_new_string_header(interp,
+            PObj_get_FLAGS(s) & ~PObj_constant_FLAG);
+        PObj_COW_SET(s);
+        STRUCT_COPY(d, s);
+        /* we can't move the memory, because constants aren't
+         * scanned in compact_pool, therefore the other end
+         * would point to garbage.
+         */
+        PObj_constant_CLEAR(d);
+        PObj_external_SET(d);
+    }
+    else {
+        d = Parrot_gc_new_string_header(interp, PObj_get_FLAGS(s));
+        PObj_COW_SET(s);
+        STRUCT_COPY(d, s);
+        PObj_sysmem_CLEAR(d);
     }
 
-    return b
-        ? Parrot_str_copy(interp, b)
-        : string_make(interp, NULL, 0, NULL, Uflags);
+    return d;
 }
 
 
 /*
 
-=item C<STRING * Parrot_str_append(PARROT_INTERP, STRING *a, STRING *b)>
+=item C<STRING * Parrot_str_concat(PARROT_INTERP, STRING *a, STRING *b)>
 
-Take in two Parrot strings and append the second to the first.  NOTE THAT
-RETURN VALUE MAY NOT BE THE FIRST STRING, if the first string is COW'd or
-read-only.  So make sure to _use_ the return value.
+Concatenates two Parrot strings. If necessary, converts the second
+string's encoding and/or type to match those of the first string. If
+either string is C<NULL>, then a copy of the non-C<NULL> string is
+returned. If both strings are C<NULL>, then a new zero-length string is
+created and returned.
 
 =cut
 
 */
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 STRING *
-Parrot_str_append(PARROT_INTERP, ARGMOD_NULLOK(STRING *a), ARGIN_NULLOK(STRING *b))
+Parrot_str_concat(PARROT_INTERP, ARGIN_NULLOK(STRING *a),
+            ARGIN_NULLOK(STRING *b))
 {
-    ASSERT_ARGS(Parrot_str_append)
-    UINTVAL a_capacity;
-    UINTVAL total_length;
-    const CHARSET *cs;
-    const ENCODING *enc;
+    ASSERT_ARGS(Parrot_str_concat)
+    const CHARSET   *cs;
+    const ENCODING  *enc;
+    STRING          *dest;
+    UINTVAL          total_length;
 
     /* XXX should this be a CHARSET method? */
 
@@ -565,16 +435,11 @@
         return a;
 
     /* Is A real? */
-    if (a == NULL || Buffer_bufstart(a) == NULL)
-        return Parrot_str_copy(interp, b);
+    if (STRING_IS_NULL(a) || Buffer_bufstart(a) == NULL)
+        return b;
 
-    saneify_string(a);
-    saneify_string(b);
-
-    /* If the destination's constant, or external then just fall back to
-       Parrot_str_concat */
-    if (PObj_is_cowed_TESTALL(a))
-        return Parrot_str_concat(interp, a, b, 0);
+    ASSERT_STRING_SANITY(a);
+    ASSERT_STRING_SANITY(b);
 
     cs = string_rep_compatible(interp, a, b, &enc);
 
@@ -588,46 +453,45 @@
            ||  b->encoding == Parrot_utf16_encoding_ptr
            ||  a->encoding == Parrot_ucs2_encoding_ptr
            ||  b->encoding == Parrot_ucs2_encoding_ptr)
-              ? Parrot_utf16_encoding_ptr
-              : Parrot_utf8_encoding_ptr;
+            ? Parrot_utf16_encoding_ptr
+            : Parrot_utf8_encoding_ptr;
 
-        Parrot_unicode_charset_ptr->to_charset(interp, a, NULL);
-        b = Parrot_unicode_charset_ptr->to_charset(interp, b,
-                Parrot_gc_new_string_header(interp, 0));
+        a = Parrot_unicode_charset_ptr->to_charset(interp, a);
+        b = Parrot_unicode_charset_ptr->to_charset(interp, b);
 
         if (a->encoding != enc)
-            enc->to_encoding(interp, a, NULL);
+            a = enc->to_encoding(interp, a);
         if (b->encoding != enc)
-            enc->to_encoding(interp, b, NULL);
+            b = enc->to_encoding(interp, b);
     }
 
     /* calc usable and total bytes */
-    a_capacity   = string_capacity(interp, a);
     total_length = a->bufused + b->bufused;
 
-    /* make sure A's big enough for both  */
-    if (total_length > a_capacity)
-        Parrot_gc_reallocate_string_storage(interp, a, total_length << 1);
+    dest = Parrot_str_new_noinit(interp, enum_stringrep_one, total_length);
+    dest->encoding = a->encoding;
+    dest->charset  = a->charset;
 
-    /* A is now ready to receive the contents of B */
+    /* Copy A first */
+    mem_sys_memcopy(dest->strstart, a->strstart, a->bufused);
 
     /* Tack B on the end of A */
-    mem_sys_memcopy((void *)((ptrcast_t)a->strstart + a->bufused),
+    mem_sys_memcopy((void *)((ptrcast_t)dest->strstart + a->bufused),
             b->strstart, b->bufused);
 
-    a->bufused += b->bufused;
-    a->strlen  += b_len;
-    a->hashval  = 0;
+    dest->bufused = a->bufused + b->bufused;
+    dest->strlen  = a->strlen + b_len;
 
-    return a;
+    return dest;
 }
 
+
 /*
 
 =item C<STRING * Parrot_str_new(PARROT_INTERP, const char * const buffer, const
 UINTVAL len)>
 
-Make a Parrot string from a specified C string.
+Makes a Parrot string from a specified C string.
 
 =cut
 
@@ -641,11 +505,14 @@
 Parrot_str_new(PARROT_INTERP, ARGIN_NULLOK(const char * const buffer), const UINTVAL len)
 {
     ASSERT_ARGS(Parrot_str_new)
-    return Parrot_str_new_init(interp, buffer, len ? len :
-            buffer ? strlen(buffer) : 0,
-                              PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
-                              0); /* Force an 8-bit encoding at some
-                                     point? */
+    return Parrot_str_new_init(interp, buffer,
+           len
+             ? len
+             : buffer
+                 ? strlen(buffer)
+                 : 0,
+           /* Force an 8-bit encoding at some point? */
+           PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET, 0);
 }
 
 
@@ -654,9 +521,10 @@
 =item C<STRING * Parrot_str_new_from_buffer(PARROT_INTERP, Buffer *buffer, const
 UINTVAL len)>
 
-Make a Parrot string from a Buffer.
+Makes a Parrot string from a Buffer.
 
-The Buffer is nulled afterwards - only one PObj can point at a given string pool object.
+The Buffer is nulled afterwards, as only one PObj can point at a given string
+pool object.
 
 =cut
 
@@ -670,23 +538,23 @@
 Parrot_str_new_from_buffer(PARROT_INTERP, ARGMOD(Buffer *buffer), const UINTVAL len)
 {
     ASSERT_ARGS(Parrot_str_new_from_buffer)
-    STRING *result;
 
-    result = Parrot_gc_new_string_header(interp, 0);
+    STRING *result          = Parrot_gc_new_string_header(interp, 0);
     Buffer_bufstart(result) = Buffer_bufstart(buffer);
     Buffer_buflen(result)   = Buffer_buflen(buffer);
-    result->strstart        = (char *) Buffer_bufstart(result);
+    result->strstart        = (char *)Buffer_bufstart(result);
     result->bufused         = len;
     result->strlen          = len;
     result->encoding        = Parrot_fixed_8_encoding_ptr;
     result->charset         = Parrot_binary_charset_ptr;
 
-    Buffer_bufstart(buffer) = NULL;
     Buffer_buflen(buffer)   = 0;
+    Buffer_bufstart(buffer) = NULL;
 
     return result;
 }
 
+
 /*
 
 =item C<const char* string_primary_encoding_for_representation(PARROT_INTERP,
@@ -717,6 +585,7 @@
         "invalid string representation");
 }
 
+
 /*
 =item C<int Parrot_str_string_node_compare(AVLStringNode *lhs, AVLStringNode
 *rhs)>
@@ -978,7 +847,7 @@
         if (encoding == Parrot_fixed_8_encoding_ptr)
             s->strlen = len;
         else
-            Parrot_str_length(interp, s);
+            s->strlen = CHARSET_CODEPOINTS(interp, s);
 
         return s;
     }
@@ -991,7 +860,7 @@
         if (encoding == Parrot_fixed_8_encoding_ptr)
             s->strlen = len;
         else
-            Parrot_str_length(interp, s);
+            s->strlen = CHARSET_CODEPOINTS(interp, s);
     }
     else {
         s->strlen = s->bufused = 0;
@@ -1003,31 +872,6 @@
 
 /*
 
-=item C<STRING * Parrot_str_resize(PARROT_INTERP, STRING *s, UINTVAL addlen)>
-
-Grows the Parrot string's buffer by the specified number of characters.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-Parrot_str_resize(PARROT_INTERP, ARGMOD(STRING *s), UINTVAL addlen)
-{
-    ASSERT_ARGS(Parrot_str_resize)
-    Parrot_str_write_COW(interp, s);
-
-    /* Don't check buflen, if we are here, we already checked. */
-    Parrot_gc_reallocate_string_storage(interp,
-        s, Buffer_buflen(s) + string_max_bytes(interp, s, addlen));
-    return s;
-}
-
-
-/*
-
 =back
 
 =head2 Ordinary user-visible string operations
@@ -1049,7 +893,7 @@
 {
     ASSERT_ARGS(Parrot_str_byte_length)
 
-    return s ? s->strlen : 0;
+    return !STRING_IS_NULL(s) ? s->strlen : 0;
 }
 
 
@@ -1074,7 +918,7 @@
 Parrot_str_indexed(PARROT_INTERP, ARGIN(const STRING *s), UINTVAL idx)
 {
     ASSERT_ARGS(Parrot_str_indexed)
-    saneify_string(s);
+    ASSERT_STRING_SANITY(s);
     return (INTVAL)CHARSET_GET_CODEPOINT(interp, s, idx);
 }
 
@@ -1099,9 +943,7 @@
         ARGIN(const STRING *s2), INTVAL start)
 {
     ASSERT_ARGS(Parrot_str_find_index)
-    STRING *src, *search;
     UINTVAL len;
-    DECL_CONST_CAST;
 
     if (start < 0)
         return -1;
@@ -1116,11 +958,13 @@
 
     if (!Parrot_str_byte_length(interp, s2))
         return -1;
+    else {
+        DECL_CONST_CAST;
+        STRING *src    = PARROT_const_cast(STRING *, s);
+        STRING *search = PARROT_const_cast(STRING *, s2);
 
-    src    = PARROT_const_cast(STRING *, s);
-    search = PARROT_const_cast(STRING *, s2);
-
-    return CHARSET_INDEX(interp, src, search, (UINTVAL)start);
+        return CHARSET_INDEX(interp, src, search, (UINTVAL)start);
+    }
 }
 
 
@@ -1200,34 +1044,13 @@
 
 /*
 
-=item C<STRING * Parrot_str_copy(PARROT_INTERP, STRING *s)>
-
-Creates and returns a copy of the specified Parrot string.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING *
-Parrot_str_copy(PARROT_INTERP, ARGMOD(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_copy)
-    return Parrot_str_new_COW(interp, s);
-}
-
-
-/*
-
 =back
 
 =head2 Vtable Dispatch Functions
 
 =over 4
 
-=item C<INTVAL Parrot_str_length(PARROT_INTERP, STRING *s)>
+=item C<INTVAL Parrot_str_length(PARROT_INTERP, const STRING *s)>
 
 Calculates and returns the number of characters in the specified Parrot string.
 
@@ -1236,13 +1059,12 @@
 */
 
 PARROT_EXPORT
-PARROT_IGNORABLE_RESULT
+PARROT_WARN_UNUSED_RESULT
 INTVAL
-Parrot_str_length(PARROT_INTERP, ARGMOD(STRING *s))
+Parrot_str_length(SHIM_INTERP, ARGIN(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_length)
 
-    s->strlen = CHARSET_CODEPOINTS(interp, s);
     return s->strlen;
 }
 
@@ -1260,6 +1082,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
 INTVAL
 string_max_bytes(SHIM_INTERP, ARGIN(const STRING *s), UINTVAL nchars)
 {
@@ -1268,6 +1091,7 @@
     return ENCODING_MAX_BYTES_PER_CODEPOINT(interp, s) * nchars;
 }
 
+
 /*
 
 =item C<STRING * Parrot_str_repeat(PARROT_INTERP, const STRING *s, UINTVAL num)>
@@ -1298,21 +1122,21 @@
             destpos += length;
         }
 
+        dest->strlen  = s->strlen  * num;
         dest->bufused = s->bufused * num;
-        dest->strlen  = s->strlen * num;
     }
 
     return dest;
 }
 
+
 /*
 
 =item C<STRING * Parrot_str_substr(PARROT_INTERP, STRING *src, INTVAL offset,
-INTVAL length, STRING **d, int replace_dest)>
+INTVAL length)>
 
-Copies the substring of length C<length> from C<offset> from the specified
-Parrot string and stores it in C<**d>, allocating memory if necessary. The
-substring is also returned.
+Returns substring of length C<length> from C<offset> from the specified
+Parrot string.
 
 =cut
 
@@ -1323,66 +1147,45 @@
 PARROT_WARN_UNUSED_RESULT
 STRING *
 Parrot_str_substr(PARROT_INTERP,
-        ARGIN_NULLOK(STRING *src), INTVAL offset, INTVAL length,
-        ARGOUT_NULLOK(STRING **d), int replace_dest)
+        ARGIN_NULLOK(STRING *src), INTVAL offset, INTVAL length)
 {
     ASSERT_ARGS(Parrot_str_substr)
-    if (src == NULL)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
-            "Cannot substr on a null string");
-    else {
-        STRING *dest;
-        UINTVAL true_length;
-        UINTVAL true_offset = (UINTVAL)offset;
-
-        saneify_string(src);
-
-        /* Allow regexes to return $' easily for "aaa" =~ /aaa/ */
-        if (offset == (INTVAL)Parrot_str_byte_length(interp, src) || length < 1)
-            return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
 
-        if (offset < 0)
-            true_offset = (UINTVAL)(src->strlen + offset);
+    UINTVAL true_length;
+    UINTVAL true_offset = (UINTVAL)offset;
 
-        /* 0 based... */
-        if (src->strlen == 0 || true_offset > src->strlen - 1)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
-                "Cannot take substr outside string");
+    if (STRING_IS_NULL(src))
+        Parrot_ex_throw_from_c_args(interp, NULL,
+            EXCEPTION_SUBSTR_OUT_OF_STRING, "Cannot substr on a null string");
 
-        true_length = (UINTVAL)length;
-        if (true_length > (src->strlen - true_offset))
-            true_length = (UINTVAL)(src->strlen - true_offset);
+    ASSERT_STRING_SANITY(src);
 
-        /* do in-place i.e. reuse existing header if one */
-        if (replace_dest && d && *d) {
-            PARROT_ASSERT(src->encoding == Parrot_fixed_8_encoding_ptr);
-            dest           = *d;
+    /* Allow regexes to return $' easily for "aaa" =~ /aaa/ */
+    if (offset == (INTVAL)Parrot_str_byte_length(interp, src) || length < 1)
+        return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
 
-            dest->encoding = src->encoding;
-            dest->charset  = src->charset;
+    if (offset < 0)
+        true_offset = (UINTVAL)(src->strlen + offset);
 
-            dest->strstart = (char *)src->strstart + true_offset;
-            dest->bufused  = true_length;
+    /* 0 based... */
+    if (src->strlen == 0 || true_offset > src->strlen - 1)
+        Parrot_ex_throw_from_c_args(interp, NULL,
+            EXCEPTION_SUBSTR_OUT_OF_STRING,
+            "Cannot take substr outside string");
 
-            dest->strlen   = true_length;
-            dest->hashval  = 0;
-        }
-        else
-            dest = CHARSET_GET_CODEPOINTS(interp, src, true_offset,
-                    true_length);
+    true_length = (UINTVAL)length;
 
-        if (d)
-            *d = dest;
+    if (true_length > (src->strlen - true_offset))
+        true_length = (UINTVAL)(src->strlen - true_offset);
 
-        return dest;
-    }
+    return CHARSET_GET_CODEPOINTS(interp, src, true_offset, true_length);
 }
 
 
 /*
 
-=item C<STRING * Parrot_str_replace(PARROT_INTERP, STRING *src, INTVAL offset,
-INTVAL length, STRING *rep, STRING **d)>
+=item C<STRING * Parrot_str_replace(PARROT_INTERP, const STRING *src, INTVAL
+offset, INTVAL length, const STRING *rep)>
 
 Replaces a sequence of C<length> characters from C<offset> in the first
 Parrot string with the second Parrot string, returning what was
@@ -1406,35 +1209,25 @@
 
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 STRING *
-Parrot_str_replace(PARROT_INTERP, ARGIN(STRING *src),
-    INTVAL offset, INTVAL length, ARGIN(STRING *rep), ARGOUT_NULLOK(STRING **d))
+Parrot_str_replace(PARROT_INTERP, ARGIN(const STRING *src),
+    INTVAL offset, INTVAL length, ARGIN(const STRING *rep))
 {
     ASSERT_ARGS(Parrot_str_replace)
-    UINTVAL         start_byte, end_byte;
-    INTVAL          diff;
     String_iter     iter;
-
     const CHARSET  *cs;
     const ENCODING *enc;
     STRING         *dest        = NULL;
     UINTVAL         true_offset = (UINTVAL)offset;
     UINTVAL         true_length = (UINTVAL)length;
 
-    /* special case */
-    if (d             == NULL
-    &&  src->encoding == Parrot_fixed_8_encoding_ptr
-    &&  rep->encoding == Parrot_fixed_8_encoding_ptr
-    &&  offset        >= 0
-    &&  true_offset   <  src->strlen
-    &&  length        == 1
-    &&  rep->strlen   == 1) {
-        if (PObj_is_cowed_TESTALL(src))
-            Parrot_str_write_COW(interp, src);
-
-        ((char *)src->strstart)[offset] = ((char *)rep->strstart)[0];
+    UINTVAL         start_byte, end_byte;
+    INTVAL          buf_size;
 
-        return NULL;
+    if (STRING_IS_NULL(src)) {
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
+            "Can't replace in NULL string");
     }
 
     /* abs(-offset) may not be > strlen-1 */
@@ -1446,29 +1239,22 @@
      * Only give exception if caller trys to replace end of string + 2
      */
     if (true_offset > src->strlen)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
+        Parrot_ex_throw_from_c_args(interp, NULL,
+            EXCEPTION_SUBSTR_OUT_OF_STRING,
             "Can only replace inside string or index after end of string");
 
     if (true_length > (src->strlen - true_offset))
         true_length = (UINTVAL)(src->strlen - true_offset);
 
-    /* Save the substring that is replaced for the return value */
-    if (d) {
-        dest = CHARSET_GET_CODEPOINTS(interp, src, true_offset, true_length);
-        *d = dest;
-    }
-
     /* may have different reps..... */
     cs = string_rep_compatible(interp, src, rep, &enc);
 
     if (!cs) {
-        Parrot_utf16_encoding_ptr->to_encoding(interp, src, NULL);
-        rep = Parrot_utf16_encoding_ptr->to_encoding(interp, rep,
-                Parrot_gc_new_string_header(interp, 0));
-    }
-    else {
-        src->charset  = cs;
-        src->encoding = enc;
+        src = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
+        rep = Parrot_utf16_encoding_ptr->to_encoding(interp, rep);
+        /* Remember selected charset and encoding */
+        enc = src->encoding;
+        cs  = src->charset;
     }
 
     /* get byte position of the part that will be replaced */
@@ -1482,54 +1268,44 @@
 
     /* not possible.... */
     if (end_byte < start_byte)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
+        Parrot_ex_throw_from_c_args(interp, NULL,
+            EXCEPTION_SUBSTR_OUT_OF_STRING,
             "replace: subend somehow is less than substart");
 
     /* Now do the replacement */
-    Parrot_str_write_COW(interp, src);
-
-    /*
-     * If the replacement string fits inside the original substring
-     * don't create a new string, just pack it.
-     */
-    diff = (end_byte - start_byte) - rep->bufused;
-
-    if (diff >= 0
-    || ((INTVAL)src->bufused - (INTVAL)Buffer_buflen(src)) <= diff) {
-
-        if (diff != 0) {
-            mem_sys_memmove((char *)src->strstart + start_byte + rep->bufused,
-                    (char *)src->strstart + end_byte,
-                    src->bufused - end_byte);
-            src->bufused -= diff;
-        }
-
-        mem_sys_memcopy((char *)src->strstart + start_byte,
-                rep->strstart, rep->bufused);
+    dest = Parrot_gc_new_string_header(interp, 0);
 
-        if (diff)
-            (void)Parrot_str_length(interp, src);
-    }
+    /* Set encoding and charset to compatible */
+    dest->encoding = enc;
+    dest->charset  = cs;
+
+    /* Clear COW flag. We own buffer */
+    PObj_get_FLAGS(dest) = PObj_is_string_FLAG
+                         | PObj_is_COWable_FLAG
+                         | PObj_live_FLAG;
+
+            /* size            removed bytes            added bytes */
+    buf_size = src->bufused - (end_byte - start_byte) + rep->bufused;
+
+    /* Alloctate new string size. */
+    Parrot_gc_allocate_string_storage(interp, dest, buf_size);
+    dest->bufused = buf_size;
+
+    /* Copy begin of string */
+    mem_sys_memcopy(dest->strstart, src->strstart, start_byte);
+
+    /* Copy the replacement in */
+    mem_sys_memcopy((char *)dest->strstart + start_byte, rep->strstart,
+            rep->bufused);
+
+    /* Copy the end of old string */
+    mem_sys_memcopy((char *)dest->strstart + start_byte + rep->bufused,
+            (char *)src->strstart + end_byte,
+            src->bufused - end_byte);
 
-    /* Replacement is larger than avail buffer, grow the string */
-    else {
-        /* diff is negative here, make it positive */
-        diff = -(diff);
-        Parrot_str_resize(interp, src, (UINTVAL)diff);
-
-        /* Move the end of old string that isn't replaced to new offset first */
-        mem_sys_memmove((char *)src->strstart + end_byte + diff,
-                (char *)src->strstart + end_byte,
-                src->bufused - end_byte);
-
-        /* Copy the replacement in */
-        mem_sys_memcopy((char *)src->strstart + start_byte, rep->strstart,
-                rep->bufused);
-        src->bufused += diff;
-        (void)Parrot_str_length(interp, src);
-    }
+    dest->strlen  = CHARSET_CODEPOINTS(interp, dest);
+    dest->hashval = 0;
 
-    /* src is modified, now return the original substring */
     return dest;
 }
 
@@ -1538,9 +1314,8 @@
 
 =item C<STRING * Parrot_str_chopn(PARROT_INTERP, STRING *s, INTVAL n)>
 
-Removes the last C<n> characters of the specified Parrot string. If C<n> is
-negative, cuts the string after C<+n> characters. The returned string is a copy
-of the one passed in.
+Removes the last C<n> characters of the specified Parrot string and returns the
+modified string. If C<n> is negative, cuts the string after C<+n> characters.
 
 =cut
 
@@ -1552,68 +1327,47 @@
 Parrot_str_chopn(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
 {
     ASSERT_ARGS(Parrot_str_chopn)
-    STRING * const chopped = Parrot_str_copy(interp, s);
-    Parrot_str_chopn_inplace(interp, chopped, n);
-    return chopped;
-}
-
-
-/*
-
-=item C<void Parrot_str_chopn_inplace(PARROT_INTERP, STRING *s, INTVAL n)>
-
-Removes the last C<n> characters of the specified Parrot string. If C<n> is
-negative, cuts the string after C<+n> characters. The string passed in is
-modified and returned.
-
-=cut
-
-*/
 
-PARROT_EXPORT
-void
-Parrot_str_chopn_inplace(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
-{
-    ASSERT_ARGS(Parrot_str_chopn_inplace)
+    STRING * const chopped = Parrot_str_copy(interp, s);
     UINTVAL new_length, uchar_size;
 
     if (n < 0) {
         new_length = -n;
-        if (new_length > s->strlen)
-            return;
+        if (new_length > chopped->strlen)
+            return chopped;
     }
     else {
-        if (s->strlen > (UINTVAL)n)
-            new_length = s->strlen - n;
+        if (chopped->strlen > (UINTVAL)n)
+            new_length = chopped->strlen - n;
         else
             new_length = 0;
     }
 
-    s->hashval = 0;
+    chopped->hashval = 0;
 
-    if (!new_length || !s->strlen) {
-        s->bufused = s->strlen = 0;
-        return;
+    if (!new_length || !chopped->strlen) {
+        chopped->bufused = chopped->strlen = 0;
+        return chopped;
     }
 
-    uchar_size = s->bufused / s->strlen;
-    s->strlen  = new_length;
+    uchar_size      = chopped->bufused / chopped->strlen;
+    chopped->strlen = new_length;
 
-    if (s->encoding == Parrot_fixed_8_encoding_ptr) {
-        s->bufused = new_length;
+    if (chopped->encoding == Parrot_fixed_8_encoding_ptr) {
+        chopped->bufused = new_length;
     }
-    else if (s->encoding == Parrot_ucs2_encoding_ptr) {
-        s->bufused = new_length * uchar_size;
+    else if (chopped->encoding == Parrot_ucs2_encoding_ptr) {
+        chopped->bufused = new_length * uchar_size;
     }
     else {
         String_iter iter;
 
         ENCODING_ITER_INIT(interp, s, &iter);
         iter.set_position(interp, &iter, new_length);
-        s->bufused = iter.bytepos;
+        chopped->bufused = iter.bytepos;
     }
 
-    return;
+    return chopped;
 }
 
 
@@ -1637,14 +1391,14 @@
 Parrot_str_compare(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1), ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_compare)
-    if (!s2)
+    if (STRING_IS_NULL(s2))
         return s1 && (s1->strlen != 0);
 
-    if (!s1)
+    if (STRING_IS_NULL(s1))
         return -(s2->strlen != 0);
 
-    saneify_string(s1);
-    saneify_string(s2);
+    ASSERT_STRING_SANITY(s1);
+    ASSERT_STRING_SANITY(s2);
 
     return CHARSET_COMPARE(interp, s1, s2);
 }
@@ -1671,6 +1425,7 @@
     return !Parrot_str_equal(interp, s1, s2);
 }
 
+
 /*
 
 =item C<INTVAL Parrot_str_equal(PARROT_INTERP, const STRING *s1, const STRING
@@ -1691,28 +1446,30 @@
 Parrot_str_equal(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1), ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_equal)
-    if ((s1 == s2) || (!s1 && !s2)) {
+
+    if ((s1 == s2) || (STRING_IS_NULL(s1) && STRING_IS_NULL(s2))) {
         return 1;
     }
-    else if (!s2) {
+    else if (STRING_IS_NULL(s2)) {
         return s1->strlen == 0;
     }
-    else if (!s1) {
+    else if (STRING_IS_NULL(s1)) {
         return s2->strlen == 0;
     }
-    else if (s1->strlen != s2->strlen) {
-        return 0;       /* we don't care which is bigger */
-    }
-    else if (s1->hashval != s2->hashval && s1->hashval && s2->hashval) {
+
+   /* we don't care which is bigger */
+    else if (s1->strlen != s2->strlen)
         return 0;
-    }
-    else if (!s1->strlen) {   /* s2->strlen is the same here */
+    else if (s1->hashval != s2->hashval && s1->hashval && s2->hashval)
+        return 0;
+
+    /* s2->strlen is the same here */
+    else if (!s1->strlen)
         return 1;
-    }
+
     /* COWed strings */
-    else if (s1->strstart == s2->strstart && s1->bufused == s2->bufused) {
+    else if (s1->strstart == s2->strstart && s1->bufused == s2->bufused)
         return 1;
-    }
 
     /*
      * now,
@@ -1725,39 +1482,11 @@
 
 /*
 
-=item C<static void make_writable(PARROT_INTERP, STRING **s, const size_t len,
-parrot_string_representation_t representation)>
-
-Makes the specified Parrot string writable with minimum length C<len>.  The
-C<representation> argument is required in case a new Parrot string has to be
-created.
-
-=cut
-
-*/
-
-static void
-make_writable(PARROT_INTERP, ARGMOD(STRING **s),
-    const size_t len, parrot_string_representation_t representation)
-{
-    ASSERT_ARGS(make_writable)
-    if (!*s)
-        *s = Parrot_str_new_noinit(interp, representation, len);
-    else if ((*s)->strlen < len)
-        Parrot_str_resize(interp, *s, (UINTVAL)(len - (*s)->strlen));
-    else if (PObj_is_cowed_TESTALL(*s))
-        Parrot_str_write_COW(interp, *s);
-}
-
-
-/*
-
 =item C<STRING * Parrot_str_bitwise_and(PARROT_INTERP, const STRING *s1, const
-STRING *s2, STRING **dest)>
+STRING *s2)>
 
 Performs a bitwise C<AND> on two Parrot strings, performing type and encoding
-conversions if necessary. If the third string is not C<NULL> then it is
-reused.  Otherwise a new Parrot string is created.
+conversions if necessary. Returns the result as a new string.
 
 =cut
 
@@ -1767,7 +1496,7 @@
 PARROT_CANNOT_RETURN_NULL
 STRING *
 Parrot_str_bitwise_and(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1),
-        ARGIN_NULLOK(const STRING *s2), ARGOUT_NULLOK(STRING **dest))
+        ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_bitwise_and)
     STRING *res;
@@ -1785,21 +1514,15 @@
             nonnull_encoding_name(s1), s2->encoding->name);
 
     /* think about case of dest string is one of the operands */
-    if (s1 && s2)
+    if (!STRING_IS_NULL(s1) && !STRING_IS_NULL(s2))
         minlen = s1->strlen > s2->strlen ? s2->strlen : s1->strlen;
     else
         minlen = 0;
 
-    if (dest && *dest) {
-        res           = *dest;
-        res->encoding = Parrot_fixed_8_encoding_ptr;
-        res->charset  = Parrot_binary_charset_ptr;
-    }
-    else
-        res = Parrot_str_new_init(interp, NULL, minlen,
-                Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+    res = Parrot_str_new_init(interp, NULL, minlen,
+            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
 
-    if (!s1 || !s2) {
+    if (STRING_IS_NULL(s1) || STRING_IS_NULL(s2)) {
         res->bufused = 0;
         res->strlen  = 0;
 
@@ -1812,8 +1535,6 @@
         Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 #endif
 
-    make_writable(interp, &res, minlen, enum_stringrep_one);
-
     { /* bitwise AND the strings */
         const Parrot_UInt1 *curr1 = (Parrot_UInt1 *)s1->strstart;
         const Parrot_UInt1 *curr2 = (Parrot_UInt1 *)s2->strstart;
@@ -1826,12 +1547,10 @@
 
     res->bufused = res->strlen = minlen;
 
-    if (dest)
-        *dest = res;
-
     return res;
 }
 
+
 #define BITWISE_XOR_STRINGS(type1, type2, restype, s1, s2, res, maxlen) \
 do { \
     const type1 *curr1   = NULL; \
@@ -1841,11 +1560,11 @@
     restype     *dp; \
     size_t       _index; \
  \
-    if (s1) { \
+    if (!STRING_IS_NULL(s1)) { \
         curr1   = (type1 *)(s1)->strstart; \
         length1 = (s1)->strlen; \
     } \
-    if (s2) { \
+    if (!STRING_IS_NULL(s2)) { \
         curr2   = (type2 *)(s2)->strstart; \
         length2 = (s2)->strlen; \
     } \
@@ -1876,11 +1595,11 @@
     restype     *dp; \
     size_t       _index; \
  \
-    if (s1) { \
+    if (!STRING_IS_NULL(s1)) { \
         curr1   = (type1 *)(s1)->strstart; \
         length1 = (s1)->strlen; \
     } \
-    if (s2) { \
+    if (!STRING_IS_NULL(s2)) { \
         curr2   = (type2 *)(s2)->strstart; \
         length2 = (s2)->strlen; \
     } \
@@ -1905,11 +1624,10 @@
 /*
 
 =item C<STRING * Parrot_str_bitwise_or(PARROT_INTERP, const STRING *s1, const
-STRING *s2, STRING **dest)>
+STRING *s2)>
 
 Performs a bitwise C<OR> on two Parrot strings, performing type and encoding
-conversions if necessary. If the third string is not C<NULL>, then it is
-reused.  Otherwise a new Parrot string is created.
+conversions if necessary.  Returns the result as a new string.
 
 =cut
 
@@ -1919,24 +1637,26 @@
 PARROT_CANNOT_RETURN_NULL
 STRING *
 Parrot_str_bitwise_or(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1),
-        ARGIN_NULLOK(const STRING *s2), ARGOUT_NULLOK(STRING **dest))
+        ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_bitwise_or)
     STRING *res;
     size_t  maxlen = 0;
 
-    if (s1) {
+    if (!STRING_IS_NULL(s1)) {
         if (s1->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_or (%s/%s) unsupported",
                 s1->encoding->name, nonnull_encoding_name(s2));
 
         maxlen = s1->bufused;
     }
 
-    if (s2) {
+    if (!STRING_IS_NULL(s2)) {
         if (s2->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_or (%s/%s) unsupported",
                 nonnull_encoding_name(s1), s2->encoding->name);
 
@@ -1944,14 +1664,8 @@
             maxlen = s2->bufused;
     }
 
-    if (dest && *dest) {
-        res           = *dest;
-        res->encoding = Parrot_fixed_8_encoding_ptr;
-        res->charset  = Parrot_binary_charset_ptr;
-    }
-    else
-        res = Parrot_str_new_init(interp, NULL, maxlen,
-                Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+    res = Parrot_str_new_init(interp, NULL, maxlen,
+            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
 
     if (!maxlen) {
         res->bufused = 0;
@@ -1965,15 +1679,10 @@
         Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 #endif
 
-    make_writable(interp, &res, maxlen, enum_stringrep_one);
-
     BITWISE_OR_STRINGS(Parrot_UInt1, Parrot_UInt1, Parrot_UInt1,
             s1, s2, res, maxlen);
     res->bufused = res->strlen = maxlen;
 
-    if (dest)
-        *dest = res;
-
     return res;
 }
 
@@ -1981,11 +1690,10 @@
 /*
 
 =item C<STRING * Parrot_str_bitwise_xor(PARROT_INTERP, const STRING *s1, const
-STRING *s2, STRING **dest)>
+STRING *s2)>
 
 Performs a bitwise C<XOR> on two Parrot strings, performing type and encoding
-conversions if necessary. If the third string is not C<NULL>, then it is
-reused.  Otherwise a new Parrot string is created.
+conversions if necessary.  Returns the result as a new string.
 
 =cut
 
@@ -1995,24 +1703,26 @@
 PARROT_CANNOT_RETURN_NULL
 STRING *
 Parrot_str_bitwise_xor(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1),
-        ARGIN_NULLOK(const STRING *s2), ARGOUT_NULLOK(STRING **dest))
+        ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_bitwise_xor)
     STRING *res;
     size_t  maxlen = 0;
 
-    if (s1) {
+    if (!STRING_IS_NULL(s1)) {
         if (s1->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_xor (%s/%s) unsupported",
                 s1->encoding->name, nonnull_encoding_name(s2));
 
         maxlen = s1->bufused;
     }
 
-    if (s2) {
+    if (!STRING_IS_NULL(s2)) {
         if (s2->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_xor (%s/%s) unsupported",
                 nonnull_encoding_name(s1), s2->encoding->name);
 
@@ -2020,14 +1730,8 @@
             maxlen = s2->bufused;
     }
 
-    if (dest && *dest) {
-        res           = *dest;
-        res->encoding = Parrot_fixed_8_encoding_ptr;
-        res->charset  = Parrot_binary_charset_ptr;
-    }
-    else
-        res = Parrot_str_new_init(interp, NULL, maxlen,
-                Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+    res = Parrot_str_new_init(interp, NULL, maxlen,
+            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
 
     if (!maxlen) {
         res->bufused = 0;
@@ -2041,22 +1745,17 @@
         Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 #endif
 
-    make_writable(interp, &res, maxlen, enum_stringrep_one);
-
     BITWISE_XOR_STRINGS(Parrot_UInt1, Parrot_UInt1, Parrot_UInt1,
             s1, s2, res, maxlen);
     res->bufused = res->strlen = maxlen;
 
-    if (dest)
-        *dest = res;
-
     return res;
 }
 
 
 #define BITWISE_NOT_STRING(type, s, res) \
 do { \
-    if ((s) && (res)) { \
+    if (!STRING_IS_NULL(s) && !STRING_IS_NULL(res)) { \
         const type   *curr   = (type *)(s)->strstart; \
         size_t        length = (s)->strlen; \
         Parrot_UInt1 *dp     = (Parrot_UInt1 *)(res)->strstart; \
@@ -2066,13 +1765,13 @@
     } \
 } while (0)
 
+
 /*
 
-=item C<STRING * Parrot_str_bitwise_not(PARROT_INTERP, const STRING *s, STRING
-**dest)>
+=item C<STRING * Parrot_str_bitwise_not(PARROT_INTERP, const STRING *s)>
 
-Performs a bitwise C<NOT> on a Parrot string. If the second string is
-not C<NULL> then it is reused, otherwise a new Parrot string is created.
+Performs a bitwise C<NOT> on a Parrot string.  Returns the result as a new
+string.
 
 =cut
 
@@ -2081,16 +1780,16 @@
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING *
-Parrot_str_bitwise_not(PARROT_INTERP, ARGIN_NULLOK(const STRING *s),
-    ARGOUT_NULLOK(STRING **dest))
+Parrot_str_bitwise_not(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_bitwise_not)
     STRING *res;
     size_t  len;
 
-    if (s) {
+    if (!STRING_IS_NULL(s)) {
         if (s->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_not (%s/%s) unsupported",
                 s->encoding->name, s->encoding->name);
 
@@ -2099,14 +1798,8 @@
     else
         len = 0;
 
-    if (dest && *dest) {
-        res           = *dest;
-        res->encoding = Parrot_fixed_8_encoding_ptr;
-        res->charset  = Parrot_binary_charset_ptr;
-    }
-    else
-        res = Parrot_str_new_init(interp, NULL, len,
-                Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+    res = Parrot_str_new_init(interp, NULL, len,
+            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
 
     if (!len) {
         res->bufused = 0;
@@ -2120,13 +1813,9 @@
         Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 #endif
 
-    make_writable(interp, &res, len, enum_stringrep_one);
-
     res->strlen = res->bufused = len;
 
     BITWISE_NOT_STRING(Parrot_UInt1, s, res);
-    if (dest)
-        *dest = res;
 
     return res;
 }
@@ -2149,7 +1838,7 @@
 Parrot_str_boolean(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_boolean)
-    const INTVAL len = s ? Parrot_str_byte_length(interp, s) : 0;
+    const INTVAL len = !STRING_IS_NULL(s) ? Parrot_str_byte_length(interp, s) : 0;
 
     if (len == 0)
         return 0;
@@ -2195,7 +1884,9 @@
     return output;
 }
 
+
 /*
+
 State of FSM during number value parsing.
 
 Integer uses only parse_start, parse_before_dot and parse_end.
@@ -2240,7 +1931,7 @@
 Parrot_str_to_int(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_to_int)
-    if (s == NULL)
+    if (STRING_IS_NULL(s))
         return 0;
     {
         const INTVAL        max_safe  = PARROT_INTVAL_MAX / 10;
@@ -2266,8 +1957,9 @@
                     if (i < max_safe || (i == max_safe && nextval <= last_dig))
                         i = i * 10 + nextval;
                     else
-                        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ERR_OVERFLOW,
-                                "Integer value of String '%S' too big", s);
+                        Parrot_ex_throw_from_c_args(interp, NULL,
+                            EXCEPTION_ERR_OVERFLOW,
+                            "Integer value of String '%S' too big", s);
                     state = parse_before_dot;
                 }
                 else if (c == '-') {
@@ -2289,8 +1981,9 @@
                     if (i < max_safe || (i == max_safe && nextval <= last_dig))
                         i = i * 10 + nextval;
                     else
-                        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ERR_OVERFLOW,
-                                "Integer value of String '%S' too big", s);
+                        Parrot_ex_throw_from_c_args(interp, NULL,
+                            EXCEPTION_ERR_OVERFLOW,
+                            "Integer value of String '%S' too big", s);
                 }
                 else
                     state = parse_end;
@@ -2308,6 +2001,7 @@
     }
 }
 
+
 /*
 
 =item C<FLOATVAL Parrot_str_to_num(PARROT_INTERP, const STRING *s)>
@@ -2342,7 +2036,7 @@
     UINTVAL     offs;
     number_parse_state state = parse_start;
 
-    if (!s)
+    if (STRING_IS_NULL(s))
         return 0.0;
 
     ENCODING_ITER_INIT(interp, s, &iter);
@@ -2453,16 +2147,16 @@
     }
 
     /* Support for non-canonical NaN and Inf */
-    /* charpos <=2 because for "-i" iter will be advanced to next char already */
+    /* charpos <= 2 because for "-i" iter already advanced to next char */
     if (check_nan && (iter.charpos <= 2)) {
         STRING *t = Parrot_str_upcase(interp, s);
         if (Parrot_str_equal(interp, t, CONST_STRING(interp, "NAN")))
             return PARROT_FLOATVAL_NAN_QUIET;
         else if (Parrot_str_equal(interp, t, CONST_STRING(interp, "INF"))
-                || Parrot_str_equal(interp, t, CONST_STRING(interp, "INFINITY")))
+             ||  Parrot_str_equal(interp, t, CONST_STRING(interp, "INFINITY")))
             return PARROT_FLOATVAL_INF_POSITIVE;
         else if (Parrot_str_equal(interp, t, CONST_STRING(interp, "-INF"))
-                || Parrot_str_equal(interp, t, CONST_STRING(interp, "-INFINITY")))
+             ||  Parrot_str_equal(interp, t, CONST_STRING(interp, "-INFINITY")))
             return PARROT_FLOATVAL_INF_NEGATIVE;
         else
             return 0.0;
@@ -2546,8 +2240,8 @@
 =item C<char * Parrot_str_to_cstring(PARROT_INTERP, const STRING *s)>
 
 Returns a C string for the specified Parrot string. Use
-C<Parrot_str_free_cstring()> to free the string. Failure to do this will result in
-a memory leak.
+C<Parrot_str_free_cstring()> to free the string. Failure to do this will result
+in a memory leak.
 
 =cut
 
@@ -2560,12 +2254,13 @@
 Parrot_str_to_cstring(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_to_cstring)
-    if (! s) {
+
+    if (STRING_IS_NULL(s)) {
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't convert NULL string");
     }
-    else
-      return string_to_cstring_nullable(interp, s);
+
+    return string_to_cstring_nullable(interp, s);
 }
 
 
@@ -2574,8 +2269,9 @@
 =item C<char * string_to_cstring_nullable(PARROT_INTERP, const STRING *s)>
 
 Returns a C string for the specified Parrot string. Use
-C<Parrot_str_free_cstring()> to free the string. Failure to do this will result in
-a memory leak.
+C<Parrot_str_free_cstring()> to free the string, if it's not NULL. Failure to
+do this will result in a memory leak.  Failure to check if the return value is
+NULL will result in embarrassment for you.
 
 =cut
 
@@ -2588,7 +2284,7 @@
 string_to_cstring_nullable(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(string_to_cstring_nullable)
-    if (!s)
+    if (STRING_IS_NULL(s))
         return NULL;
     else {
         char * const p = (char*)mem_internal_allocate(s->bufused + 1);
@@ -2614,7 +2310,7 @@
 
 PARROT_EXPORT
 void
-Parrot_str_free_cstring(ARGIN_NULLOK(char *p))
+Parrot_str_free_cstring(ARGFREE(char *p))
 {
     ASSERT_ARGS(Parrot_str_free_cstring)
     mem_internal_free((void *)p);
@@ -2633,24 +2329,15 @@
 
 PARROT_EXPORT
 void
-Parrot_str_pin(PARROT_INTERP, ARGMOD(STRING *s))
+Parrot_str_pin(SHIM_INTERP, ARGMOD(STRING *s))
 {
     ASSERT_ARGS(Parrot_str_pin)
-    char  *memory;
-    size_t size;
-
-    /* XXX -lt: COW strings have the external_FLAG set, so this will
-     *          not work for these
-     *          so probably only sysmem should be tested
-     */
-    Parrot_str_write_COW(interp, s);
-
-    size   = Buffer_buflen(s);
-    memory = (char *)mem_internal_allocate(size);
+    size_t size   = Buffer_buflen(s);
+    char  *memory = (char *)mem_internal_allocate(size);
 
     mem_sys_memcopy(memory, Buffer_bufstart(s), size);
     Buffer_bufstart(s) = memory;
-    s->strstart      = memory;
+    s->strstart        = memory;
 
     /* Mark the memory as both from the system and immobile */
     PObj_sysmem_SET(s);
@@ -2676,12 +2363,10 @@
     size_t size;
 
     /* If this string is not marked using system memory,
-     * we just don't do this
-     */
+     * we just don't do this */
     if (!PObj_sysmem_TEST(s))
         return;
 
-    Parrot_str_write_COW(interp, s);
     size = Buffer_buflen(s);
 
     /* We need a handle on the fixed memory so we can get rid of it later */
@@ -2727,18 +2412,22 @@
     UINTVAL     offs;
     size_t      hashval = interp->hash_seed;
 
-    if (!s || !s->strlen)
+    if (STRING_IS_NULL(s) || !s->strlen)
         return hashval;
 
-    /* ZZZZZ workaround for something not setting up encodings right */
-    saneify_string(s);
+    if (s->encoding->hash)
+        hashval = ENCODING_HASH(interp, s, hashval);
+    else {
+        /* ZZZZZ workaround for something not setting up encodings right */
+        ASSERT_STRING_SANITY(s);
 
-    ENCODING_ITER_INIT(interp, s, &iter);
+        ENCODING_ITER_INIT(interp, s, &iter);
 
-    for (offs = 0; offs < s->strlen; ++offs) {
-        const UINTVAL c = iter.get_and_advance(interp, &iter);
-        hashval += hashval << 5;
-        hashval += c;
+        for (offs = 0; offs < s->strlen; ++offs) {
+            const UINTVAL c = iter.get_and_advance(interp, &iter);
+            hashval += hashval << 5;
+            hashval += c;
+        }
     }
 
     s->hashval = hashval;
@@ -2795,8 +2484,8 @@
     String_iter iter;
     unsigned char *dp;
 
-    if (!src)
-        return NULL;
+    if (STRING_IS_NULL(src))
+        return STRINGNULL;
 
     len = src->strlen;
 
@@ -2882,7 +2571,7 @@
         else
             hex = Parrot_sprintf_c(interp, "\\u%04x", c);
 
-        result = Parrot_str_append(interp, result, hex);
+        result = Parrot_str_concat(interp, result, hex);
 
         /* adjust our insert idx */
         i += hex->strlen;
@@ -3002,9 +2691,9 @@
     result->strlen  = d;
     result->bufused = iter.bytepos;
 
-    /* this also validates the string */
+    /* Force validating the string */
     if (encoding != result->encoding)
-        Parrot_str_length(interp, result);
+        result->strlen = CHARSET_CODEPOINTS(interp, result);
 
     if (!CHARSET_VALIDATE(interp, result))
         Parrot_ex_throw_from_c_args(interp, NULL,
@@ -3032,41 +2721,13 @@
 Parrot_str_upcase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_upcase)
-    if (STRING_IS_NULL(s)) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
-            "Can't upcase NULL string");
-    }
-    else {
-        DECL_CONST_CAST;
-        STRING * const dest = Parrot_str_copy(interp, PARROT_const_cast(STRING *, s));
-        Parrot_str_upcase_inplace(interp, dest);
-        return dest;
-    }
-}
-
-
-/*
-
-=item C<void Parrot_str_upcase_inplace(PARROT_INTERP, STRING *s)>
-
-Converts the specified Parrot string to upper case.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_upcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_upcase_inplace)
-    if (STRING_IS_NULL(s)) {
+    if (STRING_IS_NULL(s))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't upcase NULL string");
-    }
     else {
-        Parrot_str_write_COW(interp, s);
-        CHARSET_UPCASE(interp, s);
+        STRING * res = CHARSET_UPCASE(interp, s);
+        res->hashval = 0;
+        return res;
     }
 }
 
@@ -3089,47 +2750,14 @@
 Parrot_str_downcase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_downcase)
-    if (STRING_IS_NULL(s)) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
-            "Can't downcase NULL string");
-    }
-    else {
-        DECL_CONST_CAST;
-        STRING * const dest = Parrot_str_copy(interp, PARROT_const_cast(STRING *, s));
-        Parrot_str_downcase_inplace(interp, dest);
-        return dest;
-    }
-}
-
-
-/*
-
-=item C<void Parrot_str_downcase_inplace(PARROT_INTERP, STRING *s)>
-
-Converts the specified Parrot string to lower case.
-
-=cut
-
-*/
 
-PARROT_EXPORT
-void
-Parrot_str_downcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_downcase_inplace)
-    if (STRING_IS_NULL(s)) {
+    if (STRING_IS_NULL(s))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't downcase NULL string");
-    }
     else {
-        /*
-         * TODO get rid of all the inplace variants. We have for utf8:
-         * * 1 Parrot_str_copy from the non-incase variant
-         * * conversion to utf16, with doubling the buffer
-         * * possibly one more reallocation in downcase
-         */
-        Parrot_str_write_COW(interp, s);
-        CHARSET_DOWNCASE(interp, s);
+        STRING * res = CHARSET_DOWNCASE(interp, s);
+        res->hashval = 0;
+        return res;
     }
 }
 
@@ -3152,41 +2780,14 @@
 Parrot_str_titlecase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_titlecase)
-    if (STRING_IS_NULL(s)) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
-            "Can't titlecase NULL string");
-    }
-    else {
-        DECL_CONST_CAST;
-        STRING * const dest = Parrot_str_copy(interp, PARROT_const_cast(STRING *, s));
-        Parrot_str_titlecase_inplace(interp, dest);
-        return dest;
-    }
-}
-
-
-/*
-
-=item C<void Parrot_str_titlecase_inplace(PARROT_INTERP, STRING *s)>
-
-Converts the specified Parrot string to title case.
 
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_titlecase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_titlecase_inplace)
-    if (STRING_IS_NULL(s)) {
+    if (STRING_IS_NULL(s))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't titlecase NULL string");
-    }
     else {
-        Parrot_str_write_COW(interp, s);
-        CHARSET_TITLECASE(interp, s);
+        STRING * res = CHARSET_TITLECASE(interp, s);
+        res->hashval = 0;
+        return res;
     }
 }
 
@@ -3246,7 +2847,7 @@
 Parrot_string_cstring(SHIM_INTERP, ARGIN(const STRING *str))
 {
     ASSERT_ARGS(Parrot_string_cstring)
-    /* TODO handle NUL and friends */
+    /* TODO handle NULL and friends */
     return str->strstart;
 }
 
@@ -3271,6 +2872,7 @@
         ARGIN(const STRING *s), UINTVAL offset)
 {
     ASSERT_ARGS(Parrot_str_is_cclass)
+
     if (!Parrot_str_byte_length(interp, s))
         return 0;
 
@@ -3297,12 +2899,14 @@
                           UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(Parrot_str_find_cclass)
-    if (!s)
+
+    if (STRING_IS_NULL(s))
         return -1;
 
     return CHARSET_FIND_CCLASS(interp, flags, s, offset, count);
 }
 
+
 /*
 
 =item C<INTVAL Parrot_str_find_not_cclass(PARROT_INTERP, INTVAL flags, STRING
@@ -3324,7 +2928,8 @@
     ARGIN_NULLOK(STRING *s), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(Parrot_str_find_not_cclass)
-    if (!s)
+
+    if (STRING_IS_NULL(s))
         return -1;
 
     return CHARSET_FIND_NOT_CCLASS(interp, flags, s, offset, count);
@@ -3334,10 +2939,10 @@
 /*
 
 =item C<STRING* Parrot_str_change_charset(PARROT_INTERP, STRING *src, INTVAL
-charset_nr, STRING *dest)>
+charset_nr)>
 
-If C<dest> == NULL, converts C<src> to the given charset or encoding inplace.
-Otherwise returns a copy of C<src> with the charset/encoding in C<dest>.
+Converts C<src> to the given charset or encoding and returns the result as a
+new string.
 
 =cut
 
@@ -3348,13 +2953,13 @@
 PARROT_CAN_RETURN_NULL
 STRING*
 Parrot_str_change_charset(PARROT_INTERP, ARGMOD_NULLOK(STRING *src),
-        INTVAL charset_nr, ARGOUT_NULLOK(STRING *dest))
+        INTVAL charset_nr)
 {
     ASSERT_ARGS(Parrot_str_change_charset)
     const CHARSET *new_charset;
 
-    if (!src)
-        return NULL;
+    if (STRING_IS_NULL(src))
+        return STRINGNULL;
 
     new_charset = Parrot_get_charset(interp, charset_nr);
 
@@ -3362,41 +2967,20 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_CHARTYPE,
                 "charset #%d not found", (int) charset_nr);
 
-    /*
-     * dest is an empty string header or NULL, if an inplace
-     * operation is desired
-     */
-    if (dest) {
-        if (new_charset == src->charset) {
-            dest          = Parrot_str_reuse_COW(interp, src, dest);
-            dest->charset = new_charset;
-            /* keep encoding */
-            return dest;
-        }
-
-        dest->charset  = new_charset;
-
-        /* get prefered encoding for charset */
-        dest->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, dest);
-    }
-    else {
-        if (new_charset == src->charset)
-            return src;
-
-        Parrot_str_write_COW(interp, src);
-    }
+    if (new_charset == src->charset)
+        return src;
 
-    return new_charset->to_charset(interp, src, dest);
+    return new_charset->to_charset(interp, src);
 }
 
 
 /*
 
 =item C<STRING* Parrot_str_change_encoding(PARROT_INTERP, STRING *src, INTVAL
-encoding_nr, STRING *dest)>
+encoding_nr)>
 
-If C<dest> == NULL, converts C<src> to the given charset or encoding in place.
-Otherwise returns a copy of C<src> with the charset/encoding in C<dest>
+Converts C<src> to the given charset or encoding and returns the result as a
+new string.
 
 =cut
 
@@ -3407,13 +2991,13 @@
 PARROT_CAN_RETURN_NULL
 STRING*
 Parrot_str_change_encoding(PARROT_INTERP, ARGIN_NULLOK(STRING *src),
-        INTVAL encoding_nr, ARGOUT_NULLOK(STRING *dest))
+        INTVAL encoding_nr)
 {
     ASSERT_ARGS(Parrot_str_change_encoding)
     const ENCODING *new_encoding;
 
-    if (!src)
-        return NULL;
+    if (STRING_IS_NULL(src))
+        return STRINGNULL;
 
     new_encoding = Parrot_get_encoding(interp, encoding_nr);
 
@@ -3421,25 +3005,10 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_CHARTYPE,
             "encoding #%d not found", (int) encoding_nr);
 
-    /*
-     * dest is an empty string header or NULL, if an inplace
-     * operation is desired
-     */
-    if (dest) {
-        dest->encoding = new_encoding;
-        if (new_encoding == src->encoding) {
-            dest = Parrot_str_reuse_COW(interp, src, dest);
-            return dest;
-        }
-    }
-    else {
-        if (new_encoding == src->encoding)
-            return src;
-
-        Parrot_str_write_COW(interp, src);
-    }
+    if (new_encoding == src->encoding)
+        return src;
 
-    return new_encoding->to_encoding(interp, src, dest);
+    return new_encoding->to_encoding(interp, src);
 }
 
 
@@ -3460,7 +3029,8 @@
 Parrot_str_compose(PARROT_INTERP, ARGIN_NULLOK(STRING *src))
 {
     ASSERT_ARGS(Parrot_str_compose)
-    if (!src)
+
+    if (STRING_IS_NULL(src))
         return NULL;
 
     if (!src->strlen)
@@ -3488,24 +3058,105 @@
 Parrot_str_join(PARROT_INTERP, ARGIN_NULLOK(STRING *j), ARGIN(PMC *ar))
 {
     ASSERT_ARGS(Parrot_str_join)
-    STRING *res;
-    STRING *s;
-    const int ar_len = VTABLE_elements(interp, ar);
-    int i;
+    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);
 
-    s   = VTABLE_get_string_keyed_int(interp, ar, 0);
-    res = s ? Parrot_str_copy(interp, s) : NULL;
+    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;
+    }
+
+    /* 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 += s->bufused - new_s->bufused;
+            }
+        }
+    }
+
+    /* 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;
+    }
 
     for (i = 1; i < ar_len; ++i) {
-        STRING * const next = VTABLE_get_string_keyed_int(interp, ar, i);
+        STRING *next = chunks[i];
+
+        if (STRING_IS_NULL(next))
+            continue;
+
+        mem_sys_memcopy(pos, j->strstart, j->bufused);
+        pos += j->bufused;
 
-        res  = Parrot_str_append(interp, res, j);
-        res  = Parrot_str_append(interp, res, next);
+        mem_sys_memcopy(pos, next->strstart, next->bufused);
+        pos += next->bufused;
+
+        PARROT_ASSERT(pos <= res->strstart + Buffer_buflen(res));
     }
 
+    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;
 }
 
@@ -3515,8 +3166,8 @@
 =item C<PMC* Parrot_str_split(PARROT_INTERP, STRING *delim, STRING *str)>
 
 Splits the string C<str> at the delimiter C<delim>, returning a
-C<ResizableStringArray>, or his mapped type in the current HLL,
-of results. Returns PMCNULL if the string or the delimiter is NULL.
+C<ResizableStringArray>, or his mapped type in the current HLL, of results.
+Returns PMCNULL if the string or the delimiter is NULL.
 
 =cut
 
@@ -3524,7 +3175,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
+PARROT_CAN_RETURN_NULL
 PMC*
 Parrot_str_split(PARROT_INTERP,
     ARGIN_NULLOK(STRING *delim), ARGIN_NULLOK(STRING *str))
@@ -3536,7 +3187,8 @@
     if (STRING_IS_NULL(delim) || STRING_IS_NULL(str))
         return PMCNULL;
 
-    res  = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_ResizableStringArray));
+    res  = Parrot_pmc_new(interp,
+            Parrot_get_ctx_HLL_type(interp, enum_class_ResizableStringArray));
     slen = Parrot_str_byte_length(interp, str);
 
     if (!slen)
@@ -3549,7 +3201,7 @@
         VTABLE_set_integer_native(interp, res, slen);
 
         for (i = 0; i < slen; ++i) {
-            STRING * const p = Parrot_str_substr(interp, str, i, 1, NULL, 0);
+            STRING * const p = Parrot_str_substr(interp, str, i, 1);
             VTABLE_set_string_keyed_int(interp, res, i, p);
         }
 
@@ -3567,7 +3219,7 @@
 
     while (ps <= slen) {
         const int      pl   = pe - ps;
-        STRING * const tstr = Parrot_str_substr(interp, str, ps, pl, NULL, 0);
+        STRING * const tstr = Parrot_str_substr(interp, str, ps, pl);
 
         VTABLE_push_string(interp, res, tstr);
         ps = pe + Parrot_str_byte_length(interp, delim);
@@ -3609,6 +3261,7 @@
     unsigned int base, int minus)
 {
     ASSERT_ARGS(Parrot_str_from_uint)
+
     /* the buffer must be at least as long as this */
     char               *p    = tc + sizeof (UHUGEINTVAL)*8 + 1;
     const char * const  tail = p;
@@ -3617,12 +3270,12 @@
 
     do {
         const char cur = (char)(num % base);
-        if (cur < 10) {
+
+        if (cur < 10)
             *--p = (char)('0' + cur);
-        }
-        else {
+        else
             *--p = (char)('a' + cur - 10);
-        }
+
     } while (num /= base);
 
     if (minus)
@@ -3661,6 +3314,7 @@
     return Parrot_str_from_uint(interp, tc, (UHUGEINTVAL)num, base, is_neg);
 }
 
+
 /*
 
 =back

Modified: branches/avl_string_cache/src/string/charset.c
==============================================================================
--- branches/avl_string_cache/src/string/charset.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/charset.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -29,16 +29,16 @@
 #include "charset/iso-8859-1.h"
 #include "charset/unicode.h"
 
-CHARSET *Parrot_iso_8859_1_charset_ptr;
-CHARSET *Parrot_binary_charset_ptr;
-CHARSET *Parrot_default_charset_ptr;
-CHARSET *Parrot_unicode_charset_ptr;
-CHARSET *Parrot_ascii_charset_ptr;
+const CHARSET *Parrot_iso_8859_1_charset_ptr;
+const CHARSET *Parrot_binary_charset_ptr;
+const CHARSET *Parrot_default_charset_ptr;
+const CHARSET *Parrot_unicode_charset_ptr;
+const CHARSET *Parrot_ascii_charset_ptr;
 
 /* all registered charsets are collected in one global structure */
 
 typedef struct To_converter {
-    NOTNULL(CHARSET *to);
+    NOTNULL(const CHARSET *to);
     NOTNULL(charset_converter_t func);
 } To_converter;
 
@@ -97,7 +97,7 @@
 */
 
 PARROT_EXPORT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 PARROT_MALLOC
 CHARSET *
 Parrot_new_charset(PARROT_INTERP)
@@ -168,7 +168,8 @@
 
 /*
 
-=item C<CHARSET * Parrot_load_charset(PARROT_INTERP, const char *charsetname)>
+=item C<const CHARSET * Parrot_load_charset(PARROT_INTERP, const char
+*charsetname)>
 
 Throws an exception (Can't load charsets dynamically yet. https://trac.parrot.org/parrot/wiki/StringsTasklist).
 
@@ -179,7 +180,7 @@
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-CHARSET *
+const CHARSET *
 Parrot_load_charset(PARROT_INTERP, ARGIN(const char *charsetname))
 {
     ASSERT_ARGS(Parrot_load_charset)
@@ -243,7 +244,7 @@
 
 /*
 
-=item C<STRING* Parrot_charset_name(PARROT_INTERP, INTVAL number_of_charset)>
+=item C<STRING * Parrot_charset_name(PARROT_INTERP, INTVAL number_of_charset)>
 
 Returns the name of the charset given by the INTVAL index
 C<number_of_charset>.
@@ -255,12 +256,12 @@
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-STRING*
+STRING *
 Parrot_charset_name(SHIM_INTERP, INTVAL number_of_charset)
 {
     ASSERT_ARGS(Parrot_charset_name)
     if (number_of_charset < 0 || number_of_charset >= all_charsets->n_charsets)
-        return NULL;
+        return STRINGNULL;
     return all_charsets->set[number_of_charset].name;
 }
 
@@ -509,7 +510,7 @@
 /*
 
 =item C<INTVAL Parrot_make_default_charset(PARROT_INTERP, const char
-*charsetname, CHARSET *charset)>
+*charsetname, const CHARSET *charset)>
 
 Sets the current default charset to C<charset> with name C<charsetname>.
 
@@ -520,7 +521,7 @@
 PARROT_EXPORT
 INTVAL
 Parrot_make_default_charset(SHIM_INTERP, SHIM(const char *charsetname),
-        ARGIN(CHARSET *charset))
+        ARGIN(const CHARSET *charset))
 {
     ASSERT_ARGS(Parrot_make_default_charset)
     Parrot_default_charset_ptr = charset;
@@ -587,7 +588,7 @@
 /*
 
 =item C<void Parrot_register_charset_converter(PARROT_INTERP, const CHARSET
-*lhs, CHARSET *rhs, charset_converter_t func)>
+*lhs, const CHARSET *rhs, charset_converter_t func)>
 
 Registers a converter C<func> from charset C<lhs> to C<rhs>.
 
@@ -598,7 +599,7 @@
 PARROT_EXPORT
 void
 Parrot_register_charset_converter(PARROT_INTERP,
-        ARGIN(const CHARSET *lhs), ARGIN(CHARSET *rhs),
+        ARGIN(const CHARSET *lhs), ARGIN(const CHARSET *rhs),
         ARGIN(charset_converter_t func))
 {
     ASSERT_ARGS(Parrot_register_charset_converter)

Modified: branches/avl_string_cache/src/string/charset/ascii.c
==============================================================================
--- branches/avl_string_cache/src/string/charset/ascii.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/charset/ascii.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -42,10 +42,15 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*src);
 
-static void downcase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase(PARROT_INTERP, ARGIN(const STRING *source_string))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void downcase_first(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase_first(PARROT_INTERP,
+    ARGIN(const STRING *source_string))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
@@ -73,56 +78,41 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-static void set_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL replace_count,
-    ARGMOD(STRING *insert_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*insert_string);
-
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static STRING * string_from_codepoint(PARROT_INTERP, UINTVAL codepoint)
         __attribute__nonnull__(1);
 
-static void titlecase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase(PARROT_INTERP, ARGIN(const STRING *source_string))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void titlecase_first(SHIM_INTERP, ARGMOD(STRING *source_string))
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*source_string);
-
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_ascii(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING* titlecase_first(PARROT_INTERP,
+    ARGIN(const STRING *source_string))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_charset(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING * to_ascii(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_unicode(PARROT_INTERP,
-    ARGMOD(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING * to_charset(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
-static void upcase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase(PARROT_INTERP, ARGIN(const STRING *source_string))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void upcase_first(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase_first(PARROT_INTERP,
+    ARGIN(const STRING *source_string))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
@@ -137,9 +127,11 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_downcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
@@ -149,29 +141,26 @@
 #define ASSERT_ARGS_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_set_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(insert_string))
 #define ASSERT_ARGS_string_from_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_titlecase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_to_ascii __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_to_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_to_unicode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_upcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_validate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -202,53 +191,7 @@
 
 /*
 
-=item C<static void set_graphemes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL replace_count, STRING *insert_string)>
-
-Sets the graphemes for C<source_string>, starting at C<offset>. Replace
-C<replace_count> graphemes with those from STRING C<insert_string>.
-
-=cut
-
-*/
-
-static void
-set_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL replace_count, ARGMOD(STRING *insert_string))
-{
-    ASSERT_ARGS(set_graphemes)
-    ENCODING_SET_BYTES(interp, source_string, offset,
-            replace_count, insert_string);
-
-}
-
-/*
-
-=item C<STRING * ascii_get_graphemes_inplace(PARROT_INTERP, STRING
-*source_string, UINTVAL offset, UINTVAL count, STRING *dest_string)>
-
-Retrieves the graphemes in place for ascii STRING C<source_string>,
-starting at C<offset>. Retrieves C<count> graphemes and puts them
-into C<dest_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-ascii_get_graphemes_inplace(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *dest_string))
-{
-    ASSERT_ARGS(ascii_get_graphemes_inplace)
-    return ENCODING_GET_BYTES_INPLACE(interp, source_string,
-            offset, count, dest_string);
-}
-
-/*
-
-=item C<static STRING * to_ascii(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_ascii(PARROT_INTERP, STRING *src)>
 
 Attempts to convert STRING C<src> to ASCII in STRING C<dest>. Throws
 an exception if unconvertable UNICODE characters are involved.
@@ -259,7 +202,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_ascii(PARROT_INTERP, ARGIN(STRING *src), ARGMOD_NULLOK(STRING *dest))
+to_ascii(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(to_ascii)
     String_iter iter;
@@ -267,13 +210,9 @@
     unsigned char *p;
     const UINTVAL len = src->strlen;
 
-    if (dest) {
-        Parrot_gc_reallocate_string_storage(interp, dest, len);
-    }
-    else {
-        /* the string can't grow - replace inplace */
-        dest = src;
-    }
+    /* the string can't grow. Just clone it */
+    STRING * dest = Parrot_str_clone(interp, src);
+
     p = (unsigned char *)dest->strstart;
     ENCODING_ITER_INIT(interp, src, &iter);
     for (offs = 0; offs < len; ++offs) {
@@ -292,35 +231,7 @@
 
 /*
 
-=item C<static STRING * to_unicode(PARROT_INTERP, STRING *src, STRING *dest)>
-
-Converts the ASCII STRING C<src> to UNICODE STRING C<dest>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-to_unicode(PARROT_INTERP, ARGMOD(STRING *src), ARGMOD_NULLOK(STRING *dest))
-{
-    ASSERT_ARGS(to_unicode)
-    if (dest) {
-        dest->charset = Parrot_unicode_charset_ptr;
-        dest->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, dest);
-        Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-        return dest;
-    }
-    else {
-        src->charset = Parrot_unicode_charset_ptr;
-        src->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, src);
-        return src;
-    }
-}
-
-/*
-
-=item C<static STRING * to_charset(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_charset(PARROT_INTERP, STRING *src)>
 
 Converts STRING C<src> to ASCII charset STRING C<dest>.
 
@@ -330,17 +241,17 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_charset(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_charset(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(to_charset)
     const charset_converter_t conversion_func =
         Parrot_find_charset_converter(interp, src->charset, Parrot_ascii_charset_ptr);
 
     if (conversion_func) {
-         return conversion_func(interp, src, dest);
+         return conversion_func(interp, src);
     }
     else {
-        return to_ascii(interp, src, dest);
+        return to_ascii(interp, src);
     }
 }
 
@@ -361,7 +272,7 @@
 compose(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(compose)
-    return Parrot_str_copy(interp, src);
+    return src;
 }
 
 /* A noop. can't decompose ascii */
@@ -381,12 +292,12 @@
 decompose(PARROT_INTERP, ARGMOD(STRING *src))
 {
     ASSERT_ARGS(decompose)
-    return Parrot_str_copy(interp, src);
+    return src;
 }
 
 /*
 
-=item C<static void upcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase(PARROT_INTERP, const STRING *source_string)>
 
 Converts the STRING C<source_string> to all uppercase.
 
@@ -394,25 +305,29 @@
 
 */
 
-static void
-upcase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(upcase)
+    STRING * const result = Parrot_str_clone(interp, source_string);
     const UINTVAL n = source_string->strlen;
 
     if (n) {
-        char * const buffer = source_string->strstart;
+        char * const buffer = result->strstart;
         UINTVAL offset;
 
         for (offset = 0; offset < n; offset++) {
             buffer[offset] = (char)toupper((unsigned char)buffer[offset]);
         }
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void downcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase(PARROT_INTERP, const STRING *source_string)>
 
 Converts the STRING C<source_string> to all lower-case.
 
@@ -420,25 +335,29 @@
 
 */
 
-static void
-downcase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(downcase)
-    const UINTVAL n = source_string->strlen;
+    STRING       *result = Parrot_str_clone(interp, source_string);
+    const UINTVAL n      = source_string->strlen;
 
     if (n) {
-        char * const buffer = source_string->strstart;
+        char * const buffer = result->strstart;
         UINTVAL offset;
 
         for (offset = 0; offset < n; offset++) {
             buffer[offset] = (char)tolower((unsigned char)buffer[offset]);
         }
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void titlecase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase(PARROT_INTERP, const STRING *source_string)>
 
 Converts the STRING given by C<source_string> to title case, where
 the first character is upper case and all the rest of the characters
@@ -448,14 +367,16 @@
 
 */
 
-static void
-titlecase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(titlecase)
-    const UINTVAL n = source_string->strlen;
+    STRING       *result = Parrot_str_clone(interp, source_string);
+    const UINTVAL n      = source_string->strlen;
 
     if (n) {
-        char * const buffer = source_string->strstart;
+        char * const buffer = result->strstart;
         UINTVAL offset;
 
         buffer[0] = (char)toupper((unsigned char)buffer[0]);
@@ -463,11 +384,13 @@
             buffer[offset] = (char)tolower((unsigned char)buffer[offset]);
         }
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void upcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase_first(PARROT_INTERP, const STRING *source_string)>
 
 Sets the first character in the STRING C<source_string> to upper case,
 but doesn't modify the rest of the string.
@@ -476,19 +399,25 @@
 
 */
 
-static void
-upcase_first(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase_first(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(upcase_first)
-    if (source_string->strlen) {
-        char * const buffer = source_string->strstart;
+    STRING *result = Parrot_str_clone(interp, source_string);
+
+    if (result->strlen) {
+        char * const buffer = result->strstart;
         buffer[0] = (char)toupper((unsigned char)buffer[0]);
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void downcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase_first(PARROT_INTERP, const STRING
+*source_string)>
 
 Sets the first character of the STRING C<source_string> to lowercase,
 but doesn't modify the rest of the characters.
@@ -497,19 +426,25 @@
 
 */
 
-static void
-downcase_first(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase_first(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(downcase_first)
-    if (source_string->strlen) {
-        char * const buffer = source_string->strstart;
+    STRING *result = Parrot_str_clone(interp, source_string);
+
+    if (result->strlen) {
+        char * const buffer = result->strstart;
         buffer[0] = (char)tolower((unsigned char)buffer[0]);
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void titlecase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase_first(PARROT_INTERP, const STRING
+*source_string)>
 
 Converts the first letter of STRING C<source_string> to upper case,
 but doesn't modify the rest of the string.
@@ -518,14 +453,19 @@
 
 */
 
-static void
-titlecase_first(SHIM_INTERP, ARGMOD(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase_first(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(titlecase_first)
-    if (source_string->strlen) {
-        char * const buffer = source_string->strstart;
+    STRING *result = Parrot_str_clone(interp, source_string);
+
+    if (result->strlen) {
+        char * const buffer = result->strstart;
         buffer[0] = (char)toupper((unsigned char)buffer[0]);
     }
+
+    return result;
 }
 
 /*
@@ -550,8 +490,7 @@
     const UINTVAL min_len = l_len > r_len ? r_len : l_len;
     String_iter iter;
 
-    if (lhs->encoding == Parrot_fixed_8_encoding_ptr &&
-            rhs->encoding == Parrot_fixed_8_encoding_ptr) {
+    if (lhs->encoding == rhs->encoding) {
         const int ret_val = memcmp(lhs->strstart, rhs->strstart, min_len);
         if (ret_val)
             return ret_val < 0 ? -1 : 1;
@@ -856,7 +795,7 @@
 
 /*
 
-=item C<const CHARSET * Parrot_charset_ascii_init(PARROT_INTERP)>
+=item C<void Parrot_charset_ascii_init(PARROT_INTERP)>
 
 Initialize the ASCII charset but registering all the necessary
 function pointers and settings.
@@ -865,8 +804,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET *
+void
 Parrot_charset_ascii_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_charset_ascii_init)
@@ -874,8 +812,6 @@
     static const CHARSET base_set = {
         "ascii",
         ascii_get_graphemes,
-        ascii_get_graphemes_inplace,
-        set_graphemes,
         to_charset,
         compose,
         decompose,
@@ -900,13 +836,13 @@
     STRUCT_COPY_FROM_STRUCT(return_set, base_set);
     return_set->preferred_encoding = Parrot_fixed_8_encoding_ptr;
     Parrot_register_charset(interp, "ascii", return_set);
-    return return_set;
+
+    return;
 }
 
 /*
 
-=item C<STRING * charset_cvt_ascii_to_binary(PARROT_INTERP, STRING *src, STRING
-*dest)>
+=item C<STRING * charset_cvt_ascii_to_binary(PARROT_INTERP, STRING *src)>
 
 Converts an ASCII STRING C<src> to a binary STRING C<dest>.
 
@@ -916,29 +852,24 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING *
-charset_cvt_ascii_to_binary(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+charset_cvt_ascii_to_binary(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(charset_cvt_ascii_to_binary)
-    if (dest) {
-        UINTVAL offs;
+    STRING *dest = Parrot_str_clone(interp, src);
+    UINTVAL offs;
 
-        Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-        dest->bufused = src->bufused;
-        dest->strlen  = src->strlen;
-        for (offs = 0; offs < src->strlen; ++offs) {
-            const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
-            ENCODING_SET_BYTE(interp, dest, offs, c);
-        }
-        return dest;
+    for (offs = 0; offs < src->strlen; ++offs) {
+        const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
+        ENCODING_SET_BYTE(interp, dest, offs, c);
     }
-    src->charset = Parrot_binary_charset_ptr;
-    return src;
+
+    dest->charset = Parrot_binary_charset_ptr;
+    return dest;
 }
 
 /*
 
-=item C<STRING * charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, STRING *src,
-STRING *dest)>
+=item C<STRING * charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, STRING *src)>
 
 Converts ASCII STRING C<src> to ISO8859-1 STRING C<dest>.
 
@@ -948,24 +879,19 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING *
-charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(charset_cvt_ascii_to_iso_8859_1)
-    if (dest) {
-        UINTVAL offs;
+    STRING * dest = Parrot_str_clone(interp, src);
+    UINTVAL offs;
 
-        Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-        dest->bufused = src->bufused;
-        dest->strlen  = src->strlen;
-        for (offs = 0; offs < src->strlen; ++offs) {
-            const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
-            ENCODING_SET_BYTE(interp, dest, offs, c);
-        }
-        return dest;
+    for (offs = 0; offs < src->strlen; ++offs) {
+        const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
+        ENCODING_SET_BYTE(interp, dest, offs, c);
     }
-    src->charset = Parrot_iso_8859_1_charset_ptr;
-    return src;
+
+    dest->charset = Parrot_iso_8859_1_charset_ptr;
+    return dest;
 }
 
 /*

Modified: branches/avl_string_cache/src/string/charset/ascii.h
==============================================================================
--- branches/avl_string_cache/src/string/charset/ascii.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/charset/ascii.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -61,29 +61,13 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-STRING * ascii_get_graphemes_inplace(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *dest_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*dest_string);
-
 PARROT_CANNOT_RETURN_NULL
-STRING * charset_cvt_ascii_to_binary(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+STRING * charset_cvt_ascii_to_binary(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-STRING * charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+STRING * charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -96,8 +80,7 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_ascii_init(PARROT_INTERP)
+void Parrot_charset_ascii_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_ascii_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -117,10 +100,6 @@
 #define ASSERT_ARGS_ascii_get_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_ascii_get_graphemes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(dest_string))
 #define ASSERT_ARGS_charset_cvt_ascii_to_binary __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))

Modified: branches/avl_string_cache/src/string/charset/binary.c
==============================================================================
--- branches/avl_string_cache/src/string/charset/binary.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/charset/binary.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -51,10 +51,13 @@
 static STRING* decompose(PARROT_INTERP, SHIM(STRING *source_string))
         __attribute__nonnull__(1);
 
-static void downcase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase(PARROT_INTERP, SHIM(const STRING *source_string))
         __attribute__nonnull__(1);
 
-static void downcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase_first(PARROT_INTERP,
+    SHIM(const STRING *source_string))
         __attribute__nonnull__(1);
 
 static INTVAL find_cclass(SHIM_INTERP,
@@ -74,37 +77,31 @@
     SHIM(const STRING *source_string),
     SHIM(UINTVAL offset));
 
-static void set_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL replace_count,
-    ARGMOD(STRING *insert_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*insert_string);
-
 PARROT_CANNOT_RETURN_NULL
 static STRING * string_from_codepoint(PARROT_INTERP, UINTVAL codepoint)
         __attribute__nonnull__(1);
 
-static void titlecase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase(PARROT_INTERP, SHIM(const STRING *source_string))
         __attribute__nonnull__(1);
 
-static void titlecase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase_first(PARROT_INTERP,
+    SHIM(const STRING *source_string))
         __attribute__nonnull__(1);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* to_charset(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING* to_charset(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void upcase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase(PARROT_INTERP, SHIM(const STRING *source_string))
         __attribute__nonnull__(1);
 
-static void upcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase_first(PARROT_INTERP,
+    SHIM(const STRING *source_string))
         __attribute__nonnull__(1);
 
 static UINTVAL validate(SHIM_INTERP, SHIM(STRING *source_string));
@@ -124,10 +121,6 @@
 #define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_find_not_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_set_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(insert_string))
 #define ASSERT_ARGS_string_from_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -152,31 +145,10 @@
 #define EXCEPTION(err, str) \
     Parrot_ex_throw_from_c_args(interp, NULL, (err), (str))
 
-/*
-
-=item C<static void set_graphemes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL replace_count, STRING *insert_string)>
-
-Sets the graphemes for STRING C<source_string>, starting at offset
-C<offset>. Replaces C<replace_count> graphemes from STRING
-C<insert_string>.
-
-=cut
-
-*/
-
-static void
-set_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL replace_count, ARGMOD(STRING *insert_string))
-{
-    ASSERT_ARGS(set_graphemes)
-    ENCODING_SET_BYTES(interp, source_string, offset,
-            replace_count, insert_string);
-}
 
 /*
 
-=item C<static STRING* to_charset(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING* to_charset(PARROT_INTERP, STRING *src)>
 
 Converts the STRING C<src> to STRING C<dest> in binary mode. Throws
 an exception if a suitable conversion function is not found.
@@ -187,14 +159,14 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-to_charset(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_charset(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(to_charset)
     charset_converter_t conversion_func =
         Parrot_find_charset_converter(interp, src->charset, Parrot_binary_charset_ptr);
 
     if (conversion_func)
-         return conversion_func(interp, src, dest);
+         return conversion_func(interp, src);
 
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
         "to_charset for binary not implemented");
@@ -240,7 +212,7 @@
 
 /*
 
-=item C<static void upcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase(PARROT_INTERP, const STRING *source_string)>
 
 Throws an exception because we cannot convert a binary string to
 upper case.
@@ -249,8 +221,9 @@
 
 */
 
-static void
-upcase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase(PARROT_INTERP, SHIM(const STRING *source_string))
 {
     ASSERT_ARGS(upcase)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't upcase binary data");
@@ -258,7 +231,7 @@
 
 /*
 
-=item C<static void downcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase(PARROT_INTERP, const STRING *source_string)>
 
 Throws an exception because we cannot convert a binary string to
 lower-case.
@@ -267,8 +240,9 @@
 
 */
 
-static void
-downcase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase(PARROT_INTERP, SHIM(const STRING *source_string))
 {
     ASSERT_ARGS(downcase)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't downcase binary data");
@@ -276,7 +250,7 @@
 
 /*
 
-=item C<static void titlecase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase(PARROT_INTERP, const STRING *source_string)>
 
 Throws an exception because we cannot convert a binary string to
 title case.
@@ -285,8 +259,9 @@
 
 */
 
-static void
-titlecase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase(PARROT_INTERP, SHIM(const STRING *source_string))
 {
     ASSERT_ARGS(titlecase)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't titlecase binary data");
@@ -294,7 +269,7 @@
 
 /*
 
-=item C<static void upcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase_first(PARROT_INTERP, const STRING *source_string)>
 
 Throws an exception because we cannot set the first "character" of the
 binary string to uppercase.
@@ -303,8 +278,9 @@
 
 */
 
-static void
-upcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase_first(PARROT_INTERP, SHIM(const STRING *source_string))
 {
     ASSERT_ARGS(upcase_first)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't upcase binary data");
@@ -312,7 +288,8 @@
 
 /*
 
-=item C<static void downcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase_first(PARROT_INTERP, const STRING
+*source_string)>
 
 Throws an exception because we cannot set the first "character"
 of the binary string to lowercase.
@@ -321,8 +298,9 @@
 
 */
 
-static void
-downcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase_first(PARROT_INTERP, SHIM(const STRING *source_string))
 {
     ASSERT_ARGS(downcase_first)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't downcase binary data");
@@ -330,7 +308,8 @@
 
 /*
 
-=item C<static void titlecase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase_first(PARROT_INTERP, const STRING
+*source_string)>
 
 Throws an exception because we can't convert the first "character"
 of binary data to title case.
@@ -339,8 +318,9 @@
 
 */
 
-static void
-titlecase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase_first(PARROT_INTERP, SHIM(const STRING *source_string))
 {
     ASSERT_ARGS(titlecase_first)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't titlecase binary data");
@@ -500,7 +480,7 @@
 
 /*
 
-=item C<const CHARSET * Parrot_charset_binary_init(PARROT_INTERP)>
+=item C<void Parrot_charset_binary_init(PARROT_INTERP)>
 
 Initialize the binary charset, including function pointers and
 settings.
@@ -509,8 +489,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET *
+void
 Parrot_charset_binary_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_charset_binary_init)
@@ -518,8 +497,6 @@
     static const CHARSET base_set = {
         "binary",
         ascii_get_graphemes,
-        ascii_get_graphemes_inplace,
-        set_graphemes,
         to_charset,
         compose,
         decompose,
@@ -544,7 +521,8 @@
     STRUCT_COPY_FROM_STRUCT(return_set, base_set);
     return_set->preferred_encoding = Parrot_fixed_8_encoding_ptr;
     Parrot_register_charset(interp, "binary", return_set);
-    return return_set;
+
+    return;
 
 }
 

Modified: branches/avl_string_cache/src/string/charset/binary.h
==============================================================================
--- branches/avl_string_cache/src/string/charset/binary.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/charset/binary.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/charset/binary.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_binary_init(PARROT_INTERP)
+void Parrot_charset_binary_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_charset_binary_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/avl_string_cache/src/string/charset/iso-8859-1.c
==============================================================================
--- branches/avl_string_cache/src/string/charset/iso-8859-1.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/charset/iso-8859-1.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -35,11 +35,14 @@
 static STRING* decompose(PARROT_INTERP, SHIM(STRING *src))
         __attribute__nonnull__(1);
 
-static void downcase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase(PARROT_INTERP, ARGIN(const STRING *source_string))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void downcase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase_first(PARROT_INTERP,
+    ARGIN(const STRING *source_string))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -66,57 +69,45 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-static void set_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL replace_count,
-    ARGMOD(STRING *insert_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*insert_string);
-
 PARROT_CANNOT_RETURN_NULL
 static STRING * string_from_codepoint(PARROT_INTERP, UINTVAL codepoint)
         __attribute__nonnull__(1);
 
-static void titlecase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase(PARROT_INTERP, ARGIN(const STRING *source_string))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void titlecase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase_first(PARROT_INTERP,
+    ARGIN(const STRING *source_string))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-static STRING * to_charset(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING * to_charset(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_iso_8859_1(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING * to_iso_8859_1(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_unicode(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING * to_unicode(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
-static void upcase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase(PARROT_INTERP, ARGIN(const STRING *source_string))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void upcase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase_first(PARROT_INTERP,
+    ARGIN(const STRING *source_string))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -144,10 +135,6 @@
 #define ASSERT_ARGS_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_set_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(insert_string))
 #define ASSERT_ARGS_string_from_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -181,28 +168,7 @@
 
 /*
 
-=item C<static void set_graphemes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL replace_count, STRING *insert_string)>
-
-Sets C<replace_count> graphemes in STRING C<source_string> starting at offset C<offset>.
-Gets the replacement graphemes from STRING C<insert_string>.
-
-=cut
-
-*/
-
-static void
-set_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL replace_count, ARGMOD(STRING *insert_string))
-{
-    ASSERT_ARGS(set_graphemes)
-    ENCODING_SET_BYTES(interp, source_string, offset,
-            replace_count, insert_string);
-}
-
-/*
-
-=item C<static STRING * to_iso_8859_1(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_iso_8859_1(PARROT_INTERP, STRING *src)>
 
 Converts STRING C<src> to iso-8859-1 in STRING C<dest>.
 
@@ -212,22 +178,16 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_iso_8859_1(PARROT_INTERP, ARGIN(STRING *src), ARGMOD_NULLOK(STRING *dest))
+to_iso_8859_1(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(to_iso_8859_1)
     UINTVAL offs, 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);
     src_len = src->strlen;
-    if (dest) {
-        Parrot_gc_reallocate_string_storage(interp, dest, src_len);
-        dest->strlen  = src_len;
-    }
-    else {
-        /* iso-8859-1 is never bigger then source */
-        dest = src;
-    }
     dest->bufused = src_len;
     dest->charset = Parrot_iso_8859_1_charset_ptr;
     dest->encoding = Parrot_fixed_8_encoding_ptr;
@@ -244,7 +204,7 @@
 
 /*
 
-=item C<static STRING * to_unicode(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_unicode(PARROT_INTERP, STRING *src)>
 
 Converts STRING C<src> to unicode STRING C<dest>.
 
@@ -254,40 +214,37 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_unicode(PARROT_INTERP, ARGIN(STRING *src), ARGMOD_NULLOK(STRING *dest))
+to_unicode(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(to_unicode)
-    if (dest) {
-        UINTVAL offs;
-        String_iter iter;
-
-        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);
-
-            if (iter.bytepos >= Buffer_buflen(dest) - 4) {
-                UINTVAL need = (UINTVAL)((src->strlen - offs) * 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 * dest = Parrot_str_clone(interp, src);
+    UINTVAL offs;
+    String_iter iter;
+
+    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);
+
+        if (iter.bytepos >= Buffer_buflen(dest) - 4) {
+            UINTVAL need = (UINTVAL)((src->strlen - offs) * 1.5);
+            if (need < 16)
+                need = 16;
+            Parrot_gc_reallocate_string_storage(interp, dest,
+                    Buffer_buflen(dest) + need);
         }
-        dest->bufused = iter.bytepos;
-        dest->strlen  = iter.charpos;
-        return dest;
+        iter.set_and_advance(interp, &iter, c);
     }
-    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-            "to_unicode inplace for iso-8859-1 not implemented");
+    dest->bufused = iter.bytepos;
+    dest->strlen  = iter.charpos;
+    return dest;
 }
 
 /*
 
-=item C<static STRING * to_charset(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_charset(PARROT_INTERP, STRING *src)>
 
 Converts the STRING C<src> to an ISO-8859-1 STRING C<dest>.
 
@@ -298,16 +255,16 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static STRING *
-to_charset(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_charset(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(to_charset)
     const charset_converter_t conversion_func =
         Parrot_find_charset_converter(interp, src->charset, Parrot_iso_8859_1_charset_ptr);
 
     if (conversion_func)
-        return conversion_func(interp, src, dest);
+        return conversion_func(interp, src);
     else
-        return to_iso_8859_1(interp, src, dest);
+        return to_iso_8859_1(interp, src);
 }
 
 
@@ -329,7 +286,7 @@
 compose(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(compose)
-    return Parrot_str_copy(interp, src);
+    return src;
 }
 
 /*
@@ -353,7 +310,7 @@
 
 /*
 
-=item C<static void upcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase(PARROT_INTERP, const STRING *source_string)>
 
 Convert all graphemes in the STRING C<source_string> to upper case, for those
 graphemes that support cases.
@@ -362,19 +319,20 @@
 
 */
 
-static void
-upcase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(upcase)
     unsigned char *buffer;
-    UINTVAL offset = 0;
+    UINTVAL        offset = 0;
+    STRING        *result = Parrot_str_clone(interp, source_string);
 
-    if (!source_string->strlen)
-        return;
+    if (!result->strlen)
+        return result;
 
-    Parrot_str_write_COW(interp, source_string);
-    buffer = (unsigned char *)source_string->strstart;
-    for (offset = 0; offset < source_string->strlen; offset++) {
+    buffer = (unsigned char *)result->strstart;
+    for (offset = 0; offset < result->strlen; offset++) {
         unsigned int c = buffer[offset]; /* XXX use encoding ? */
         if (c >= 0xe0 && c != 0xf7)
             c &= ~0x20;
@@ -382,11 +340,13 @@
             c = toupper((unsigned char)c);
         buffer[offset] = (unsigned char)c;
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void downcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase(PARROT_INTERP, const STRING *source_string)>
 
 Converts all graphemes in STRING C<source_string> to lower-case, for those graphemes
 that support cases.
@@ -395,30 +355,34 @@
 
 */
 
-static void
-downcase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(downcase)
-    if (source_string->strlen) {
-        UINTVAL offset;
-        unsigned char *buffer;
-
-        Parrot_str_write_COW(interp, source_string);
-        buffer = (unsigned char *)source_string->strstart;
-        for (offset = 0; offset < source_string->strlen; offset++) {
-            unsigned int c = buffer[offset];
-            if (c >= 0xc0 && c != 0xd7 && c <= 0xde)
-                c |= 0x20;
-            else
-                c = tolower((unsigned char)c);
-            buffer[offset] = (unsigned char)c;
-        }
+    unsigned char *buffer;
+    UINTVAL        offset = 0;
+    STRING        *result = Parrot_str_clone(interp, source_string);
+
+    if (!result->strlen)
+        return result;
+
+    buffer = (unsigned char *)result->strstart;
+    for (offset = 0; offset < result->strlen; offset++) {
+        unsigned int c = buffer[offset];
+        if (c >= 0xc0 && c != 0xd7 && c <= 0xde)
+            c |= 0x20;
+        else
+            c = tolower((unsigned char)c);
+        buffer[offset] = (unsigned char)c;
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void titlecase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase(PARROT_INTERP, const STRING *source_string)>
 
 Converts the graphemes in STRING C<source_string> to title case, for those graphemes
 that support cases.
@@ -427,19 +391,20 @@
 
 */
 
-static void
-titlecase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(titlecase)
     unsigned char *buffer;
-    unsigned int c;
-    UINTVAL offset;
+    unsigned int   c;
+    UINTVAL        offset;
+    STRING        *result = Parrot_str_clone(interp, source_string);
 
-    if (!source_string->strlen)
-        return;
+    if (!result->strlen)
+        return result;
 
-    Parrot_str_write_COW(interp, source_string);
-    buffer = (unsigned char *)source_string->strstart;
+    buffer = (unsigned char *)result->strstart;
     c = buffer[0];
     if (c >= 0xe0 && c != 0xf7)
         c &= ~0x20;
@@ -447,7 +412,7 @@
         c = toupper((unsigned char)c);
     buffer[0] = (unsigned char)c;
 
-    for (offset = 1; offset < source_string->strlen; offset++) {
+    for (offset = 1; offset < result->strlen; offset++) {
         c = buffer[offset];
         if (c >= 0xc0 && c != 0xd7 && c <= 0xde)
             c |= 0x20;
@@ -455,11 +420,13 @@
             c = tolower((unsigned char)c);
         buffer[offset] = (unsigned char)c;
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void upcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase_first(PARROT_INTERP, const STRING *source_string)>
 
 Converts the first grapheme in STRING C<source_string> to upper case, if it
 supports cases.
@@ -468,28 +435,33 @@
 
 */
 
-static void
-upcase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase_first(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(upcase_first)
-    if (source_string->strlen) {
-        unsigned char *buffer;
-        unsigned int c;
-
-        Parrot_str_write_COW(interp, source_string);
-        buffer = (unsigned char *)source_string->strstart;
-        c = buffer[0];
-        if (c >= 0xe0 && c != 0xf7)
-            c &= ~0x20;
-        else
-            c = toupper((unsigned char)c);
-        buffer[0] = (unsigned char)c;
-    }
+    unsigned char *buffer;
+    unsigned int   c;
+    STRING        *result = Parrot_str_clone(interp, source_string);
+
+    if (!result->strlen)
+        return result;
+
+    buffer = (unsigned char *)result->strstart;
+    c = buffer[0];
+    if (c >= 0xe0 && c != 0xf7)
+        c &= ~0x20;
+    else
+        c = toupper((unsigned char)c);
+    buffer[0] = (unsigned char)c;
+
+    return result;
 }
 
 /*
 
-=item C<static void downcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase_first(PARROT_INTERP, const STRING
+*source_string)>
 
 Converts the first character of the STRING C<source_string> to lower case, if the
 grapheme supports lower case.
@@ -498,28 +470,33 @@
 
 */
 
-static void
-downcase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase_first(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(downcase_first)
-    if (source_string->strlen) {
-        unsigned char *buffer;
-        unsigned int c;
-
-        Parrot_str_write_COW(interp, source_string);
-        buffer = (unsigned char *)source_string->strstart;
-        c = buffer[0];
-        if (c >= 0xc0 && c != 0xd7 && c <= 0xde)
-            c &= ~0x20;
-        else
-            c = tolower((unsigned char)c);
-        buffer[0] = (unsigned char)c;
-    }
+    unsigned char *buffer;
+    unsigned int   c;
+    STRING        *result = Parrot_str_clone(interp, source_string);
+
+    if (!result->strlen)
+        return result;
+
+    buffer = (unsigned char *)result->strstart;
+    c = buffer[0];
+    if (c >= 0xc0 && c != 0xd7 && c <= 0xde)
+        c &= ~0x20;
+    else
+        c = tolower((unsigned char)c);
+    buffer[0] = (unsigned char)c;
+
+    return result;
 }
 
 /*
 
-=item C<static void titlecase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase_first(PARROT_INTERP, const STRING
+*source_string)>
 
 Converts the first grapheme in STRING C<source_string> to title case, if the grapheme
 supports case.
@@ -528,11 +505,12 @@
 
 */
 
-static void
-titlecase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase_first(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(titlecase_first)
-    upcase_first(interp, source_string);
+    return upcase_first(interp, source_string);
 }
 
 
@@ -662,7 +640,7 @@
 
 /*
 
-=item C<const CHARSET * Parrot_charset_iso_8859_1_init(PARROT_INTERP)>
+=item C<void Parrot_charset_iso_8859_1_init(PARROT_INTERP)>
 
 Initializes the ISO-8859-1 charset by installing all the necessary function pointers.
 
@@ -670,8 +648,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET *
+void
 Parrot_charset_iso_8859_1_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_charset_iso_8859_1_init)
@@ -679,8 +656,6 @@
     static const CHARSET base_set = {
         "iso-8859-1",
         ascii_get_graphemes,
-        ascii_get_graphemes_inplace,
-        set_graphemes,
         to_charset,
         compose,
         decompose,
@@ -705,13 +680,13 @@
     STRUCT_COPY_FROM_STRUCT(return_set, base_set);
     return_set->preferred_encoding = Parrot_fixed_8_encoding_ptr;
     Parrot_register_charset(interp, "iso-8859-1", return_set);
-    return return_set;
+
+    return;
 }
 
 /*
 
-=item C<STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, STRING *src,
-STRING *dest)>
+=item C<STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, STRING *src)>
 
 Converts STRING C<src> in ISO-8859-1 to ASCII STRING C<dest>.
 
@@ -722,29 +697,21 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING *
-charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, ARGIN(STRING *src),
-        ARGMOD_NULLOK(STRING *dest))
+charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(charset_cvt_iso_8859_1_to_ascii)
     UINTVAL offs;
-    if (dest) {
-        Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-        dest->bufused = src->bufused;
-        dest->strlen  = src->strlen;
-    }
+    STRING *dest = Parrot_str_clone(interp, src);
+
     for (offs = 0; offs < src->strlen; ++offs) {
         UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
         if (c >= 0x80)
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LOSSY_CONVERSION,
                 "lossy conversion to ascii");
 
-        if (dest)
-            ENCODING_SET_BYTE(interp, dest, offs, c);
+        ENCODING_SET_BYTE(interp, dest, offs, c);
     }
-    if (dest)
-        return dest;
-    src->charset = Parrot_ascii_charset_ptr;
-    return src;
+    return dest;
 }
 
 /*

Modified: branches/avl_string_cache/src/string/charset/iso-8859-1.h
==============================================================================
--- branches/avl_string_cache/src/string/charset/iso-8859-1.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/charset/iso-8859-1.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -18,15 +18,11 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_iso_8859_1_init(PARROT_INTERP)
+void Parrot_charset_iso_8859_1_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_charset_cvt_iso_8859_1_to_ascii \

Modified: branches/avl_string_cache/src/string/charset/unicode.c
==============================================================================
--- branches/avl_string_cache/src/string/charset/unicode.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/charset/unicode.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -54,11 +54,14 @@
 static STRING* decompose(PARROT_INTERP, SHIM(STRING *src))
         __attribute__nonnull__(1);
 
-static void downcase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void downcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase_first(PARROT_INTERP,
+    SHIM(const STRING *source_string))
         __attribute__nonnull__(1);
 
 static INTVAL find_cclass(PARROT_INTERP,
@@ -85,17 +88,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_graphemes_inplace(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *dest_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*dest_string);
-
 static INTVAL is_cclass(PARROT_INTERP,
     INTVAL flags,
     ARGIN(const STRING *source_string),
@@ -103,42 +95,36 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-static void set_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL replace_count,
-    ARGMOD(STRING *insert_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*insert_string);
-
 PARROT_CANNOT_RETURN_NULL
 static STRING * string_from_codepoint(PARROT_INTERP, UINTVAL codepoint)
         __attribute__nonnull__(1);
 
-static void titlecase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void titlecase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase_first(PARROT_INTERP,
+    SHIM(const STRING *source_string))
         __attribute__nonnull__(1);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* to_charset(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING* to_charset(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 static int u_iscclass(PARROT_INTERP, UINTVAL codepoint, INTVAL flags)
         __attribute__nonnull__(1);
 
-static void upcase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void upcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase_first(PARROT_INTERP,
+    SHIM(const STRING *source_string))
         __attribute__nonnull__(1);
 
 static UINTVAL validate(PARROT_INTERP, ARGIN(STRING *src))
@@ -173,17 +159,9 @@
 #define ASSERT_ARGS_get_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_get_graphemes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(dest_string))
 #define ASSERT_ARGS_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_set_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(insert_string))
 #define ASSERT_ARGS_string_from_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -223,27 +201,6 @@
 
 #define UNIMPL EXCEPTION(EXCEPTION_UNIMPLEMENTED, "unimplemented unicode")
 
-/*
-
-=item C<static void set_graphemes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL replace_count, STRING *insert_string)>
-
-Sets C<replace_count> graphemes in STRING C<source_string> starting at offset
-C<offset>.  Gets the graphemes to be replaced from STRING C<insert_string>.
-
-=cut
-
-*/
-
-static void
-set_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL replace_count, ARGMOD(STRING *insert_string))
-{
-    ASSERT_ARGS(set_graphemes)
-    ENCODING_SET_CODEPOINTS(interp, source_string, offset,
-            replace_count, insert_string);
-}
-
 
 /*
 
@@ -269,30 +226,7 @@
 
 /*
 
-=item C<static STRING * get_graphemes_inplace(PARROT_INTERP, STRING
-*source_string, UINTVAL offset, UINTVAL count, STRING *dest_string)>
-
-Gets C<count> graphemes in place from STRING C<source_string> starting at
-offset C<offset>. Puts them into STRING C<dest_string>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_graphemes_inplace(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *dest_string))
-{
-    ASSERT_ARGS(get_graphemes_inplace)
-    return ENCODING_GET_CODEPOINTS_INPLACE(interp, source_string,
-            offset, count, dest_string);
-}
-
-
-/*
-
-=item C<static STRING* to_charset(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING* to_charset(PARROT_INTERP, STRING *src)>
 
 Converts input STRING C<src> to unicode STRING C<dest>.
 
@@ -302,7 +236,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-to_charset(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_charset(PARROT_INTERP, ARGIN(STRING *src))
 {
     ASSERT_ARGS(to_charset)
     const charset_converter_t conversion_func =
@@ -310,9 +244,9 @@
                     Parrot_unicode_charset_ptr);
 
     if (conversion_func)
-         return conversion_func(interp, src, dest);
+         return conversion_func(interp, src);
 
-    return Parrot_utf8_encoding_ptr->to_encoding(interp, src, dest);
+    return Parrot_utf8_encoding_ptr->to_encoding(interp, src);
 }
 
 
@@ -401,7 +335,7 @@
 
 /*
 
-=item C<static void upcase(PARROT_INTERP, STRING *src)>
+=item C<static STRING* upcase(PARROT_INTERP, const STRING *src)>
 
 Converts the STRING C<src> to all upper-case graphemes, for those characters
 which support upper-case versions.
@@ -412,23 +346,25 @@
 
 */
 
-static void
-upcase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(upcase)
 #if PARROT_HAS_ICU
     UErrorCode err;
     int dest_len, src_len, needed;
+    STRING *res;
 #endif
 
     if (src->bufused  == src->strlen
             && src->encoding == Parrot_utf8_encoding_ptr) {
-        Parrot_ascii_charset_ptr->upcase(interp, src);
-        return;
+        return Parrot_ascii_charset_ptr->upcase(interp, src);
     }
 
 #if PARROT_HAS_ICU
-    src = Parrot_utf16_encoding_ptr->to_encoding(interp, src, NULL);
+    /* to_encoding will allocate new string */
+    res = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
     /*
        U_CAPI int32_t U_EXPORT2
        u_strToUpper(UChar *dest, int32_t destCapacity,
@@ -440,8 +376,8 @@
 
     /* use all available space - see below XXX */
     /* TODO downcase, titlecase too */
-    dest_len = Buffer_buflen(src) / sizeof (UChar);
-    src_len  = src->bufused     / sizeof (UChar);
+    dest_len = Buffer_buflen(res) / sizeof (UChar);
+    src_len  = res->bufused       / sizeof (UChar);
 
     /*
      * XXX troubles:
@@ -460,33 +396,35 @@
      *  TODO downcase, titlecase
      */
     needed = u_strToUpper(NULL, 0,
-            (UChar *)src->strstart, src_len,
+            (UChar *)res->strstart, src_len,
             NULL,       /* locale = default */
             &err);
 
     if (needed > dest_len) {
-        Parrot_gc_reallocate_string_storage(interp, src, needed * sizeof (UChar));
+        Parrot_gc_reallocate_string_storage(interp, res, needed * sizeof (UChar));
         dest_len = needed;
     }
 
     err      = U_ZERO_ERROR;
-    dest_len = u_strToUpper((UChar *)src->strstart, dest_len,
-            (UChar *)src->strstart, src_len,
+    dest_len = u_strToUpper((UChar *)res->strstart, dest_len,
+            (UChar *)res->strstart, src_len,
             NULL,       /* locale = default */
             &err);
     PARROT_ASSERT(U_SUCCESS(err));
-    src->bufused = dest_len * sizeof (UChar);
+    res->bufused = dest_len * sizeof (UChar);
 
     /* downgrade if possible */
     if (dest_len == (int)src->strlen)
-        src->encoding = Parrot_ucs2_encoding_ptr;
+        res->encoding = Parrot_ucs2_encoding_ptr;
     else {
         /* string is likely still ucs2 if it was earlier
          * but strlen changed due to combining char
          */
-        src->strlen = dest_len;
+        res->strlen = dest_len;
     }
 
+    return res;
+
 #else
     UNUSED(src);
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
@@ -497,7 +435,7 @@
 
 /*
 
-=item C<static void downcase(PARROT_INTERP, STRING *src)>
+=item C<static STRING* downcase(PARROT_INTERP, const STRING *src)>
 
 Converts all graphemes to lower-case, for those graphemes which have cases.
 
@@ -507,23 +445,25 @@
 
 */
 
-static void
-downcase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(downcase)
 #if PARROT_HAS_ICU
     UErrorCode err;
     int dest_len, src_len;
+    STRING *res;
 #endif
 
     if (src->bufused  == src->strlen
             && src->encoding == Parrot_utf8_encoding_ptr) {
-        Parrot_ascii_charset_ptr->downcase(interp, src);
-        return;
+        return Parrot_ascii_charset_ptr->downcase(interp, src);
     }
 
 #if PARROT_HAS_ICU
-    src = Parrot_utf16_encoding_ptr->to_encoding(interp, src, NULL);
+    /* to_encoding will allocate new string */
+    res = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
     /*
 U_CAPI int32_t U_EXPORT2
 u_strToLower(UChar *dest, int32_t destCapacity,
@@ -532,26 +472,29 @@
              UErrorCode *pErrorCode);
      */
     err      = U_ZERO_ERROR;
-    src_len  = src->bufused / sizeof (UChar);
-    dest_len = u_strToLower((UChar *)src->strstart, src_len,
-            (UChar *)src->strstart, src_len,
+    src_len  = res->bufused / sizeof (UChar);
+    dest_len = u_strToLower((UChar *)res->strstart, src_len,
+            (UChar *)res->strstart, src_len,
             NULL,       /* locale = default */
             &err);
-    src->bufused = dest_len * sizeof (UChar);
+    res->bufused = dest_len * sizeof (UChar);
 
     if (!U_SUCCESS(err)) {
         err = U_ZERO_ERROR;
-        Parrot_gc_reallocate_string_storage(interp, src, src->bufused);
-        dest_len = u_strToLower((UChar *)src->strstart, dest_len,
-                (UChar *)src->strstart, src_len,
+        Parrot_gc_reallocate_string_storage(interp, res, res->bufused);
+        dest_len = u_strToLower((UChar *)res->strstart, dest_len,
+                (UChar *)res->strstart, src_len,
                 NULL,       /* locale = default */
                 &err);
         PARROT_ASSERT(U_SUCCESS(err));
     }
 
     /* downgrade if possible */
-    if (dest_len == (int)src->strlen)
-        src->encoding = Parrot_ucs2_encoding_ptr;
+    if (dest_len == (int)res->strlen)
+        res->encoding = Parrot_ucs2_encoding_ptr;
+
+    return res;
+
 #else
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no ICU lib loaded");
@@ -561,7 +504,7 @@
 
 /*
 
-=item C<static void titlecase(PARROT_INTERP, STRING *src)>
+=item C<static STRING* titlecase(PARROT_INTERP, const STRING *src)>
 
 Converts the string to title case, for those characters which support cases.
 
@@ -571,22 +514,24 @@
 
 */
 
-static void
-titlecase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(titlecase)
 #if PARROT_HAS_ICU
 
     UErrorCode err;
     int dest_len, src_len;
+    STRING *res;
 
     if (src->bufused  == src->strlen
     &&  src->encoding == Parrot_utf8_encoding_ptr) {
-        Parrot_ascii_charset_ptr->titlecase(interp, src);
-        return;
+        return Parrot_ascii_charset_ptr->titlecase(interp, src);
     }
 
-    src = Parrot_utf16_encoding_ptr->to_encoding(interp, src, NULL);
+    /* to_encoding will allocate new string */
+    res = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
 
     /*
 U_CAPI int32_t U_EXPORT2
@@ -598,27 +543,30 @@
      */
 
     err      = U_ZERO_ERROR;
-    src_len  = src->bufused / sizeof (UChar);
-    dest_len = u_strToTitle((UChar *)src->strstart, src_len,
-            (UChar *)src->strstart, src_len,
+    src_len  = res->bufused / sizeof (UChar);
+    dest_len = u_strToTitle((UChar *)res->strstart, src_len,
+            (UChar *)res->strstart, src_len,
             NULL,       /* default titleiter */
             NULL,       /* locale = default */
             &err);
-    src->bufused = dest_len * sizeof (UChar);
+    res->bufused = dest_len * sizeof (UChar);
 
     if (!U_SUCCESS(err)) {
         err = U_ZERO_ERROR;
-        Parrot_gc_reallocate_string_storage(interp, src, src->bufused);
-        dest_len = u_strToTitle((UChar *)src->strstart, dest_len,
-                (UChar *)src->strstart, src_len,
+        Parrot_gc_reallocate_string_storage(interp, res, res->bufused);
+        dest_len = u_strToTitle((UChar *)res->strstart, dest_len,
+                (UChar *)res->strstart, src_len,
                 NULL, NULL,
                 &err);
         PARROT_ASSERT(U_SUCCESS(err));
     }
 
     /* downgrade if possible */
-    if (dest_len == (int)src->strlen)
-        src->encoding = Parrot_ucs2_encoding_ptr;
+    if (dest_len == (int)res->strlen)
+        res->encoding = Parrot_ucs2_encoding_ptr;
+
+    return res;
+
 #else
     UNUSED(src);
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
@@ -629,7 +577,7 @@
 
 /*
 
-=item C<static void upcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase_first(PARROT_INTERP, const STRING *source_string)>
 
 Converts the first grapheme in the STRING C<source_string> to uppercase, if the
 grapheme supports it. Not implemented.
@@ -638,8 +586,9 @@
 
 */
 
-static void
-upcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase_first(PARROT_INTERP, SHIM(const STRING *source_string))
 {
     ASSERT_ARGS(upcase_first)
     /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
@@ -649,7 +598,8 @@
 
 /*
 
-=item C<static void downcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase_first(PARROT_INTERP, const STRING
+*source_string)>
 
 Converts the first grapheme in the STRING C<source_string> to lower-case, if
 the grapheme supports it. Not implemented
@@ -658,8 +608,9 @@
 
 */
 
-static void
-downcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase_first(PARROT_INTERP, SHIM(const STRING *source_string))
 {
     ASSERT_ARGS(downcase_first)
     /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
@@ -669,7 +620,8 @@
 
 /*
 
-=item C<static void titlecase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase_first(PARROT_INTERP, const STRING
+*source_string)>
 
 Converts the first grapheme in STRING C<source_string> to title case, if the
 string supports it. Not implemented.
@@ -678,8 +630,9 @@
 
 */
 
-static void
-titlecase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase_first(PARROT_INTERP, SHIM(const STRING *source_string))
 {
     ASSERT_ARGS(titlecase_first)
     /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
@@ -1064,7 +1017,7 @@
 
 /*
 
-=item C<const CHARSET * Parrot_charset_unicode_init(PARROT_INTERP)>
+=item C<void Parrot_charset_unicode_init(PARROT_INTERP)>
 
 Initializes the Unicode charset by installing all the necessary function
 pointers.
@@ -1073,8 +1026,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET *
+void
 Parrot_charset_unicode_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_charset_unicode_init)
@@ -1082,8 +1034,6 @@
     static const CHARSET base_set   = {
         "unicode",
         get_graphemes,
-        get_graphemes_inplace,
-        set_graphemes,
         to_charset,
         compose,
         decompose,
@@ -1115,7 +1065,8 @@
      */
     return_set->preferred_encoding = Parrot_utf8_encoding_ptr;
     Parrot_register_charset(interp, "unicode", return_set);
-    return return_set;
+
+    return;
 }
 
 

Modified: branches/avl_string_cache/src/string/charset/unicode.h
==============================================================================
--- branches/avl_string_cache/src/string/charset/unicode.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/charset/unicode.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -21,8 +21,7 @@
 /* HEADERIZER BEGIN: src/string/charset/unicode.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_unicode_init(PARROT_INTERP)
+void Parrot_charset_unicode_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_charset_unicode_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/avl_string_cache/src/string/encoding.c
==============================================================================
--- branches/avl_string_cache/src/string/encoding.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/encoding.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -114,6 +114,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const ENCODING *
@@ -173,6 +174,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_encoding_number(PARROT_INTERP, ARGIN(const STRING *encodingname))
@@ -199,6 +201,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_encoding_number_of_str(SHIM_INTERP, ARGIN(const STRING *src))
@@ -226,6 +229,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 STRING*
@@ -250,6 +254,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const ENCODING*
@@ -275,6 +280,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const char *
@@ -428,6 +434,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 const ENCODING *

Modified: branches/avl_string_cache/src/string/encoding/fixed_8.c
==============================================================================
--- branches/avl_string_cache/src/string/encoding/fixed_8.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/encoding/fixed_8.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -24,24 +24,20 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void become_encoding(PARROT_INTERP, SHIM(STRING *source_string))
-        __attribute__nonnull__(1);
-
-static UINTVAL bytes(SHIM_INTERP, ARGIN(STRING *source_string))
+static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *source_string))
         __attribute__nonnull__(2);
 
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(STRING *source_string))
+static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *source_string))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL find_cclass(PARROT_INTERP,
+static UINTVAL find_cclass(SHIM_INTERP,
     ARGIN(STRING *s),
     ARGIN(const INTVAL *typetable),
     INTVAL flags,
     UINTVAL pos,
     UINTVAL end)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
@@ -63,11 +59,15 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*iter);
 
+static size_t fixed_8_hash(SHIM_INTERP,
+    ARGIN(const STRING *s),
+    size_t hashval)
+        __attribute__nonnull__(2);
+
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL get_byte(PARROT_INTERP,
+static UINTVAL get_byte(SHIM_INTERP,
     ARGIN(const STRING *source_string),
     UINTVAL offset)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
@@ -80,18 +80,6 @@
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes_inplace(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *return_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*return_string);
-
-PARROT_WARN_UNUSED_RESULT
 static UINTVAL get_codepoint(PARROT_INTERP,
     ARGIN(const STRING *source_string),
     UINTVAL offset)
@@ -107,18 +95,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints_inplace(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *dest_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*dest_string);
-
 static void iter_init(SHIM_INTERP,
     ARGIN(const STRING *src),
     ARGOUT(String_iter *iter))
@@ -133,50 +109,18 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void set_bytes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *new_bytes))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*new_bytes);
-
-static void set_codepoint(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL codepoint)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_codepoints(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *new_codepoints))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*new_codepoints);
-
 PARROT_DOES_NOT_RETURN
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(STRING *dest))
+static STRING * to_encoding(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-#define ASSERT_ARGS_become_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s) \
+       PARROT_ASSERT_ARG(s) \
     , PARROT_ASSERT_ARG(typetable))
 #define ASSERT_ARGS_fixed8_get_next __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -186,43 +130,25 @@
     , 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 = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_get_bytes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(return_string))
 #define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_get_codepoints_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(dest_string))
 #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(source_string))
-#define ASSERT_ARGS_set_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(new_bytes))
-#define ASSERT_ARGS_set_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_set_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(new_codepoints))
 #define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -233,7 +159,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.  If C<dest> is
 provided, it will contain the result.  Otherwise this function operates in
@@ -247,7 +173,7 @@
 PARROT_DOES_NOT_RETURN
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, SHIM(STRING *src), SHIM(STRING *dest))
+to_encoding(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(to_encoding)
     UNIMPL;
@@ -274,25 +200,6 @@
     return get_byte(interp, source_string, offset);
 }
 
-/*
-
-=item C<static void set_codepoint(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL codepoint)>
-
-This is the same as set byte
-
-=cut
-
-*/
-
-static void
-set_codepoint(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL codepoint)
-{
-    ASSERT_ARGS(set_codepoint)
-    set_byte(interp, source_string, offset, codepoint);
-}
-
 
 /*
 
@@ -307,11 +214,11 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-find_cclass(PARROT_INTERP, ARGIN(STRING *s), ARGIN(const INTVAL *typetable),
+find_cclass(SHIM_INTERP, ARGIN(STRING *s), ARGIN(const INTVAL *typetable),
 INTVAL flags, UINTVAL pos, UINTVAL end)
 {
     ASSERT_ARGS(find_cclass)
-    unsigned char *contents = (unsigned char *)s->strstart;
+    const unsigned char *contents = (const unsigned char *)s->strstart;
     for (; pos < end; ++pos) {
         if ((typetable[contents[pos]] & flags) != 0) {
             return pos;
@@ -333,10 +240,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-get_byte(PARROT_INTERP, ARGIN(const STRING *source_string), UINTVAL offset)
+get_byte(SHIM_INTERP, ARGIN(const STRING *source_string), UINTVAL offset)
 {
     ASSERT_ARGS(get_byte)
-    unsigned char *contents = (unsigned char *)source_string->strstart;
+    const unsigned char *contents = (const unsigned char *)source_string->strstart;
 
     if (offset >= source_string->bufused) {
 /*        Parrot_ex_throw_from_c_args(interp, NULL, 0,
@@ -416,8 +323,8 @@
 get_bytes(PARROT_INTERP, ARGIN(STRING *source_string), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_bytes)
-    STRING * const return_string = Parrot_str_new_COW(interp,
-            source_string);
+    STRING * const return_string = Parrot_str_copy(interp, source_string);
+
     return_string->encoding = source_string->encoding;
     return_string->charset = source_string->charset;
 
@@ -433,117 +340,7 @@
 
 /*
 
-=item C<static STRING * get_codepoints_inplace(PARROT_INTERP, STRING
-*source_string, UINTVAL offset, UINTVAL count, STRING *dest_string)>
-
-Gets from string C<src> at position C<offset> C<count> codepoints and returns
-them in C<return_string>.  (Delegates to C<get_bytes>.)
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints_inplace(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *dest_string))
-{
-    ASSERT_ARGS(get_codepoints_inplace)
-    return get_bytes_inplace(interp, source_string, offset,
-            count, dest_string);
-}
-
-/*
-
-=item C<static STRING * get_bytes_inplace(PARROT_INTERP, STRING *source_string,
-UINTVAL offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> bytes and returns them
-in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes_inplace(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *return_string))
-{
-    ASSERT_ARGS(get_bytes_inplace)
-    Parrot_str_reuse_COW(interp, source_string, return_string);
-
-    return_string->strstart = (char *)return_string->strstart + offset ;
-    return_string->bufused = count;
-
-    return_string->strlen = count;
-    return_string->hashval = 0;
-
-    return return_string;
-}
-
-/*
-
-=item C<static void set_codepoints(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL count, STRING *new_codepoints)>
-
-Delegate to set_bytes
-
-=cut
-
-*/
-
-static void
-set_codepoints(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *new_codepoints))
-{
-    ASSERT_ARGS(set_codepoints)
-    set_bytes(interp, source_string, offset, count, new_codepoints);
-}
-
-/*
-
-=item C<static void set_bytes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL count, STRING *new_bytes)>
-
-Replaces in string C<src> at position C<offset> for C<count> bytes with the
-contents of string C<new_bytes>.
-
-=cut
-
-*/
-
-static void
-set_bytes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *new_bytes))
-{
-    ASSERT_ARGS(set_bytes)
-    Parrot_str_replace(interp, source_string, offset, count, new_bytes, NULL);
-}
-
-/*
-
-=item C<static void become_encoding(PARROT_INTERP, STRING *source_string)>
-
-Unconditionally makes the string be in this encoding, if that's valid
-
-=cut
-
-*/
-
-static void
-become_encoding(PARROT_INTERP, SHIM(STRING *source_string))
-{
-    ASSERT_ARGS(become_encoding)
-    UNIMPL;
-}
-
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, STRING *source_string)>
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *source_string)>
 
 Returns the number of codepoints in string C<src>.
 
@@ -552,7 +349,7 @@
 */
 
 static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(STRING *source_string))
+codepoints(PARROT_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(codepoints)
     return bytes(interp, source_string);
@@ -560,7 +357,7 @@
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, STRING *source_string)>
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *source_string)>
 
 Returns the number of bytes in string C<src>.
 
@@ -569,7 +366,7 @@
 */
 
 static UINTVAL
-bytes(SHIM_INTERP, ARGIN(STRING *source_string))
+bytes(SHIM_INTERP, ARGIN(const STRING *source_string))
 {
     ASSERT_ARGS(bytes)
     return source_string->bufused;
@@ -660,9 +457,37 @@
     iter->set_position    = fixed8_set_position;
 }
 
+
+/*
+
+=item C<static size_t fixed_8_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
+fixed_8_hash(SHIM_INTERP, ARGIN(const STRING *s), size_t hashval)
+{
+    ASSERT_ARGS(fixed_8_hash)
+    const unsigned char *pos = (const unsigned char *)s->strstart;
+    UINTVAL        len = s->strlen;
+
+    while (len--) {
+        hashval += hashval << 5;
+        hashval += *(pos++);
+    }
+
+    return hashval;
+}
+
+
 /*
 
-=item C<ENCODING * Parrot_encoding_fixed_8_init(PARROT_INTERP)>
+=item C<void Parrot_encoding_fixed_8_init(PARROT_INTERP)>
 
 Initializes the fixed-8 encoding.
 
@@ -670,8 +495,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING *
+void
 Parrot_encoding_fixed_8_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_encoding_fixed_8_init)
@@ -682,25 +506,21 @@
         1, /* Max bytes per codepoint */
         to_encoding,
         get_codepoint,
-        set_codepoint,
         get_byte,
         set_byte,
         get_codepoints,
-        get_codepoints_inplace,
         get_bytes,
-        get_bytes_inplace,
-        set_codepoints,
-        set_bytes,
-        become_encoding,
         codepoints,
         bytes,
         iter_init,
-        find_cclass
-
+        find_cclass,
+        fixed_8_hash
     };
+
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "fixed_8", return_encoding);
-    return return_encoding;
+
+    return;
 }
 
 

Modified: branches/avl_string_cache/src/string/encoding/fixed_8.h
==============================================================================
--- branches/avl_string_cache/src/string/encoding/fixed_8.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/encoding/fixed_8.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/encoding/fixed_8.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING * Parrot_encoding_fixed_8_init(PARROT_INTERP)
+void Parrot_encoding_fixed_8_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_encoding_fixed_8_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/avl_string_cache/src/string/encoding/ucs2.c
==============================================================================
--- branches/avl_string_cache/src/string/encoding/ucs2.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/encoding/ucs2.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -36,16 +36,12 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void become_encoding(PARROT_INTERP, SHIM(STRING *src))
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL bytes(PARROT_INTERP, ARGIN(STRING *src))
-        __attribute__nonnull__(1)
+static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(STRING *src))
+static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -73,15 +69,6 @@
     SHIM(UINTVAL count))
         __attribute__nonnull__(1);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes_inplace(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *return_string))
-        __attribute__nonnull__(1);
-
 static UINTVAL get_codepoint(PARROT_INTERP,
     ARGIN(const STRING *src),
     UINTVAL offset)
@@ -97,15 +84,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints_inplace(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *dest_string))
-        __attribute__nonnull__(1);
-
 static void iter_init(PARROT_INTERP,
     ARGIN(const STRING *src),
     ARGOUT(String_iter *iter))
@@ -120,61 +98,36 @@
     SHIM(UINTVAL byte))
         __attribute__nonnull__(1);
 
-static void set_bytes(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_bytes))
-        __attribute__nonnull__(1);
-
-static void set_codepoint(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL codepoint)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_codepoints(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_codepoints))
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD(STRING *dest))
+static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
-static UINTVAL ucs2_decode_and_advance(PARROT_INTERP,
-    ARGMOD(String_iter *i))
-        __attribute__nonnull__(1)
+static UINTVAL ucs2_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
-static void ucs2_encode_and_advance(PARROT_INTERP,
+static void ucs2_encode_and_advance(SHIM_INTERP,
     ARGMOD(String_iter *i),
     UINTVAL c)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
+static size_t ucs2_hash(PARROT_INTERP,
+    ARGIN(const STRING *s),
+    size_t hashval)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 static void ucs2_set_position(SHIM_INTERP,
     ARGMOD(String_iter *i),
     UINTVAL n)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
-#define ASSERT_ARGS_become_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
+       PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -186,39 +139,28 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_bytes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_codepoints_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #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_set_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_set_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_codepoints __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) \
-    , PARROT_ASSERT_ARG(dest))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_ucs2_decode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(i))
+       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(i))
+    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_ucs2_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(i))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -235,7 +177,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.  If C<dest> is
 provided, it will contain the result.  Otherwise this function operates in
@@ -248,11 +190,11 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGIN(STRING *src), ARGMOD(STRING *dest))
+to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_encoding)
     STRING * const result =
-        Parrot_utf16_encoding_ptr->to_encoding(interp, src, dest);
+        Parrot_utf16_encoding_ptr->to_encoding(interp, src);
 
     /* conversion to utf16 downgrads to ucs-2 if possible - check result */
     if (result->encoding == Parrot_utf16_encoding_ptr)
@@ -278,39 +220,15 @@
 {
     ASSERT_ARGS(get_codepoint)
 #if PARROT_HAS_ICU
-    UChar * const s = (UChar*) src->strstart;
+    const UChar * const s = (const UChar*) src->strstart;
     return s[offset];
 #else
-    UNUSED(offset)
+    UNUSED(offset);
+    UNUSED(src);
     no_ICU_lib(interp);
 #endif
 }
 
-/*
-
-=item C<static void set_codepoint(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL codepoint)>
-
-Sets, in string C<src> at position C<offset>, the codepoint C<codepoint>.
-
-=cut
-
-*/
-
-static void
-set_codepoint(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL codepoint)
-{
-    ASSERT_ARGS(set_codepoint)
-#if PARROT_HAS_ICU
-    UChar * const s = (UChar*) src->strstart;
-    s[offset] = codepoint;
-#else
-    UNUSED(src)
-    UNUSED(offset)
-    UNUSED(codepoint)
-    no_ICU_lib(interp);
-#endif
-}
 
 /*
 
@@ -328,6 +246,12 @@
 find_cclass(PARROT_INTERP, ARGIN(STRING *s), ARGIN(const INTVAL *typetable),
 INTVAL flags, UINTVAL pos, UINTVAL end)
 {
+    UNUSED(s);
+    UNUSED(typetable);
+    UNUSED(flags);
+    UNUSED(pos);
+    UNUSED(end);
+
     Parrot_ex_throw_from_c_args(interp, NULL,
         EXCEPTION_UNIMPLEMENTED,
         "No find_cclass support in unicode encoding plugins");
@@ -388,7 +312,8 @@
 get_codepoints(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_codepoints)
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
+    STRING * const return_string = Parrot_str_copy(interp, src);
+
 #if PARROT_HAS_ICU
     return_string->strstart = (char*)src->strstart + offset * sizeof (UChar);
     return_string->bufused = count * sizeof (UChar);
@@ -434,109 +359,7 @@
 
 /*
 
-=item C<static STRING * get_codepoints_inplace(PARROT_INTERP, STRING *src,
-UINTVAL offset, UINTVAL count, STRING *dest_string)>
-
-Gets from string C<src> at position C<offset> C<count> codepoints and returns
-them in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints_inplace(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *dest_string))
-{
-    ASSERT_ARGS(get_codepoints_inplace)
-    UNIMPL;
-}
-
-/*
-
-=item C<static STRING * get_bytes_inplace(PARROT_INTERP, STRING *src, UINTVAL
-offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> bytes and returns them
-in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes_inplace(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *return_string))
-{
-    ASSERT_ARGS(get_bytes_inplace)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_codepoints(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_codepoints)>
-
-Replaces in string C<src> at position C<offset> for C<count> codepoints with
-the contents of string C<new_codepoints>.
-
-=cut
-
-*/
-
-static void
-set_codepoints(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_codepoints))
-{
-    ASSERT_ARGS(set_codepoints)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_bytes)>
-
-Replaces in string C<src> at position C<offset> for C<count> bytes with the
-contents of string C<new_bytes>.
-
-=cut
-
-*/
-
-static void
-set_bytes(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_bytes))
-{
-    ASSERT_ARGS(set_bytes)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void become_encoding(PARROT_INTERP, STRING *src)>
-
-Unconditionally makes the string be in this encoding, if that's valid
-
-=cut
-
-*/
-
-static void
-become_encoding(PARROT_INTERP, SHIM(STRING *src))
-{
-    ASSERT_ARGS(become_encoding)
-    UNIMPL;
-}
-
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
 
 Returns the number of codepoints in string C<src>.
 
@@ -546,19 +369,21 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(STRING *src))
+codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
 #if PARROT_HAS_ICU
+    UNUSED(interp);
     return src->bufused / sizeof (UChar);
 #else
+    UNUSED(src);
     no_ICU_lib(interp);
 #endif
 }
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
 
 Returns the number of bytes in string C<src>.
 
@@ -568,7 +393,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-bytes(PARROT_INTERP, ARGIN(STRING *src))
+bytes(SHIM_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(bytes)
     return src->bufused;
@@ -585,12 +410,12 @@
 */
 
 static UINTVAL
-ucs2_decode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i))
+ucs2_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
 {
     ASSERT_ARGS(ucs2_decode_and_advance)
 
 #if PARROT_HAS_ICU
-    UChar * const s = (UChar*) i->str->strstart;
+    const UChar * const s = (const UChar*) i->str->strstart;
     size_t pos = i->bytepos / sizeof (UChar);
 
     /* TODO either make sure that we don't go past end or use SAFE
@@ -605,6 +430,7 @@
      * See TT #557
      */
     PARROT_ASSERT(0);
+    UNUSED(i);
     return (UINTVAL)0; /* Stop the static analyzers from panicing */
 #endif
 }
@@ -622,26 +448,62 @@
 */
 
 static void
-ucs2_encode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i), UINTVAL c)
+ucs2_encode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i), UINTVAL c)
 {
     ASSERT_ARGS(ucs2_encode_and_advance)
 
 #if PARROT_HAS_ICU
-    UChar * const s = (UChar*) i->str->strstart;
+    UChar    *s = (UChar*) i->str->strstart;
     UINTVAL pos = i->bytepos / sizeof (UChar);
-    s[pos++] = (UChar)c;
+    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(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
+    UChar  *pos = (UChar*) s->strstart;
+    UINTVAL len = s->strlen;
+
+    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)>
 
 Moves the string iterator C<i> to the position C<n> in the string.
@@ -662,6 +524,8 @@
     /* This function must never be called if compiled without ICU.
      * See TT #557
      */
+    UNUSED(i);
+    UNUSED(n);
     PARROT_ASSERT(0);
 #endif
 }
@@ -683,6 +547,7 @@
 {
     ASSERT_ARGS(iter_init)
 #if PARROT_HAS_ICU
+    UNUSED(interp);
     iter->str             = src;
     iter->bytepos         = 0;
     iter->charpos         = 0;
@@ -690,13 +555,15 @@
     iter->set_and_advance = ucs2_encode_and_advance;
     iter->set_position    = ucs2_set_position;
 #else
+    UNUSED(src);
+    UNUSED(iter);
     no_ICU_lib(interp);
 #endif
 }
 
 /*
 
-=item C<ENCODING * Parrot_encoding_ucs2_init(PARROT_INTERP)>
+=item C<void Parrot_encoding_ucs2_init(PARROT_INTERP)>
 
 Initializes the UCS-2 encoding.
 
@@ -704,8 +571,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING *
+void
 Parrot_encoding_ucs2_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_encoding_ucs2_init)
@@ -716,24 +582,20 @@
         2, /* Max bytes per codepoint 0 .. 0x10ffff */
         to_encoding,
         get_codepoint,
-        set_codepoint,
         get_byte,
         set_byte,
         get_codepoints,
-        get_codepoints_inplace,
         get_bytes,
-        get_bytes_inplace,
-        set_codepoints,
-        set_bytes,
-        become_encoding,
         codepoints,
         bytes,
         iter_init,
-        find_cclass
+        find_cclass,
+        ucs2_hash
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "ucs2", return_encoding);
-    return return_encoding;
+
+    return;
 }
 
 /*

Modified: branches/avl_string_cache/src/string/encoding/ucs2.h
==============================================================================
--- branches/avl_string_cache/src/string/encoding/ucs2.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/encoding/ucs2.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/encoding/ucs2.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING * Parrot_encoding_ucs2_init(PARROT_INTERP)
+void Parrot_encoding_ucs2_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_encoding_ucs2_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/avl_string_cache/src/string/encoding/utf16.c
==============================================================================
--- branches/avl_string_cache/src/string/encoding/utf16.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/encoding/utf16.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -26,15 +26,12 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void become_encoding(PARROT_INTERP, SHIM(STRING *src))
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL bytes(SHIM_INTERP, ARGIN(STRING *src))
+static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(STRING *src))
+static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -63,17 +60,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes_inplace(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGIN(STRING *return_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5);
-
 static UINTVAL get_codepoint(PARROT_INTERP,
     ARGIN(const STRING *src),
     UINTVAL offset)
@@ -89,18 +75,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints_inplace(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *return_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*return_string);
-
 static void iter_init(PARROT_INTERP,
     ARGIN(const STRING *src),
     ARGOUT(String_iter *iter))
@@ -116,34 +90,9 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void set_bytes(PARROT_INTERP,
-    SHIM(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    SHIM(STRING *new_bytes))
-        __attribute__nonnull__(1);
-
-static void set_codepoint(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL codepoint)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_codepoints(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGIN(STRING *new_codepoints))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -168,8 +117,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
-#define ASSERT_ARGS_become_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -184,20 +131,12 @@
 #define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_bytes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(return_string))
 #define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_codepoints_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(return_string))
 #define ASSERT_ARGS_iter_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src) \
@@ -205,15 +144,6 @@
 #define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_set_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(new_codepoints))
 #define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -242,7 +172,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.  If C<dest> is
 provided, it will contain the result.  Otherwise this function operates in
@@ -256,7 +186,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_encoding)
 #if PARROT_HAS_ICU
@@ -265,22 +195,18 @@
     UChar *p;
 #endif
     int src_len;
-    int in_place = dest == NULL;
     STRING *result;
 
     if (src->encoding == Parrot_utf16_encoding_ptr ||
             src->encoding == Parrot_ucs2_encoding_ptr)
-        return in_place ? src : Parrot_str_copy(interp, src);
+        return Parrot_str_clone(interp, src);
+
+    result = Parrot_gc_new_string_header(interp, 0);
+
     /*
      * TODO adapt string creation functions
      */
     src_len = src->strlen;
-    if (in_place) {
-        result = src;
-    }
-    else {
-        result = dest;
-    }
     if (!src_len) {
         result->charset  = Parrot_unicode_charset_ptr;
         result->encoding = Parrot_ucs2_encoding_ptr;
@@ -296,14 +222,9 @@
        UErrorCode *pErrorCode);
        */
 #if PARROT_HAS_ICU
-    if (in_place) {
-        /* need intermediate memory */
-        p = mem_gc_allocate_n_typed(interp, src_len, UChar);
-    }
-    else {
-        Parrot_gc_reallocate_string_storage(interp, dest, sizeof (UChar) * src_len);
-        p = (UChar *)dest->strstart;
-    }
+    Parrot_gc_allocate_string_storage(interp, result, sizeof (UChar) * src_len);
+    p = (UChar *)result->strstart;
+
     if (src->charset == Parrot_iso_8859_1_charset_ptr ||
             src->charset == Parrot_ascii_charset_ptr) {
         for (dest_len = 0; dest_len < (int)src->strlen; ++dest_len) {
@@ -318,25 +239,16 @@
             /*
              * have to resize - required len in UChars is in dest_len
              */
-            if (in_place)
-                p = mem_gc_realloc_n_typed(interp, p, dest_len, UChar);
-            else {
-                result->bufused = dest_len * sizeof (UChar);
-                Parrot_gc_reallocate_string_storage(interp, dest,
-                                         sizeof (UChar) * dest_len);
-                p = (UChar *)dest->strstart;
-            }
+            result->bufused = dest_len * sizeof (UChar);
+            Parrot_gc_reallocate_string_storage(interp, result,
+                                     sizeof (UChar) * dest_len);
+            p = (UChar *)result->strstart;
             u_strFromUTF8(p, dest_len,
                     &dest_len, src->strstart, src->bufused, &err);
             PARROT_ASSERT(U_SUCCESS(err));
         }
     }
     result->bufused = dest_len * sizeof (UChar);
-    if (in_place) {
-        Parrot_gc_reallocate_string_storage(interp, src, src->bufused);
-        memcpy(src->strstart, p, src->bufused);
-        mem_gc_free(interp, p);
-    }
     result->charset  = Parrot_unicode_charset_ptr;
     result->encoding = Parrot_utf16_encoding_ptr;
     result->strlen = src_len;
@@ -383,27 +295,6 @@
 #endif
 }
 
-/*
-
-=item C<static void set_codepoint(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL codepoint)>
-
-Sets, in string C<src> at position C<offset>, the codepoint C<codepoint>.
-
-=cut
-
-*/
-
-static void
-set_codepoint(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL codepoint)
-{
-    ASSERT_ARGS(set_codepoint)
-    UNUSED(interp);
-    UNUSED(src);
-    UNUSED(offset);
-    UNUSED(codepoint);
-    UNIMPL;
-}
 
 /*
 
@@ -421,6 +312,12 @@
 find_cclass(PARROT_INTERP, ARGIN(STRING *s), ARGIN(const INTVAL *typetable),
 INTVAL flags, UINTVAL pos, UINTVAL end)
 {
+    UNUSED(s);
+    UNUSED(typetable);
+    UNUSED(flags);
+    UNUSED(pos);
+    UNUSED(end);
+
     Parrot_ex_throw_from_c_args(interp, NULL,
         EXCEPTION_UNIMPLEMENTED,
         "No find_cclass support in unicode encoding plugins");
@@ -496,7 +393,7 @@
     ASSERT_ARGS(get_codepoints)
     String_iter iter;
     UINTVAL start;
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
+    STRING * const return_string = Parrot_str_copy(interp, src);
 
     iter_init(interp, src, &iter);
     iter.set_position(interp, &iter, offset);
@@ -512,39 +409,6 @@
 
 /*
 
-=item C<static STRING * get_codepoints_inplace(PARROT_INTERP, STRING *src,
-UINTVAL offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> codepoints and returns
-them in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints_inplace(PARROT_INTERP, ARGIN(STRING *src),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *return_string))
-{
-    ASSERT_ARGS(get_codepoints_inplace)
-    String_iter iter;
-    UINTVAL start;
-    Parrot_str_reuse_COW(interp, src, return_string);
-    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;
-    return_string->strlen = count;
-    return_string->hashval = 0;
-    return return_string;
-}
-
-/*
-
 =item C<static STRING * get_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
 UINTVAL count)>
 
@@ -569,100 +433,7 @@
 
 /*
 
-=item C<static STRING * get_bytes_inplace(PARROT_INTERP, STRING *src, UINTVAL
-offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> bytes and returns them
-in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes_inplace(PARROT_INTERP, ARGIN(STRING *src),
-        UINTVAL offset, UINTVAL count, ARGIN(STRING *return_string))
-{
-    ASSERT_ARGS(get_bytes_inplace)
-    UNUSED(interp);
-    UNUSED(src);
-    UNUSED(offset)
-    UNUSED(count);
-    UNUSED(return_string);
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_codepoints(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_codepoints)>
-
-Replaces in string C<src> at position C<offset> for C<count> codepoints with
-the contents of string C<new_codepoints>.
-
-=cut
-
-*/
-
-static void
-set_codepoints(PARROT_INTERP, ARGIN(STRING *src),
-        UINTVAL offset, UINTVAL count, ARGIN(STRING *new_codepoints))
-{
-    ASSERT_ARGS(set_codepoints)
-    UNUSED(interp);
-    UNUSED(src);
-    UNUSED(offset)
-    UNUSED(count);
-    UNUSED(new_codepoints);
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_bytes)>
-
-Replaces in string C<src> at position C<offset> for C<count> bytes with the
-contents of string C<new_bytes>.
-
-=cut
-
-*/
-
-static void
-set_bytes(PARROT_INTERP, SHIM(STRING *src),
-        UINTVAL offset, UINTVAL count, SHIM(STRING *new_bytes))
-{
-    ASSERT_ARGS(set_bytes)
-    UNUSED(interp);
-    UNUSED(offset)
-    UNUSED(count);
-    UNIMPL;
-}
-
-/*
-
-=item C<static void become_encoding(PARROT_INTERP, STRING *src)>
-
-Unconditionally makes the string be in this encoding, if that's valid
-
-=cut
-
-*/
-
-static void
-become_encoding(PARROT_INTERP, SHIM(STRING *src))
-{
-    ASSERT_ARGS(become_encoding)
-    UNIMPL;
-}
-
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
 
 Returns the number of codepoints in string C<src>.
 
@@ -672,7 +443,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(STRING *src))
+codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
     String_iter iter;
@@ -688,7 +459,7 @@
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
 
 Returns the number of bytes in string C<src>.
 
@@ -698,7 +469,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-bytes(SHIM_INTERP, ARGIN(STRING *src))
+bytes(SHIM_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(bytes)
     return src->bufused;
@@ -810,7 +581,7 @@
 
 /*
 
-=item C<ENCODING * Parrot_encoding_utf16_init(PARROT_INTERP)>
+=item C<void Parrot_encoding_utf16_init(PARROT_INTERP)>
 
 Initializes the UTF-16 encoding.
 
@@ -818,8 +589,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING *
+void
 Parrot_encoding_utf16_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_encoding_utf16_init)
@@ -830,24 +600,20 @@
         4, /* Max bytes per codepoint 0 .. 0x10ffff */
         to_encoding,
         get_codepoint,
-        set_codepoint,
         get_byte,
         set_byte,
         get_codepoints,
-        get_codepoints_inplace,
         get_bytes,
-        get_bytes_inplace,
-        set_codepoints,
-        set_bytes,
-        become_encoding,
         codepoints,
         bytes,
         iter_init,
-        find_cclass
+        find_cclass,
+        NULL
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "utf16", return_encoding);
-    return return_encoding;
+
+    return;
 }
 
 /*

Modified: branches/avl_string_cache/src/string/encoding/utf16.h
==============================================================================
--- branches/avl_string_cache/src/string/encoding/utf16.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/encoding/utf16.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/encoding/utf16.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING * Parrot_encoding_utf16_init(PARROT_INTERP)
+void Parrot_encoding_utf16_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_encoding_utf16_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/avl_string_cache/src/string/encoding/utf8.c
==============================================================================
--- branches/avl_string_cache/src/string/encoding/utf8.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/encoding/utf8.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -27,17 +27,13 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void become_encoding(PARROT_INTERP, SHIM(STRING *src))
-        __attribute__nonnull__(1);
-
 PARROT_PURE_FUNCTION
-static UINTVAL bytes(SHIM_INTERP, ARGIN(STRING *src))
+static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(2);
 
-static UINTVAL codepoints(PARROT_INTERP, ARGMOD(STRING *src))
+static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*src);
+        __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL find_cclass(PARROT_INTERP,
@@ -62,14 +58,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*src);
 
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes_inplace(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *return_string))
-        __attribute__nonnull__(1);
-
 static UINTVAL get_codepoint(PARROT_INTERP,
     ARGIN(const STRING *src),
     UINTVAL offset)
@@ -84,18 +72,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints_inplace(PARROT_INTERP,
-    ARGMOD(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *return_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*return_string);
-
 static void iter_init(SHIM_INTERP,
     ARGIN(const STRING *src),
     ARGOUT(String_iter *iter))
@@ -110,35 +86,10 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void set_bytes(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_bytes))
-        __attribute__nonnull__(1);
-
-static void set_codepoint(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL codepoint)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_codepoints(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_codepoints))
-        __attribute__nonnull__(1);
-
 PARROT_CAN_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP,
-    ARGMOD(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
 static UINTVAL utf8_characters(PARROT_INTERP,
     ARGIN(const utf8_t *ptr),
@@ -183,8 +134,6 @@
 static const void * utf8_skip_forward(ARGIN(const void *ptr), UINTVAL n)
         __attribute__nonnull__(1);
 
-#define ASSERT_ARGS_become_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -197,31 +146,18 @@
 #define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_bytes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_codepoints_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(return_string))
 #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))
-#define ASSERT_ARGS_set_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_set_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_codepoints __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))
@@ -271,10 +207,6 @@
     4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6      /* cjk etc. */
 };
 
-#if 0
-typedef unsigned char utf8_t;
-#endif
-
 /*
 
 =item C<static UINTVAL utf8_characters(PARROT_INTERP, const utf8_t *ptr, UINTVAL
@@ -566,7 +498,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.  If C<dest> is
 provided, it will contain the result.  Otherwise this function operates in
@@ -578,24 +510,19 @@
 
 PARROT_CAN_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGMOD(STRING *src), ARGMOD_NULLOK(STRING *dest))
+to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_encoding)
     STRING *result;
     String_iter src_iter;
     UINTVAL offs, dest_len, dest_pos, src_len;
-    const int in_place = (dest == NULL);
     unsigned char *p;
 
     if (src->encoding == Parrot_utf8_encoding_ptr)
-        return in_place ? src : Parrot_str_copy(interp, src);
+        return Parrot_str_clone(interp, src);
+
+    result = Parrot_gc_new_string_header(interp, 0);
     src_len = src->strlen;
-    if (in_place) {
-        result = src;
-    }
-    else {
-        result = dest;
-    }
 
     /* init iter before possilby changing encoding */
     ENCODING_ITER_INIT(interp, src, &src_iter);
@@ -604,16 +531,11 @@
     result->strlen   = src_len;
 
     if (!src->strlen)
-        return dest;
+        return result;
+
+    Parrot_gc_allocate_string_storage(interp, result, src_len);
+    p = (unsigned char *)result->strstart;
 
-    if (in_place) {
-        /* need intermediate memory */
-        p = mem_gc_allocate_n_typed(interp, src_len, unsigned char);
-    }
-    else {
-        Parrot_gc_reallocate_string_storage(interp, dest, src_len);
-        p = (unsigned char *)dest->strstart;
-    }
     if (src->charset == Parrot_ascii_charset_ptr) {
         for (dest_len = 0; dest_len < src_len; ++dest_len) {
             p[dest_len] = ((unsigned char*)src->strstart)[dest_len];
@@ -633,13 +555,9 @@
                 if (need < 16)
                     need = 16;
                 dest_len += need;
-                if (in_place)
-                    p = mem_gc_realloc_n_typed(interp, p, dest_len, unsigned char);
-                else {
-                    result->bufused = dest_pos;
-                    Parrot_gc_reallocate_string_storage(interp, dest, dest_len);
-                    p = (unsigned char *)dest->strstart;
-                }
+                result->bufused = dest_pos;
+                Parrot_gc_reallocate_string_storage(interp, result, dest_len);
+                p = (unsigned char *)result->strstart;
             }
 
             pos = p + dest_pos;
@@ -648,11 +566,7 @@
         }
         result->bufused = dest_pos;
     }
-    if (in_place) {
-        Parrot_gc_reallocate_string_storage(interp, src, src->bufused);
-        memcpy(src->strstart, p, src->bufused);
-        mem_gc_free(interp, p);
-    }
+
     return result;
 }
 
@@ -675,29 +589,6 @@
     return utf8_decode(interp, start);
 }
 
-/*
-
-=item C<static void set_codepoint(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL codepoint)>
-
-Sets, in string C<src> at position C<offset>, the codepoint C<codepoint>.
-
-=cut
-
-*/
-
-static void
-set_codepoint(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL codepoint)
-{
-    ASSERT_ARGS(set_codepoint)
-    const void *start;
-    void *p;
-    DECL_CONST_CAST;
-
-    start = utf8_skip_forward(src->strstart, offset);
-    p = PARROT_const_cast(void *, start);
-    utf8_encode(interp, p, codepoint);
-}
 
 /*
 
@@ -789,7 +680,7 @@
 {
     ASSERT_ARGS(get_codepoints)
 
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
+    STRING * const return_string = Parrot_str_copy(interp, src);
     String_iter    iter;
     UINTVAL        start;
 
@@ -827,10 +718,7 @@
 get_bytes(PARROT_INTERP, ARGMOD(STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_bytes)
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
-
-    return_string->encoding = src->encoding;    /* XXX */
-    return_string->charset = src->charset;
+    STRING * const return_string = Parrot_str_copy(interp, src);
 
     return_string->strstart = (char *)return_string->strstart + offset ;
     return_string->bufused = count;
@@ -841,125 +729,11 @@
     return return_string;
 }
 
-/*
-
-=item C<static STRING * get_codepoints_inplace(PARROT_INTERP, STRING *src,
-UINTVAL offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> codepoints and returns
-them in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints_inplace(PARROT_INTERP, ARGMOD(STRING *src),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *return_string))
-{
-    ASSERT_ARGS(get_codepoints_inplace)
-    String_iter iter;
-    UINTVAL start;
-
-    Parrot_str_reuse_COW(interp, src, return_string);
-    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;
-    return_string->strlen  = count;
-    return_string->hashval = 0;
-
-    return return_string;
-}
-
-/*
-
-=item C<static STRING * get_bytes_inplace(PARROT_INTERP, STRING *src, UINTVAL
-offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> bytes and returns them
-in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes_inplace(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *return_string))
-{
-    ASSERT_ARGS(get_bytes_inplace)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_codepoints(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_codepoints)>
-
-Replaces in string C<src> at position C<offset> for C<count> codepoints with
-the contents of string C<new_codepoints>.
-
-=cut
-
-*/
-
-static void
-set_codepoints(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_codepoints))
-{
-    ASSERT_ARGS(set_codepoints)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_bytes)>
-
-Replaces in string C<src> at position C<offset> for C<count> bytes with the
-contents of string C<new_bytes>.
-
-=cut
-
-*/
-
-static void
-set_bytes(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_bytes))
-{
-    ASSERT_ARGS(set_bytes)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void become_encoding(PARROT_INTERP, STRING *src)>
-
-Unconditionally makes the string be in this encoding, if that's valid
-
-=cut
-
-*/
-
-static void
-become_encoding(PARROT_INTERP, SHIM(STRING *src))
-{
-    ASSERT_ARGS(become_encoding)
-    UNIMPL;
-}
 
 
 /*
 
-=item C<static UINTVAL codepoints(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
 
 Returns the number of codepoints in string C<src>.
 
@@ -968,7 +742,7 @@
 */
 
 static UINTVAL
-codepoints(PARROT_INTERP, ARGMOD(STRING *src))
+codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
     String_iter iter;
@@ -984,7 +758,7 @@
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
 
 Returns the number of bytes in string C<src>.
 
@@ -994,7 +768,7 @@
 
 PARROT_PURE_FUNCTION
 static UINTVAL
-bytes(SHIM_INTERP, ARGIN(STRING *src))
+bytes(SHIM_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(bytes)
     return src->bufused;
@@ -1025,7 +799,7 @@
 
 /*
 
-=item C<ENCODING * Parrot_encoding_utf8_init(PARROT_INTERP)>
+=item C<void Parrot_encoding_utf8_init(PARROT_INTERP)>
 
 Initializes the UTF-8 encoding.
 
@@ -1033,8 +807,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING *
+void
 Parrot_encoding_utf8_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_encoding_utf8_init)
@@ -1045,24 +818,20 @@
         4, /* Max bytes per codepoint 0 .. 0x10ffff */
         to_encoding,
         get_codepoint,
-        set_codepoint,
         get_byte,
         set_byte,
         get_codepoints,
-        get_codepoints_inplace,
         get_bytes,
-        get_bytes_inplace,
-        set_codepoints,
-        set_bytes,
-        become_encoding,
         codepoints,
         bytes,
         iter_init,
-        find_cclass
+        find_cclass,
+        NULL
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "utf8", return_encoding);
-    return return_encoding;
+
+    return;
 }
 
 /*

Modified: branches/avl_string_cache/src/string/encoding/utf8.h
==============================================================================
--- branches/avl_string_cache/src/string/encoding/utf8.h	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/encoding/utf8.h	Thu Apr 22 09:55:26 2010	(r45889)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/encoding/utf8.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING * Parrot_encoding_utf8_init(PARROT_INTERP)
+void Parrot_encoding_utf8_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_encoding_utf8_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/avl_string_cache/src/string/primitives.c
==============================================================================
--- branches/avl_string_cache/src/string/primitives.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/string/primitives.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -70,8 +70,8 @@
 
 /*
 
-=item C<Parrot_UInt4 string_unescape_one(PARROT_INTERP, UINTVAL *offset, STRING
-*string)>
+=item C<Parrot_UInt4 string_unescape_one(PARROT_INTERP, UINTVAL *offset, const
+STRING *string)>
 
 Unescape a single character. We assume that we're at the start of a
 sequence, right after the \.
@@ -83,7 +83,7 @@
 PARROT_EXPORT
 Parrot_UInt4
 string_unescape_one(PARROT_INTERP, ARGMOD(UINTVAL *offset),
-        ARGMOD(STRING *string))
+        ARGIN(const STRING *string))
 {
     ASSERT_ARGS(string_unescape_one)
     UINTVAL workchar  = 0;

Modified: branches/avl_string_cache/src/sub.c
==============================================================================
--- branches/avl_string_cache/src/sub.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/sub.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -49,60 +49,6 @@
 
 /*
 
-=item C<PMC * new_ret_continuation_pmc(PARROT_INTERP, opcode_t *address)>
-
-Returns a new C<RetContinuation> PMC, and sets address field to C<address>
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-PMC *
-new_ret_continuation_pmc(PARROT_INTERP, ARGIN_NULLOK(opcode_t *address))
-{
-    ASSERT_ARGS(new_ret_continuation_pmc)
-    PMC* const continuation = Parrot_pmc_new(interp, enum_class_RetContinuation);
-    VTABLE_set_pointer(interp, continuation, address);
-    return continuation;
-}
-
-/*
-
-=item C<void invalidate_retc_context(PARROT_INTERP, PMC *cont)>
-
-Make true Continuations from all RetContinuations up the call chain.
-
-=cut
-
-*/
-
-void
-invalidate_retc_context(PARROT_INTERP, ARGMOD(PMC *cont))
-{
-    ASSERT_ARGS(invalidate_retc_context)
-
-    PMC *ctx = PARROT_CONTINUATION(cont)->from_ctx;
-    cont = Parrot_pcc_get_continuation(interp, ctx);
-
-    while (1) {
-        /*
-         * We  stop if we encounter a true continuation, because
-         * if one were created, everything up the chain would have been
-         * invalidated earlier.
-         */
-        if (!cont || cont->vtable != interp->vtables[enum_class_RetContinuation])
-            break;
-        cont->vtable = interp->vtables[enum_class_Continuation];
-        ctx  = Parrot_pcc_get_caller_ctx(interp, ctx);
-        cont = Parrot_pcc_get_continuation(interp, ctx);
-    }
-}
-
-/*
-
 =item C<STRING* Parrot_full_sub_name(PARROT_INTERP, PMC* sub_pmc)>
 
 Return namespace, name, and location of subroutine.
@@ -395,7 +341,7 @@
         PMC * const lex_pad = Parrot_pcc_get_lex_pad(interp, ctx);
         PMC * outer         = Parrot_pcc_get_outer_ctx(interp, ctx);
 
-        if (!outer)
+        if (PMC_IS_NULL(outer))
             return lex_pad;
 
         if (!PMC_IS_NULL(lex_pad))
@@ -428,7 +374,7 @@
         PMC * const lex_pad = Parrot_pcc_get_lex_pad(interp, ctx);
         PMC * caller        = Parrot_pcc_get_caller_ctx(interp, ctx);
 
-        if (!caller)
+        if (PMC_IS_NULL(caller))
             return lex_pad;
 
         if (!PMC_IS_NULL(lex_pad))
@@ -633,10 +579,6 @@
 
 F<include/parrot/sub.h>.
 
-=head1 HISTORY
-
-Initial version by Melvin on 2002/06/6.
-
 =cut
 
 */

Modified: branches/avl_string_cache/src/thread.c
==============================================================================
--- branches/avl_string_cache/src/thread.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/thread.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -20,6 +20,7 @@
 
 #include "parrot/parrot.h"
 #include "parrot/atomic.h"
+#include "parrot/runcore_api.h"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_parrotinterpreter.h"
 
@@ -30,8 +31,7 @@
 
 static Parrot_Interp detach(UINTVAL tid);
 PARROT_CAN_RETURN_NULL
-static Shared_gc_info * get_pool(PARROT_INTERP)
-        __attribute__nonnull__(1);
+static Shared_gc_info * get_pool(void);
 
 PARROT_WARN_UNUSED_RESULT
 static int is_suspended_for_gc(PARROT_INTERP)
@@ -59,17 +59,13 @@
 static Parrot_Interp pt_check_tid(UINTVAL tid, ARGIN(const char *from))
         __attribute__nonnull__(2);
 
-static int pt_gc_count_threads(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
+static int pt_gc_count_threads(void);
 static void pt_gc_wait_for_stage(PARROT_INTERP,
     thread_gc_stage_enum from_stage,
     thread_gc_stage_enum to_stage)
         __attribute__nonnull__(1);
 
-static void pt_gc_wakeup_check(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
+static void pt_gc_wakeup_check(void);
 static void pt_ns_clone(PARROT_INTERP,
     ARGOUT(Parrot_Interp d),
     ARGOUT(PMC *dest_ns),
@@ -100,8 +96,7 @@
 static void* thread_func(ARGIN_NULLOK(void *arg));
 
 #define ASSERT_ARGS_detach __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_get_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_get_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_is_suspended_for_gc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_make_local_args_copy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -115,12 +110,10 @@
        PARROT_ASSERT_ARG(arg))
 #define ASSERT_ARGS_pt_check_tid __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(from))
-#define ASSERT_ARGS_pt_gc_count_threads __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_pt_gc_count_threads __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pt_gc_wait_for_stage __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_pt_gc_wakeup_check __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_pt_gc_wakeup_check __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pt_ns_clone __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(d) \
@@ -215,7 +208,7 @@
 
 /*
 
-=item C<static Shared_gc_info * get_pool(PARROT_INTERP)>
+=item C<static Shared_gc_info * get_pool(void)>
 
 Gets the shared gc information.  For now this is global data; ideally it will
 become something other than a static variable.  If everything uses this
@@ -227,7 +220,7 @@
 
 PARROT_CAN_RETURN_NULL
 static Shared_gc_info *
-get_pool(PARROT_INTERP)
+get_pool(void)
 {
     ASSERT_ARGS(get_pool)
     return shared_gc_info;
@@ -549,7 +542,7 @@
     }
 
     /* make sure we don't block a GC run */
-    pt_gc_wakeup_check(interp);
+    pt_gc_wakeup_check();
     PARROT_ASSERT(interp->thread_data->state & THREAD_STATE_FINISHED);
 
     UNLOCK(interpreter_array_mutex);
@@ -953,7 +946,7 @@
 
 /*
 
-=item C<static int pt_gc_count_threads(PARROT_INTERP)>
+=item C<static int pt_gc_count_threads(void)>
 
 Returns the number of active threads in the system (running or suspended).  Be
 sure to hold C<interpreter_array_mutex>.
@@ -963,7 +956,7 @@
 */
 
 static int
-pt_gc_count_threads(PARROT_INTERP)
+pt_gc_count_threads(void)
 {
     ASSERT_ARGS(pt_gc_count_threads)
     UINTVAL i;
@@ -1010,7 +1003,7 @@
     LOCK(interpreter_array_mutex);
 
     DEBUG_ONLY(fprintf(stderr, "%p: got lock\n", interp));
-    thread_count = pt_gc_count_threads(interp);
+    thread_count = pt_gc_count_threads();
 
     PARROT_ASSERT(info->gc_stage == from_stage);
     PARROT_ASSERT(!(interp->thread_data->state & THREAD_STATE_NOT_STARTED));
@@ -1041,7 +1034,7 @@
 
 /*
 
-=item C<static void pt_gc_wakeup_check(PARROT_INTERP)>
+=item C<static void pt_gc_wakeup_check(void)>
 
 Checks if it's necessary to wake threads to perform garbage collection.  This
 is called after thread death.  Be sure to hold C<interpreter_array_mutex>.
@@ -1051,7 +1044,7 @@
 */
 
 static void
-pt_gc_wakeup_check(PARROT_INTERP)
+pt_gc_wakeup_check(void)
 {
     ASSERT_ARGS(pt_gc_wakeup_check)
     Shared_gc_info * const info = shared_gc_info;
@@ -1060,7 +1053,7 @@
     if (!info)
         return;
 
-    thread_count = pt_gc_count_threads(interp);
+    thread_count = pt_gc_count_threads();
 
     if (info->num_reached == thread_count) {
         PARROT_ASSERT(info->gc_stage == THREAD_GC_STAGE_NONE);
@@ -1577,7 +1570,7 @@
     if (!running_threads)
         return;
 
-    info = get_pool(interp);
+    info = get_pool();
     PARROT_ATOMIC_INT_GET(block_level, info->gc_block_level);
 
     DEBUG_ONLY(fprintf(stderr, "start threaded mark\n"));
@@ -1714,7 +1707,7 @@
 Parrot_shared_gc_block(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_shared_gc_block)
-    Shared_gc_info * const info = get_pool(interp);
+    Shared_gc_info * const info = get_pool();
 
     if (info) {
         int level;
@@ -1738,7 +1731,7 @@
 Parrot_shared_gc_unblock(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_shared_gc_unblock)
-    Shared_gc_info * const info = get_pool(interp);
+    Shared_gc_info * const info = get_pool();
     if (info) {
         int level;
         PARROT_ATOMIC_INT_DEC(level, info->gc_block_level);

Modified: branches/avl_string_cache/src/utils.c
==============================================================================
--- branches/avl_string_cache/src/utils.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/utils.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -644,7 +644,7 @@
 {
     ASSERT_ARGS(Parrot_byte_rindex)
     const INTVAL searchlen          = search->strlen;
-    const char * const search_start = (const char *)Buffer_bufstart(search);
+    const char * const search_start = (const char *)(search->strstart);
     UINTVAL max_possible_offset     = (base->strlen - search->strlen);
     INTVAL current_offset;
 
@@ -653,7 +653,7 @@
 
     for (current_offset = max_possible_offset; current_offset >= 0;
             current_offset--) {
-        const char * const base_start = (char *)Buffer_bufstart(base) + current_offset;
+        const char * const base_start = (char *)(base->strstart) + current_offset;
         if (memcmp(base_start, search_start, searchlen) == 0) {
             return current_offset;
         }

Modified: branches/avl_string_cache/src/vtables.c
==============================================================================
--- branches/avl_string_cache/src/vtables.c	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/src/vtables.c	Thu Apr 22 09:55:26 2010	(r45889)
@@ -91,14 +91,14 @@
 
 PARROT_EXPORT
 void
-Parrot_destroy_vtable(PARROT_INTERP, ARGMOD(VTABLE *vtable))
+Parrot_destroy_vtable(PARROT_INTERP, ARGFREE_NOTNULL(VTABLE *vtable))
 {
     ASSERT_ARGS(Parrot_destroy_vtable)
     /* We sometimes get a type number allocated without any corresponding
      * vtable. E.g. if you load perl_group, perlscalar is this way.  */
 
     if (vtable->ro_variant_vtable) {
-        VTABLE *ro_vtable = vtable->ro_variant_vtable;
+        VTABLE * const ro_vtable = vtable->ro_variant_vtable;
 
         if (ro_vtable->isa_hash) {
             parrot_hash_destroy(interp, ro_vtable->isa_hash);

Modified: branches/avl_string_cache/t/codingstd/c_function_docs.t
==============================================================================
--- branches/avl_string_cache/t/codingstd/c_function_docs.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/codingstd/c_function_docs.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -91,8 +91,6 @@
 }
 
 __DATA__
-compilers/imcc/instructions.c
-compilers/imcc/optimizer.c
 compilers/imcc/parser_util.c
 compilers/imcc/pbc.c
 compilers/imcc/pcc.c

Modified: branches/avl_string_cache/t/compilers/imcc/syn/file.t
==============================================================================
--- branches/avl_string_cache/t/compilers/imcc/syn/file.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/compilers/imcc/syn/file.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 #!perl
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -400,7 +400,7 @@
     $err_msg =~ s/\r//g if $^O =~ /^(MSWin32|msys)$/i;
     is( $err_msg, << "OUT", 'including a non-existent file' );
 error:imcc:$enoent_err_msg
-\tin file '$temp_pir' line 2
+\tin file '$temp_pir' line 1
 OUT
 }
 

Modified: branches/avl_string_cache/t/compilers/imcc/syn/subflags.t
==============================================================================
--- branches/avl_string_cache/t/compilers/imcc/syn/subflags.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/compilers/imcc/syn/subflags.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -69,7 +69,7 @@
     isa_ok($P30, 'Sub', ":method sub found w/.const")
     $P0 = get_global 'method1'
     $I0 = isnull $P0
-    todo($I0, ":method sub not found in namespace")
+    ok($I0, ":method sub not found in namespace")
 
     ## :subid subs
     .const 'Sub' $P40 = 'subid1'

Modified: branches/avl_string_cache/t/distro/file_metadata.t
==============================================================================
--- branches/avl_string_cache/t/distro/file_metadata.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/distro/file_metadata.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -40,7 +40,7 @@
 }
 
 
-my $cmd = -d '.svn' ? 'svn' : 'svk';
+my $cmd = 'svn';
 my @git_svn_metadata;    # set in BEGIN block
 
 # how many files to check at a time. May have to lower this when we run
@@ -245,7 +245,7 @@
             plan skip_all => q{git svn file metadata not retained};
         }
     }
-    elsif ( !( (-d '.svn' && `svn info .`) or `svk info .` ) ) {
+    elsif ( ! (-d '.svn' && `svn info .`) ) {
         plan skip_all => 'not a working copy';
     }
     else { plan tests => 5 }
@@ -253,7 +253,7 @@
 
 #
 # Given a list, a count, and a sub, process that list count elements
-# at a time. (do this to speed up execution for the svn/svk commands)
+# at a time. (do this to speed up execution for the svn commands)
 #
 
 sub at_a_time {

Deleted: branches/avl_string_cache/t/dynpmc/gdbmhash.t
==============================================================================
--- branches/avl_string_cache/t/dynpmc/gdbmhash.t	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,441 +0,0 @@
-#! parrot
-# Copyright (C) 2005-2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/dynpmc/gdbmhash.t - test the GDBMHash PMC
-
-=head1 SYNOPSIS
-
-    % parrot t/dynpmc/gdbmhash.t
-
-=head1 DESCRIPTION
-
-Tests the C<GDBMHash> PMC.
-
-=cut
-
-.sub main
-    .include 'test_more.pir'
-    .include 'iglobals.pasm'
-    .local pmc config_hash, interp
-
-    plan(48)
-    interp = getinterp
-    config_hash = interp[.IGLOBALS_CONFIG_HASH]
-    $S0 = config_hash['has_gdbm']
-    unless $S0 goto no_gdbm
-
-    test_typeof()
-    test_interface()
-    test_get_integer()
-    test_get_bool()
-    test_modify_an_entry()
-    test_exists_keyed()
-    test_set_string_with_string_key()
-    test_set_string_with_pmc_key()
-    test_set_pmc_with_string_key()
-    test_set_pmc_with_pmc_key()
-    test_set_intval_with_string_key()
-    test_set_floatval_with_pmc_key()
-    test_delete_keyed()
-    .return()
-  no_gdbm:
-    skip(48, 'No gdbm library available')
-.end
-
-.sub unlink
-    .param string filename
-    new $P0, 'OS'
-    push_eh _handler
-    $P0.'rm'(filename)
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    printerr "# Cannot unlink "
-    printerr filename
-    printerr " ("
-    printerr e
-    printerr ")\n"
-.end
-
-.sub test_typeof
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    .local string type
-    type = typeof hash_1
-    is(type, 'GDBMHash', 'typeof')
-.end
-
-.sub test_interface
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    .local int bool1
-    does bool1, hash_1, "scalar"
-    is(bool1, 0, 'check whether interface is done')
-    does bool1, hash_1, "hash"
-    is(bool1, 1, 'check whether interface is done')
-    does bool1, hash_1, "no_interface"
-    is(bool1, 0, 'check whether interface is done')
-.end
-
-.sub test_get_integer
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    .local int hash_size
-    hash_size = hash_1
-    is(hash_size, 0, 'An unitialized GDBMHash has size 0')
-
-    hash_1 = "gdbm_hash_1"
-    hash_size = hash_1
-    is(hash_size, 0, 'An GDBMHash for a new file has size 0')
-
-    hash_1["key1"] = "val1"
-    hash_size = hash_1
-    is(hash_size, 1, 'After one assignment GDBMHash has size 1')
-
-    hash_1["key2"] = "val2"
-    hash_size = hash_1
-    is(hash_size, 2, 'After two assignments GDBMHash has size 2')
-
-    hash_1["key3"] = "val3"
-    hash_1["key4"] = "val4"
-    hash_1["key5"] = "val5"
-    hash_1["key6"] = "val6"
-    hash_1["key7"] = "val7"
-    hash_1["key8"] = "val8"
-    hash_1["key9"] = "val9"
-    hash_1["key10"] = "val10"
-    hash_1["key11"] = "val11"
-    hash_1["key12"] = "val12"
-    hash_1["key13"] = "val13"
-    hash_1["key14"] = "val14"
-    hash_1["key15"] = "val15"
-    hash_size = hash_1
-    is(hash_size, 15, 'After 15 assignments GDBMHash has size 15')
-
-    delete hash_1["key7"]
-    delete hash_1["key9"]
-
-    hash_size = hash_1
-    is(hash_size, 13, 'After 15 assignments and 2 deletes GDBMHash has size 13')
-
-    hash_1."close"()
-    unlink('gdbm_hash_1')
-.end
-
-.sub test_get_bool
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    if hash_1 goto HASH1_IS_1
-    ok(1, 'An uninitialized GDBMHash is not')
-HASH1_IS_1:
-
-    hash_1 = "gdbm_hash_2"
-    if hash_1 goto HASH1_IS_2
-    ok(1, 'A GDBMHash for a new file is not')
-HASH1_IS_2:
-
-    hash_1["key1"] = "val1"
-    if hash_1 goto HASH1_IS_3
-    ok(0, 'After one insert the GDBMHash is not')
-HASH1_IS_3:
-    ok(1, 'After one insert the GDBMHash is')
-
-    hash_1."close"()
-    unlink('gdbm_hash_2')
-.end
-
-# The value is a STRING, with umlaut
-# The key used for insertion is a STRING.
-.sub test_modify_an_entry
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    hash_1 = "gdbm_hash_3"
-
-    .local pmc    val_pmc
-
-    hash_1["Schluessel"] = "Wert urspruenglich"
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, 'Wert urspruenglich', 'modify an entry')
-    hash_1["Schluessel"] = "Wert geaendert"
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, 'Wert geaendert', 'modify an entry')
-    hash_1["Schluessel"] = "Wert nocheinmal geaendert"
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, 'Wert nocheinmal geaendert', 'modify an entry')
-    hash_1["Schluessel"] = "Wert urspruenglich"
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, 'Wert urspruenglich', 'modify an entry')
-
-    hash_1."close"()
-    unlink('gdbm_hash_3')
-.end
-
-# The value is a STRING.
-# The key used for insertion is a STRING.
-.sub test_exists_keyed
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    hash_1 = "gdbm_hash_4"
-
-    hash_1["Schluessel"] = "Wert"
-
-    .local int exist_flag
-    exist_flag = exists hash_1["a"]
-    is(exist_flag, 0, 'exists keyed')
-    exist_flag = exists hash_1["Schluessel"]
-    is(exist_flag, 1, 'exists keyed')
-
-    .local pmc key_out
-    key_out = new 'String'
-    key_out = "b"
-    exist_flag = exists hash_1[key_out]
-    is(exist_flag, 0, 'exists keyed')
-    key_out = "Schluessel"
-    exist_flag = exists hash_1[key_out]
-    is(exist_flag, 1, 'exists keyed')
-
-    hash_1."close"()
-    unlink('gdbm_hash_4')
-.end
-
-# The value is a STRING.
-# The key used for insertion is a STRING.
-.sub test_set_string_with_string_key
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    hash_1 = "gdbm_hash_5"
-
-    hash_1["Schluessel"] = "Wert"
-
-    .local pmc    val_pmc
-    .local string val_string
-
-    val_string = hash_1["Schluessel"]
-    is(val_string, 'Wert', 'set string with string key')
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, 'Wert', 'set string with string key')
-    .local pmc key_out
-    key_out = new 'String'
-    key_out = "Schluessel"
-    val_string = hash_1[key_out]
-    is(val_string, 'Wert', 'set string with string key')
-    val_pmc = hash_1[key_out]
-    is(val_pmc, 'Wert', 'set string with string key')
-
-    hash_1."close"()
-    unlink('gdbm_hash_5')
-.end
-
-# The value is a STRING.
-# The key used for insertion is a PMC.
-.sub test_set_string_with_pmc_key
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    hash_1 = "gdbm_hash_6"
-
-    .local pmc key_pmc
-    key_pmc = new 'String'
-    key_pmc = "Schluessel"
-    hash_1[key_pmc] = "Wert"
-
-    .local pmc    val_pmc
-    .local string val_string
-
-    val_string = hash_1["Schluessel"]
-    is(val_string, 'Wert', 'set string with pmc key')
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, 'Wert', 'set string with pmc key')
-    .local pmc key2
-    key2 = new 'String'
-    key2 = "Schluessel"
-    val_string = hash_1[key2]
-    is(val_string, 'Wert', 'set string with pmc key')
-    val_pmc = hash_1[key2]
-    is(val_pmc, 'Wert', 'set string with pmc key')
-
-    hash_1."close"()
-    unlink('gdbm_hash_6')
-.end
-
-# The value is a PMC.
-# The key used for insertion is a STRING.
-.sub test_set_pmc_with_string_key
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    hash_1 = "gdbm_hash_7"
-
-    .local pmc val
-    val = new 'String'
-    val = "Wert"
-    hash_1["Schluessel"] = val
-
-    .local pmc    val_pmc
-    .local string val_string
-
-    val_string = hash_1["Schluessel"]
-    is(val_string, 'Wert', 'set pmc with string key')
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, 'Wert', 'set pmc with string key')
-    .local pmc key_out
-    key_out = new 'String'
-    key_out = "Schluessel"
-    val_string = hash_1[key_out]
-    is(val_string, 'Wert', 'set pmc with string key')
-    val_pmc = hash_1[key_out]
-    is(val_pmc, 'Wert', 'set pmc with string key')
-
-    hash_1."close"()
-    unlink('gdbm_hash_7')
-.end
-
-# The value is a PMC.
-# The key used for insertion is a PMC.
-.sub test_set_pmc_with_pmc_key
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    hash_1 = "gdbm_hash_8"
-
-    .local pmc val
-    val = new 'String'
-    val = "Wert"
-    .local pmc key_pmc
-    key_pmc = new 'String'
-    key_pmc = "Schluessel"
-    hash_1[key_pmc] = val
-
-    .local pmc    val_pmc
-    .local string val_string
-
-    val_string = hash_1["Schluessel"]
-    is(val_string, 'Wert', 'set pmc with pmc key')
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, 'Wert', 'set pmc with pmc key')
-    .local pmc key2
-    key2 = new 'String'
-    key2 = "Schluessel"
-    val_string = hash_1[key2]
-    is(val_string, 'Wert', 'set pmc with pmc key')
-    val_pmc = hash_1[key2]
-    is(val_pmc, 'Wert', 'set pmc with pmc key')
-
-    hash_1."close"()
-    unlink('gdbm_hash_8')
-.end
-
-# The value is an INTVAL
-# The key used for insertion is a STRING.
-.sub test_set_intval_with_string_key
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    hash_1 = "gdbm_hash_9"
-
-    hash_1["Schluessel"] = -11012005
-
-    .local pmc    val_pmc
-    .local string val_string
-
-    val_string = hash_1["Schluessel"]
-    is(val_string, -11012005, 'set intval with a string key')
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, -11012005, 'set intval with a string key')
-    .local pmc key_out
-    key_out = new 'String'
-    key_out = "Schluessel"
-    val_string = hash_1[key_out]
-    is(val_string, -11012005, 'set intval with a string key')
-    val_pmc = hash_1[key_out]
-    is(val_pmc, -11012005, 'set intval with a string key')
-
-    hash_1."close"()
-    unlink('gdbm_hash_9')
-.end
-
-# The value is a FLOATVAL.
-# The key used for insertion is a PMC.
-.sub test_set_floatval_with_pmc_key
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    hash_1 = "gdbm_hash_10"
-
-    .local pmc key_pmc
-    key_pmc = new 'String'
-    key_pmc = "Schluessel"
-    hash_1[key_pmc] = -1101.2005
-
-    .local pmc    val_pmc
-    .local string val_string
-
-    val_string = hash_1["Schluessel"]
-    is(val_string, -1101.2005, 'set float with a pmc key')
-    val_pmc = hash_1["Schluessel"]
-    is(val_pmc, -1101.2005, 'set float with a pmc key')
-    .local pmc key2
-    key2 = new 'String'
-    key2 = "Schluessel"
-    val_string = hash_1[key2]
-    is(val_string, -1101.2005, 'set float with a pmc key')
-    val_pmc = hash_1[key2]
-    is(val_pmc, -1101.2005, 'set float with a pmc key')
-
-    hash_1."close"()
-    unlink('gdbm_hash_10')
-.end
-
-.sub test_delete_keyed
-    .local pmc gdbmhash_lib
-    gdbmhash_lib = loadlib "gdbmhash"
-    .local pmc hash_1
-    hash_1 = new "GDBMHash"
-    hash_1 = "gdbm_hash_11"
-
-    .local int exist_flag
-    .local int hash_size
-
-    exist_flag = exists hash_1["a"]
-    is(exist_flag, 0, 'delete keyed')
-
-    hash_1["a"] = "A"
-    exist_flag = exists hash_1["a"]
-    is(exist_flag, 1, 'delete keyed')
-
-    delete hash_1["a"]
-    exist_flag = exists hash_1["a"]
-    is(exist_flag, 0, 'delete keyed')
-
-    hash_1."close"()
-    unlink('gdbm_hash_11')
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/t/examples/tutorial.t
==============================================================================
--- branches/avl_string_cache/t/examples/tutorial.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/examples/tutorial.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -220,7 +220,7 @@
 ok 1 - first test
 ok 2 - second test
 ok 3 #skip skipped test
-ok 4 # TODO 42
+ok 4 # TODO todo test
 END_EXPECTED
 
 );

Modified: branches/avl_string_cache/t/harness
==============================================================================
--- branches/avl_string_cache/t/harness	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/harness	Thu Apr 22 09:55:26 2010	(r45889)
@@ -81,7 +81,7 @@
             archive          => 'parrot_test_run.tar.gz',
             merge            => 1,
             extra_properties => \%env_data,
-            extra_files      => [ 'myconfig', 'config_lib.pasm' ],
+            extra_files      => [ 'myconfig', 'config_lib.pir' ],
         }
     );
     $harness->runtests(@tests);

Added: branches/avl_string_cache/t/harness.pir
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/t/harness.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,390 @@
+#!parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+.sub 'main' :main
+    .param pmc argv
+    $S0  = shift argv
+    .local int argc
+    argc = elements argv
+    if argc > 0 goto L1
+    help()
+    end
+  L1:
+    .local pmc opts
+    opts = _parse_opts(argv)
+    $I0 = exists opts['help']
+    unless $I0 goto L2
+    help()
+    end
+  L2:
+    .tailcall do(opts, argv)
+.end
+
+.sub 'help' :anon
+    say <<"HELP"
+parrot t/harness.pir [options] [testfiles]
+    --core-tests
+    --runcore-tests
+    --code-tests
+    --archive  ... create a TAP archive of the test run
+    --send-to-smolder ... send the TAP archive to the Parrot Smolder server
+HELP
+.end
+
+.sub '_parse_opts' :anon
+    .param pmc argv
+    load_bytecode 'Getopt/Obj.pbc'
+    $P0 = new ['Getopt';'Obj']
+    $P0.'notOptStop'(1)
+    push $P0, 'gc-debug'
+    push $P0, 'core-tests'
+    push $P0, 'runcore-tests'
+    push $P0, 'code-tests'
+    push $P0, 'run-exec'
+    push $P0, 'archive'
+    push $P0, 'send-to-smolder'
+    push $P0, 'help|h'
+    $P1 = $P0.'get_options'(argv)
+    .return ($P1)
+.end
+
+.sub 'do' :anon
+    .param pmc opts
+    .param pmc files
+    set_test_prog_args(opts)
+    load_bytecode 'TAP/Harness.pbc'
+    .local pmc options, env, harness, aggregate
+    options = new 'Hash'
+    env = new 'Env'
+    $I0 = exists env['HARNESS_VERBOSE']
+    unless $I0 goto L1
+    $S0 = env['HARNESS_VERBOSE']
+    options['verbosity'] = $S0
+  L1:
+    $I0 = exists opts['archive']
+    if $I0 goto L2
+    harness = new ['TAP';'Harness']
+    options['directives'] = 1
+    goto L3
+  L2:
+    harness = new ['TAP';'Harness';'Archive']
+    harness.'archive'('parrot_test_run.tar.gz')
+    options['merge'] = 1
+    .local pmc env_data
+    env_data = collect_test_environment_data()
+    harness.'extra_props'(env_data)
+    $P0 = split ' ', 'myconfig config_lib.pir'
+    harness.'extra_files'($P0)
+  L3:
+    harness.'process_args'(options)
+    $P0 = _get_tests(opts, files)
+    aggregate = harness.'runtests'($P0)
+    $I0 = exists opts['send-to-smolder']
+    unless $I0 goto L4
+    .tailcall send_archive_to_smolder(env_data)
+  L4:
+    $I0 = aggregate.'all_passed'()
+    $I0 = not $I0
+    exit $I0
+.end
+
+.sub 'set_test_prog_args' :anon
+    .param pmc opts
+    $S0 = ''
+    $I0 = exists opts['gc-debug']
+    unless $I0 goto L1
+    $S0 .= ' --gc-debug'
+  L1:
+    $I0 = exists opts['run-exec']
+    unless $I0 goto L2
+    $S0 .= ' --run-exec'
+  L2:
+    $S0 = substr $S0, 1
+    $P0 = new 'Env'
+    $P0['TEST_PROG_ARGS'] = $S0
+.end
+
+.sub '_get_tests' :anon
+    .param pmc opts
+    .param pmc files
+    .local int nb
+    $I0 = opts['code-tests']
+    unless $I0 goto L1
+    .const string developing_tests = 't/distro/file_metadata.t t/codingstd/*.t'
+    files = glob(developing_tests)
+    goto L2
+  L1:
+    nb = elements files
+    unless nb == 0 goto L2
+    files = _get_common_tests(opts)
+  L2:
+    nb = elements files
+    # currently, FixedStringArray hasn't the method sort.
+    # see TT #1356
+    $P0 = new 'FixedPMCArray'
+    set $P0, nb
+    $I0 = 0
+    $P1 = iter files
+  L3:
+    unless $P1 goto L4
+    $S0 = shift $P1
+    $P2 = split "\\", $S0
+    $S0 = join "/", $P2
+    $P2 = box $S0
+    $P0[$I0] = $P2
+    inc $I0
+    goto L3
+  L4:
+    $P0.'sort'()
+    .return ($P0)
+.end
+
+.sub '_get_common_tests' :anon
+    .param pmc opts
+    .const string runcore_tests = <<'TEST'
+t/compilers/imcc/*/*.t
+t/op/*.t
+t/pmc/*.t
+t/oo/*.t
+t/native_pbc/*.t
+t/dynpmc/*.t
+t/dynoplibs/*.t
+TEST
+    .const string core_tests = <<'TEST'
+t/src/*.t
+t/run/*.t
+t/perl/*.t
+TEST
+    .const string library_tests = <<'TEST'
+t/compilers/pct/*.t
+t/compilers/pge/*.t
+t/compilers/pge/p5regex/*.t
+t/compilers/pge/perl6regex/*.t
+t/compilers/tge/*.t
+t/library/*.t
+t/tools/*.t
+t/profiling/*.t
+TEST
+    .const string configure_tests = <<'TEST'
+t/configure/*.t
+t/steps/*.t
+t/postconfigure/*.t
+TEST
+    $S0 = runcore_tests
+    $I0 = exists opts['runcore-tests']
+    if $I0 goto L1
+    $S0 .= core_tests
+    $I0 = exists opts['core-tests']
+    if $I0 goto L1
+    $S0 .= library_tests
+    $S0 .= configure_tests
+  L1:
+    $P0 = split "\n", $S0
+    $S0 = join ' ', $P0
+    $P0 = glob($S0)
+    .return ($P0)
+.end
+
+.include 'iglobals.pasm'
+
+.sub 'collect_test_environment_data' :anon
+    .local pmc config, env
+    $P0 = getinterp
+    config = $P0[.IGLOBALS_CONFIG_HASH]
+    env = new 'Env'
+    $P0 = new 'Hash'
+    .local string arch
+    arch = config['cpuarch']
+    $P0['Architecture'] = arch
+    $S0 = _get_compiler_version(config)
+    $P0['Compiler'] = $S0
+    .local string devel
+    devel = config['DEVEL']
+    $P0['DEVEL'] = devel
+    .local string optimize
+    optimize = 'none'
+    $I0 = exists config['optimize']
+    unless $I0 goto L1
+    optimize = config['optimize']
+  L1:
+    $P0['Optimize'] = optimize
+    .local string osname
+    osname = config['osname']
+    $P0['Platform'] = osname
+    .local string version
+    version = config['VERSION']
+    $P0['Version'] = version
+    .local string submitter
+    submitter = _get_submitter(config, env)
+    $P0['Submitter'] = submitter
+    _add_subversion_info($P0)
+    .return ($P0)
+.end
+
+.sub '_get_compiler_version' :anon
+    .param pmc config
+    $S0 = config['cc']
+    $I0 = index $S0, 'gcc'
+    unless $I0 >= 0 goto L1
+    $I0 = exists config['gccversion']
+    unless $I0 goto L1
+    $S0 .= ' '
+    $S1 = config['gccversion']
+    $S0 .= $S1
+    .return ($S0)
+  L1:
+    $I0 = index $S0, 'cl'
+    unless $I0 >= 0 goto L2
+    $I0 = exists config['msvcversion']
+    unless $I0 goto L2
+    $S0 .= ' '
+    $S1 = config['msvcversion']
+    $S0 .= $S1
+    .return ($S0)
+  L2:
+    $I0 = exists config['gccversion']
+    unless $I0 goto L3
+    $S0 .= ' (gcc '
+    $S1 = config['gccversion']
+    $S0 .= $S1
+    $S0 .= ')'
+    .return ($S0)
+  L3:
+    $I0 = exists config['msvcversion']
+    unless $I0 goto L4
+    $S0 .= ' (msvc '
+    $S1 = config['msvcversion']
+    $S0 .= $S1
+    $S0 .= ')'
+    .return ($S0)
+  L4:
+    .return ($S0)
+.end
+
+.sub '_get_submitter' :anon
+    .param pmc config
+    .param pmc env
+    $I0 = exists env['SMOLDER_SUBMITTER']
+    unless $I0 goto L1
+    $S0 = env['SMOLDER_SUBMITTER']
+    .return ($S0)
+  L1:
+    .local string me
+    $I0 = exists config['win32']
+    unless $I0 goto L2
+    me = env['USERNAME']
+    goto L3
+  L2:
+    me = env['LOGNAME']
+  L3:
+    $S0 = me . '@unknown'
+    .return ($S0)
+.end
+
+.include 'cclass.pasm'
+
+.sub '_add_subversion_info' :anon
+    .param pmc hash
+    $I0 = file_exists('.svn')
+    unless $I0 goto L1
+    $P0 = new 'FileHandle'
+    $P0.'open'('svn info', 'pr')
+    $S0 = $P0.'readall'()
+    $P0.'close'()
+    $I0 = length $S0
+    $S1 = 'trunk'
+    $I1 = index $S0, '/branches/'
+    unless $I1 >= 0 goto L2
+    $I1 += 10
+    $I2 = find_not_cclass .CCLASS_WHITESPACE, $S0, $I1, $I0
+    $I3 = $I2 - $I1
+    $S1 = substr $S0, $I1, $I3
+  L2:
+    hash['Branch'] = $S1
+    $P0.'open'('svn status', 'pr')
+    $P1 = new 'ResizableStringArray'
+  L3:
+    $S0 = readline $P0
+    if $S0 == '' goto L4
+    $I0 = index $S0, 'M'
+    unless $I0 == 0 goto L3
+    $S0 = chomp($S0)
+    $I0 = length $S0
+    $I0 = find_not_cclass .CCLASS_WHITESPACE, $S0, 2, $I0
+    $S0 = substr $S0, $I0
+    push $P1, $S0
+    goto L3
+  L4:
+    $P0.'close'()
+    $I0 = elements $P1
+    unless $I0 != 0 goto L1
+    $S0 = hash['DEVEL']
+    $S0 .= ' '
+    $S1 = $I0
+    $S0 .= $S1
+    $S0 .= ' mods'
+    hash['DEVEL'] = $S0
+    $S0 = join ' ', $P1
+    hash['Modifications'] = $S0
+  L1:
+    .return (hash)
+.end
+
+.sub 'send_archive_to_smolder' :anon
+    .param pmc env_data
+    load_bytecode 'osutils.pbc'
+    .const string archive = 'parrot_test_run.tar.gz'
+    .const string smolder_url = 'http://smolder.plusthree.com/app/projects/process_add_report/8'
+    .const string username = 'parrot-autobot'
+    .const string password = 'squ at wk'
+    .local pmc config
+    $P0 = getinterp
+    config = $P0[.IGLOBALS_CONFIG_HASH]
+    .local string cmd
+    cmd = "curl -F architecture="
+    $S0 = config['cpuarch']
+    cmd .= $S0
+    cmd .= " -F platform="
+    $S0 = config['osname']
+    cmd .= $S0
+    cmd .= " -F revision="
+    $S0 = config['revision']
+    cmd .= $S0
+    cmd .= " -F tags=\""
+    $S0 = _get_tags(env_data)
+    cmd .= $S0
+    cmd .= "\""
+    cmd .= " -F username="
+    cmd .= username
+    cmd .= " -F password="
+    cmd .= password
+    cmd .= " -F comments=\"EXPERIMENTAL t/harness.pir\""
+    cmd .= " -F report_file=@"
+    cmd .= archive
+    cmd .= " "
+    cmd .= smolder_url
+    .tailcall system(cmd, 1 :named('verbose'))
+.end
+
+.sub '_get_tags' :anon
+    .param pmc env_data
+    $P0 = split ' ', 'Architecture Compiler Platform Version'
+    $P1 = new 'ResizableStringArray'
+  L1:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    $S1 = env_data[$S0]
+    push $P1, $S1
+    goto L1
+  L2:
+    $S0 = join ', ', $P1
+    .return ($S0)
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Added: branches/avl_string_cache/t/library/osutils.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/t/library/osutils.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,49 @@
+#!parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/library/osutils.t
+
+=head1 DESCRIPTION
+
+Test the osutils library
+
+=head1 SYNOPSIS
+
+    % prove t/library/osutils.t
+
+=cut
+
+.sub 'main' :main
+    .include 'test_more.pir'
+
+    load_bytecode 'osutils.pir'
+
+    plan(4)
+    test_basename()
+    test_dirname()
+.end
+
+.sub 'test_basename'
+    $S0 = 'foo/bar/baz.txt'
+    $S0 = basename($S0)
+    is( $S0, 'baz.txt', "basename" )
+.end
+
+.sub 'test_dirname'
+    $S0 = 'foo/bar/baz.txt'
+    $S0 = dirname($S0)
+    is( $S0, 'foo/bar', "dirname" )
+    $S0 = dirname($S0)
+    is( $S0, 'foo', "dirname" )
+    $S0 = dirname($S0)
+    is( $S0, '.', "dirname" )
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/t/library/p6object.t
==============================================================================
--- branches/avl_string_cache/t/library/p6object.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/library/p6object.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -437,7 +437,7 @@
 
 
 .namespace ['ABC']
-.sub 'foo' :method
+.sub 'foo' :method :nsentry('foo')
     .return ('ABC::foo')
 .end
 

Added: branches/avl_string_cache/t/library/tap_parser.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/t/library/tap_parser.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,674 @@
+#!parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/library/tap_parser.t
+
+=head1 DESCRIPTION
+
+Test the TAP/Parser library
+
+=head1 SYNOPSIS
+
+    % prove t/library/tap_parser.t
+
+=cut
+
+.sub 'main' :main
+    .include 'test_more.pir'
+
+    load_bytecode 'TAP/Parser.pir'
+
+    plan(203)
+    test_grammar_plan()
+    test_grammar_bailout()
+    test_grammar_comment()
+    test_grammar_tests()
+    test_grammar_version()
+    test_tap()
+    test_tap_with_blank_lines()
+    test_tap_has_problem()
+    test_tap_version_wrong_place()
+    test_tap_trailing_plan()
+    test_aggregator()
+.end
+
+.sub 'test_grammar_plan'
+    .local pmc grammar, token
+    grammar = new ['TAP';'Parser';'Grammar']
+    token = grammar.'tokenize'("1..42")
+    $P0 = get_class ['TAP';'Parser';'Result';'Plan']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "1..42")
+    $P0 = getattribute token, 'plan'
+    is($P0, "1..42")
+    $P0 = getattribute token, 'tests_planned'
+    is($P0, 42, "tests_planned")
+
+    token = grammar.'tokenize'("1..0 # SKIP why not?")
+    $P0 = get_class ['TAP';'Parser';'Result';'Plan']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "1..0 # SKIP why not?")
+    $P0 = getattribute token, 'plan'
+    is($P0, "1..0")
+    $P0 = getattribute token, 'tests_planned'
+    is($P0, 0, "tests_planned")
+    $P0 = getattribute token, 'directive'
+    is($P0, 'SKIP', "directive")
+    $P0 = getattribute token, 'explanation'
+    is($P0, 'why not?', "explanation")
+
+    token = grammar.'tokenize'("1..0")
+    $P0 = get_class ['TAP';'Parser';'Result';'Plan']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "1..0")
+    $P0 = getattribute token, 'plan'
+    is($P0, "1..0")
+    $P0 = getattribute token, 'tests_planned'
+    is($P0, 0, "tests_planned")
+    $P0 = getattribute token, 'directive'
+    is($P0, 'SKIP', "directive")
+.end
+
+.sub 'test_grammar_bailout'
+    .local pmc grammar, token
+    grammar = new ['TAP';'Parser';'Grammar']
+    token = grammar.'tokenize'("Bail out!")
+    $P0 = get_class ['TAP';'Parser';'Result';'Bailout']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "Bail out!")
+    $P0 = getattribute token, 'explanation'
+    is($P0, '', "no explanation")
+
+    token = grammar.'tokenize'("Bail out! some explanation")
+    $P0 = get_class ['TAP';'Parser';'Result';'Bailout']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "Bail out! some explanation")
+    $P0 = getattribute token, 'explanation'
+    is($P0, "some explanation", "explanation")
+.end
+
+.sub 'test_grammar_comment'
+    .local pmc grammar, token
+    grammar = new ['TAP';'Parser';'Grammar']
+    token = grammar.'tokenize'("# this is a comment")
+    $P0 = get_class ['TAP';'Parser';'Result';'Comment']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "# this is a comment")
+    $P0 = getattribute token, 'comment'
+    is($P0, 'this is a comment', "comment")
+.end
+
+.sub 'test_grammar_tests'
+    .local pmc grammar, token
+    grammar = new ['TAP';'Parser';'Grammar']
+    token = grammar.'tokenize'("ok 1 this is a test")
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "ok 1 this is a test")
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 1, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, 'this is a test', "description")
+
+    token = grammar.'tokenize'("not ok 2 this is a test # TODO whee!")
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "not ok 2 this is a test # TODO whee!")
+    $P0 = getattribute token, 'ok'
+    is($P0, 'not ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 2, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, 'this is a test', "description")
+    $P0 = getattribute token, 'directive'
+    is($P0, 'TODO', "directive")
+    $P0 = getattribute token, 'explanation'
+    is($P0, 'whee!', "explanation")
+
+    token = grammar.'tokenize'("ok 22 this is a test \\# TODO whee!")
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "ok 22 this is a test \\# TODO whee!")
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 22, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, 'this is a test \# TODO whee!', "description")
+
+    token = grammar.'tokenize'("not ok")
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "not ok")
+    $P0 = getattribute token, 'ok'
+    is($P0, 'not ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    null $P1
+    is($P0, $P1, "test_num")
+    $P0 = getattribute token, 'description'
+    null $P1
+    is($P0, $P1, "description")
+
+    token = grammar.'tokenize'("ok 42")
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "ok 42")
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 42, "test_num")
+    $P0 = getattribute token, 'description'
+    null $P1
+    is($P0, $P1, "description")
+.end
+
+.sub 'test_grammar_version'
+    .local pmc grammar, token
+    grammar = new ['TAP';'Parser';'Grammar']
+    token = grammar.'tokenize'("TAP version 12")
+    $P0 = get_class ['TAP';'Parser';'Result';'Version']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, "TAP version 12")
+    $P0 = getattribute token, 'version'
+    is($P0, 12, "version")
+.end
+
+.sub '_get_results'
+    .param pmc parser
+    .local pmc result
+    result = new 'ResizablePMCArray'
+    $P0 = get_hll_global ['TAP';'Parser'], 'next'
+    .local pmc coro
+    coro = newclosure $P0
+  L1:
+    $P0 = coro(parser)
+    if null $P0 goto L2
+    push result, $P0
+    goto L1
+  L2:
+    .return (result)
+.end
+
+.sub 'test_tap'
+    .local pmc parser, result, token
+    parser = new ['TAP';'Parser']
+    parser.'tap'(<<'END_TAP')
+TAP version 13
+1..7
+ok 1 - input file opened
+... this is junk
+not ok first line of the input valid # todo some data
+# this is a comment
+ok 3 - read the rest of the file
+not ok 4 - this is a real failure
+ok 5 # skip we have no description
+ok 6 - you shall not pass! # TODO should have failed
+not ok 7 - Gandalf wins.  Game over.  # TODO 'bout time!
+END_TAP
+    result = _get_results(parser)
+    $I0 = elements result
+    is($I0, 11, "elements")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Version']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'version'
+    is($P0, 13, "version")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Plan']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'plan'
+    is($P0, "1..7", "plan")
+    $P0 = getattribute token, 'tests_planned'
+    is($P0, 7, "tests_planned")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 1, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, '- input file opened', "description")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    ok($I0)
+    $I0 = token.'has_todo'()
+    nok($I0)
+    $I0 = token.'has_skip'()
+    nok($I0)
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Unknown']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, '... this is junk', "raw")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'not ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 2, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, 'first line of the input valid', "description")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    nok($I0)
+    $I0 = token.'has_todo'()
+    ok($I0)
+    $I0 = token.'has_skip'()
+    nok($I0)
+    $P0 = getattribute token, 'explanation'
+    is($P0, 'some data', "explanation")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Comment']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'comment'
+    is($P0, 'this is a comment', "comment")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 3, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, '- read the rest of the file', "description")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    ok($I0)
+    $I0 = token.'has_todo'()
+    nok($I0)
+    $I0 = token.'has_skip'()
+    nok($I0)
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'not ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 4, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, '- this is a real failure', "description")
+    $I0 = token.'is_ok'()
+    nok($I0)
+    $I0 = token.'is_actual_ok'()
+    nok($I0)
+    $I0 = token.'has_todo'()
+    nok($I0)
+    $I0 = token.'has_skip'()
+    nok($I0)
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 5, "test_num")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    ok($I0)
+    $I0 = token.'has_todo'()
+    nok($I0)
+    $I0 = token.'has_skip'()
+    ok($I0)
+    $P0 = getattribute token, 'explanation'
+    is($P0, 'we have no description', "explanation")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 6, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, '- you shall not pass!', "description")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    ok($I0)
+    $I0 = token.'has_todo'()
+    ok($I0)
+    $I0 = token.'has_skip'()
+    nok($I0)
+    $P0 = getattribute token, 'explanation'
+    is($P0, 'should have failed', "explanation")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'not ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 7, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, '- Gandalf wins.  Game over.', "description")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    nok($I0)
+    $I0 = token.'has_todo'()
+    ok($I0)
+    $I0 = token.'has_skip'()
+    nok($I0)
+    $P0 = getattribute token, 'explanation'
+    is($P0, "'bout time!", "explanation")
+
+    $P0 = getattribute parser, 'passed'
+    $S0 = join ', ', $P0
+    is($S0, "1, 2, 3, 5, 6, 7", "passed")
+    $P0 = getattribute parser, 'failed'
+    $S0 = join ', ', $P0
+    is($S0, "4", "failed")
+    $P0 = getattribute parser, 'actual_passed'
+    $S0 = join ', ', $P0
+    is($S0, "1, 3, 5, 6", "actual_passed")
+    $P0 = getattribute parser, 'actual_failed'
+    $S0 = join ', ', $P0
+    is($S0, "2, 4, 7", "actual_failed")
+    $P0 = getattribute parser, 'todo'
+    $S0 = join ', ', $P0
+    is($S0, "2, 6, 7", "todo")
+    $P0 = getattribute parser, 'skipped'
+    $S0 = join ', ', $P0
+    is($S0, "5", "skipped")
+    $P0 = getattribute parser, 'todo_passed'
+    $S0 = join ', ', $P0
+    is($S0, "6", "todo_passed")
+
+    $P0 = getattribute parser, 'plan'
+    is($P0, "1..7", "plan")
+    $P0 = getattribute parser, 'tests_planned'
+    is($P0, 7, "tests_planned")
+.end
+
+.sub 'test_tap_with_blank_lines'
+    .local pmc parser, result, token
+    parser = new ['TAP';'Parser']
+    parser.'tap'(<<'END_TAP')
+1..2
+ok 1 - input file opened
+
+
+ok 2 - read the rest of the file
+END_TAP
+    result = _get_results(parser)
+    $I0 = elements result
+    is($I0, 5, "elements")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Plan']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'plan'
+    is($P0, "1..2", "plan")
+    $P0 = getattribute token, 'tests_planned'
+    is($P0, 2, "tests_planned")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 1, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, '- input file opened', "description")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    ok($I0)
+    $I0 = token.'has_todo'()
+    nok($I0)
+    $I0 = token.'has_skip'()
+    nok($I0)
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Unknown']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, '', "raw")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Unknown']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'raw'
+    is($P0, '', "raw")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 2, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, '- read the rest of the file', "description")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    ok($I0)
+    $I0 = token.'has_todo'()
+    nok($I0)
+    $I0 = token.'has_skip'()
+    nok($I0)
+.end
+
+.sub 'test_tap_has_problem'
+    .local pmc parser
+    parser = new ['TAP';'Parser']
+    parser.'tap'(<<'END_TAP')
+TAP version 13
+1..2
+ok 1 - input file opened
+ok 2 - Gandalf wins.  Game over.  # TODO 'bout time!
+END_TAP
+    parser.'run'()
+    $I0 = parser.'failed'()
+    is($I0, 0, "not failed")
+    $I0 = parser.'todo_passed'()
+    is($I0, 1, "todo_passed")
+    $I0 = parser.'has_problems'()
+    nok($I0, "has not problem")
+
+    parser = new ['TAP';'Parser']
+    parser.'tap'(<<'END_TAP')
+TAP version 13
+1..2
+SMACK
+END_TAP
+    parser.'run'()
+    $I0 = parser.'failed'()
+    is($I0, 0, "not failed")
+    $I0 = parser.'todo_passed'()
+    is($I0, 0, "todo_passed")
+    $I0 = parser.'parse_errors'()
+    is($I0, 2, "parse_errors")
+    $I0 = parser.'has_problems'()
+    ok($I0, "has_problems")
+.end
+
+.sub 'test_tap_version_wrong_place'
+    .local pmc parser
+    parser = new ['TAP';'Parser']
+    parser.'tap'(<<'END_TAP')
+1..2
+ok 1 - input file opened
+TAP version 12
+ok 2 - Gandalf wins
+END_TAP
+    parser.'run'()
+    $I0 = parser.'failed'()
+    is($I0, 0, "not failed")
+    $I0 = parser.'parse_errors'()
+    is($I0, 1, "parse_errors")
+    $P0 = getattribute parser, 'parse_errors'
+    $S0 = shift $P0
+    is($S0, "If TAP version is present it must be the first line of output")
+.end
+
+.sub 'test_tap_trailing_plan'
+    .local pmc parser, result, token
+    parser = new ['TAP';'Parser']
+    parser.'tap'(<<'END_TAP')
+ok 1 - input file opened
+ok 2 - Gandalf wins
+1..2
+END_TAP
+    result = _get_results(parser)
+    $I0 = elements result
+    is($I0, 3, "elements")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 1, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, '- input file opened', "description")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    ok($I0)
+    $I0 = token.'is_unplanned'()
+    nok($I0, "unplanned")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Test']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'ok'
+    is($P0, 'ok', "ok")
+    $P0 = getattribute token, 'test_num'
+    is($P0, 2, "test_num")
+    $P0 = getattribute token, 'description'
+    is($P0, '- Gandalf wins', "description")
+    $I0 = token.'is_ok'()
+    ok($I0)
+    $I0 = token.'is_actual_ok'()
+    ok($I0)
+    $I0 = token.'is_unplanned'()
+    nok($I0, "unplanned")
+
+    token = shift result
+    $P0 = get_class ['TAP';'Parser';'Result';'Plan']
+    isa_ok(token, $P0)
+    $P0 = getattribute token, 'plan'
+    is($P0, "1..2", "plan")
+    $P0 = getattribute token, 'tests_planned'
+    is($P0, 2, "tests_planned")
+
+    $I0 = parser.'passed'()
+    is($I0, 2, "passed")
+    $I0 = parser.'failed'()
+    is($I0, 0, "failed")
+    $I0 = parser.'parse_errors'()
+    is($I0, 0, "parse_errors")
+    $I0 = parser.'has_problems'()
+    is($I0, 0, "has_problems")
+
+    $P0 = getattribute parser, 'plan'
+    is($P0, "1..2", "plan")
+    $P0 = getattribute parser, 'tests_planned'
+    is($P0, 2, "tests_planned")
+.end
+
+.sub 'test_aggregator'
+    .local pmc parser1, parser2, agg
+    parser1 = new ['TAP';'Parser']
+    parser1.'tap'(<<'END_TAP')
+1..5
+ok 1 - input file opened
+... this is junk
+not ok first line of the input valid # todo some data
+# this is a comment
+ok 3 - read the rest of the file
+not ok 4 - this is a real failure
+ok 5 # skip we have no description
+END_TAP
+    parser1.'run'()
+
+    parser2 = new ['TAP';'Parser']
+    parser2.'tap'(<<'END_TAP')
+1..7
+ok 1 - gentlemen, start your engines
+not ok first line of the input valid # todo some data
+# this is a comment
+ok 3 - read the rest of the file
+not ok 4 - this is a real failure
+ok 5
+ok 6 - you shall not pass! # TODO should have failed
+not ok 7 - Gandalf wins.  Game over.  # TODO 'bout time!
+END_TAP
+    parser2.'run'()
+
+    agg = new ['TAP';'Parser';'Aggregator']
+    agg.'add'('tap1', parser1)
+    agg.'add'('tap2', parser2)
+
+    $P0 = agg.'descriptions'()
+    $I0 = elements $P0
+    is($I0, 2, "descriptions")
+
+    $P0 = getattribute agg, 'passed'
+    is($P0, 10, "passed")
+    $P0 = getattribute agg, 'failed'
+    is($P0, 2, "failed")
+    $P0 = getattribute agg, 'todo'
+    is($P0, 4, "todo")
+    $P0 = getattribute agg, 'skipped'
+    is($P0, 1, "skipped")
+    $P0 = getattribute agg, 'parse_errors'
+    is($P0, 1, "parse_errors")
+    $P0 = getattribute agg, 'todo_passed'
+    is($P0, 1, "todo_passed")
+    $P0 = getattribute agg, 'total'
+    is($P0, 12, "total")
+    $P0 = getattribute agg, 'planned'
+    is($P0, 12, "planned")
+
+    $I0 = agg.'has_problems'()
+    ok($I0, "has_problems")
+    $I0 = agg.'has_errors'()
+    ok($I0, "has_errors")
+    $S0 = agg.'get_status'()
+    is($S0, 'FAIL', "status")
+    $I0 = agg.'all_passed'()
+    nok($I0, "all_passed")
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/t/library/test_builder_tester.t
==============================================================================
--- branches/avl_string_cache/t/library/test_builder_tester.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/library/test_builder_tester.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -59,12 +59,12 @@
    test.'skip'( 3, 'three skips' )
    test_test( 'multiple skips' )
 
-   test_out( 'not ok 9 # TODO some todo test' )
+   test_out( "not ok 9 # TODO \n\tFailed (TODO) test 'some todo test'" )
    test.'todo'( 0, 'some todo test' )
    test_test( 'failing todo test' )
 
-   test_out( 'ok 10 # TODO another todo test' )
-   test.'todo'( 1, 'another todo test' )
+   test_out( "ok 10 # TODO another todo test" )
+   test.'todo'( 1, 'reason', 'another todo test' )
    test_test( 'passing todo test' )
 
    test_pass()

Modified: branches/avl_string_cache/t/library/test_more.t
==============================================================================
--- branches/avl_string_cache/t/library/test_more.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/library/test_more.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -797,23 +797,23 @@
     .local pmc test
     test = new [ 'Test'; 'Builder' ]
 
-    test_out( 'ok 8 # TODO passing test' )
+    test_out( 'ok 8 # TODO todo reason' )
     test.'todo'( 1, 'passing test', 'todo reason' )
     test_test( 'todo test should pass, marked as TODO' )
 
-    test_out( 'not ok 9 # TODO failing test' )
+    test_out( "not ok 9 # TODO todo reason\n\tFailed (TODO) test 'failing test'" )
     test.'todo'( 0, 'failing test', 'todo reason' )
     test_test( 'todo test should fail, marked as TODO' )
 
-    test_out( 'ok 10 # TODO passing test' )
+    test_out( 'ok 10 # TODO todo reason' )
     todo( 1, 'passing test', 'todo reason' )
     test_test( 'todo test should pass, marked as TODO' )
 
-    test_out( 'not ok 11 # TODO failing test' )
+    test_out( "not ok 11 # TODO todo reason\n\tFailed (TODO) test 'failing test'" )
     todo( 0, 'failing test', 'todo reason' )
     test_test( 'todo test should fail, marked as TODO' )
 
-    test_out( 'not ok 12 # TODO' )
+    test_out( "not ok 12 # TODO \n\tFailed (TODO) test ''" )
     todo( 0 )
     test_test( 'todo test with no description or reason' )
 

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

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

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

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

Modified: branches/avl_string_cache/t/oo/composition.t
==============================================================================
--- branches/avl_string_cache/t/oo/composition.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/oo/composition.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -34,16 +34,16 @@
     multi_composition()
 .end
 
-.sub badger :method
+.sub badger :method :nsentry('badger')
     .return('Badger!')
 .end
-.sub badger2 :method
+.sub badger2 :method :nsentry('badger2')
     .return('Second Badger!')
 .end
-.sub mushroom :method
+.sub mushroom :method :nsentry('mushroom')
     .return('Mushroom!')
 .end
-.sub snake :method
+.sub snake :method :nsentry('snake')
     .return('Snake!')
 .end
 .sub fire

Modified: branches/avl_string_cache/t/oo/mro-c3.t
==============================================================================
--- branches/avl_string_cache/t/oo/mro-c3.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/oo/mro-c3.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -28,19 +28,19 @@
     merge_two_pairs()
 .end
 
-.sub method_A :method
+.sub method_A :method :nsentry('method_A')
     .return('Method from A')
 .end
 
-.sub method_B :method
+.sub method_B :method :nsentry('method_B')
     .return('Method from B')
 .end
 
-.sub method_C :method
+.sub method_C :method :nsentry('method_C')
     .return('Method from C')
 .end
 
-.sub method_D :method
+.sub method_D :method :nsentry('method_D')
     .return('Method from D')
 .end
 

Modified: branches/avl_string_cache/t/oo/proxy.t
==============================================================================
--- branches/avl_string_cache/t/oo/proxy.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/oo/proxy.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -93,7 +93,7 @@
 .end
 
 .namespace ['Complex']
-.sub 'Complex' :method
+.sub 'Complex' :method :nsentry('Complex')
     .return (self)
 .end
 

Modified: branches/avl_string_cache/t/op/calling.t
==============================================================================
--- branches/avl_string_cache/t/op/calling.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/op/calling.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -993,13 +993,13 @@
     f(o, "ok 4\n")
 .end
 .namespace ["Foo"]
-.sub bar :method
+.sub bar :method :nsentry('bar')
     .param string s
     print self
     print " "
     print s
 .end
-.sub baz :method
+.sub baz :method :nsentry('baz')
     .param string s
     print self
     print " "

Modified: branches/avl_string_cache/t/op/fetch.t
==============================================================================
--- branches/avl_string_cache/t/op/fetch.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/op/fetch.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -28,7 +28,6 @@
 .end
 
 .sub 'test_fetch_keyed_int'
-    diag( 'test_fetch_keyed_int' )
     $P0    = new [ 'Hash' ]
     $P1    = box 111
     $P0[1] = $P1
@@ -48,7 +47,6 @@
 .end
 
 .sub 'test_fetch_keyed_str'
-    diag( 'test_fetch_keyed_str' )
     $P0          = new [ 'Hash' ]
     $P1          = box 111
     $P0['one']   = $P1
@@ -68,7 +66,6 @@
 .end
 
 .sub 'test_fetch_keyed_pmc'
-    diag( 'test_fetch_keyed_pmc' )
     $P0          = new [ 'Hash' ]
     $P1          = box 111
 

Modified: branches/avl_string_cache/t/op/gc.t
==============================================================================
--- branches/avl_string_cache/t/op/gc.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/op/gc.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -508,7 +508,6 @@
 
 # coro context and invalid return continuations
 # this is a stripped down version of imcc/t/syn/pcc_16
-# s. also src/pmc/retcontinuation.pmc
 
 .sub coro_context_ret_continuation
     .const 'Sub' $P0 = "co1"

Modified: branches/avl_string_cache/t/op/string.t
==============================================================================
--- branches/avl_string_cache/t/op/string.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/op/string.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -19,7 +19,7 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(412)
+    plan(399)
 
     set_s_s_sc()
     test_clone()
@@ -27,7 +27,6 @@
     test_length_i_s()
     zero_length_substr()
     chopn_with_clone()
-    chopn_with_set()
     chopn_oob_values()
     three_argument_chopn()
     three_argument_chopn__oob_values()
@@ -40,6 +39,7 @@
     five_arg_substr_w_rep_eq_length()
     five_arg_substr_w_replacement_gt_length()
     five_arg_substr_w_replacement_lt_length()
+    five_arg_substr_vs_hash()
     five_arg_substr__offset_at_end_of_string()
     exception_five_arg_substr__offset_past_end_of_string()
     five_arg_substr_neg_offset_repl_eq_length()
@@ -122,10 +122,8 @@
     correct_precision_for_sprintf_x()
     test_exchange()
     test_find_encoding()
-    test_string_encoding()
     test_assign()
     assign_and_globber()
-    assign_and_globber_2()
     bands_null_string()
     bands_2()
     bands_3()
@@ -141,8 +139,6 @@
     bnots_null_string()
     bnots_2()
     bnots_cow()
-    transcode_to_utf8()
-    string_chartype()
     split_on_empty_string()
     split_on_non_empty_string()
     test_join()
@@ -237,20 +233,6 @@
     is( $S3, "JAPHxyzw", '' )
 .end
 
-.sub chopn_with_set
-    set $S4, "JAPHxyzw"
-    set $S5, "japhXYZW"
-    set     $S3, $S4
-    set $I1, 4
-    chopn   $S4, 3
-    chopn   $S4, 1
-    chopn   $S5, $I1
-
-    is( $S4, "JAPH", '' )
-    is( $S5, "japh", '' )
-    is( $S3, "JAPH", '' )
-.end
-
 .sub chopn_oob_values
     set $S1, "A string of length 21"
     chopn   $S1, 0
@@ -292,10 +274,6 @@
     set     $S3, $S1
     chopn   $S2, $S1, 3
     is( $S3, "Parrot", '' )
-
-    set     $S3, $S1
-    chopn   $S1, 3
-    is( $S3, "Par", '' )
 .end
 #
 .sub three_argument_chopn__oob_values
@@ -427,6 +405,18 @@
     is( $S2, "", '' )
 .end
 
+.sub five_arg_substr_vs_hash
+    # Check that string hashval properly updated.
+    .local pmc hash
+    hash = new ['Hash']
+    $S0 = "fooo"
+    hash[$S0]   = 1
+    hash["foo"] = 42
+    $S0 = replace $S0, 1, 1, ''
+    $S1 = hash[$S0]
+    is( $S1, '42', 'substr behave it self')
+.end
+
 .sub exception_five_arg_substr__offset_past_end_of_string
     set $S0, "abcdefghijk"
     set $S1, "xyz"
@@ -434,7 +424,7 @@
     substr $S2, $S0, 12, 3, $S1
     ok(0,"no exception")
 handler:
-    .exception_is( "Can only replace inside string or index after end of string" )
+    .exception_is( "Cannot take substr outside string" )
 .end
 
 .sub five_arg_substr_neg_offset_repl_eq_length
@@ -471,7 +461,7 @@
     substr $S2, $S0, -12, 4, $S1
     ok(0,"no exception")
 handler:
-    .exception_is( "Can only replace inside string or index after end of string" )
+    .exception_is( "Cannot take substr outside string" )
 .end
 
 .sub five_arg_substr_length_gt_strlen
@@ -495,9 +485,10 @@
 .sub four_arg_replacement_only_substr
     set $S0, "abcdefghijk"
     set $S1, "xyz"
-    substr $S0, 3, 3, $S1
-    is( $S0, "abcxyzghijk", '' )
+    $S2 = replace $S0, 3, 3, $S1
+    is( $S0, "abcdefghijk", '' )
     is( $S1, "xyz", '' )
+    is( $S2, "abcxyzghijk", '' )
 .end
 
 .sub three_arg_substr
@@ -1477,34 +1468,6 @@
     # is( $I0, "3", 'find_encoding' )
 .end
 
-.sub test_string_encoding
-    skip(4, "no more visible encoding" )
-    # set $I0, 0
-    # new $S0, 0, $I0
-    # string_encoding $I1, $S0
-    # eq $I0, $I1, OK1
-    # print "not "
-    # OK1:  print "ok 1\n"
-    # set $I0, 1
-    # new $S0, 0, $I0
-    # string_encoding $I1, $S0
-    # eq $I0, $I1, OK2
-    # print "not "
-    # OK2:  print "ok 2\n"
-    # set $I0, 2
-    # new $S0, 0, $I0
-    # string_encoding $I1, $S0
-    # eq $I0, $I1, OK3
-    # print "not "
-    # OK3:  print "ok 3\n"
-    # set $I0, 3
-    # new $S0, 0, $I0
-    # string_encoding $I1, $S0
-    # eq $I0, $I1, OK4
-    # print "not "
-    # OK4:  print "ok 4\n"
-.end
-
 .sub test_assign
     set $S4, "JAPH"
     assign  $S5, $S4
@@ -1520,14 +1483,6 @@
     is( $S5, "JAPH", 'assign & globber' )
 .end
 
-.sub assign_and_globber_2
-    set $S4, "JAPH"
-    set     $S5, $S4
-    assign  $S4, "Parrot"
-    is( $S4, "Parrot", 'assign & globber 2' )
-    is( $S5, "Parrot", 'assign & globber 2' )
-.end
-
 .sub bands_null_string
     null $S1
     set $S2, "abc"
@@ -1768,25 +1723,6 @@
     is( $S2, "foo", 'bnots COW' )
 .end
 
-.sub transcode_to_utf8
-    skip( 2, "no more transcode" )
-    # set $S1, "ASCII is the same as UTF8\n"
-    # find_encoding $I1, "utf8"
-    # transcode $S2, $S1, $I1
-    # is( $S1, "ASCII is the same as UTF8", 'transcode to utf8' )
-    # is( $S2, "ASCII is the same as UTF8", 'transcode to utf8' )
-.end
-
-.sub string_chartype
-    skip( 1, "no more chartype" )
-
-    # set $S0, "Test String"
-    # find_chartype $I0, "usascii"
-    # set_chartype $S0, $I0
-    # string_chartype $I1, $S0
-    # is( $I0, $I1, 'string_chartype' )
-.end
-
 .sub split_on_empty_string
     split $P1, "", ""
     set $I1, $P1
@@ -1865,19 +1801,6 @@
   OK1:
     ok($I99, 'eq_addr/ne_addr')
 
-    set $S1, "Test"
-    set $I99, 0
-    eq_addr $S1, $S0, BAD2
-      set $I99, 1
-  BAD2:
-    ok($I99, 'eq_addr/ne_addr')
-
-    set $I99, 1
-    ne_addr $S1, $S0, OK3
-      set $I99, 0
-  OK3:
-    ok($I99, 'eq_addr/ne_addr')
-
     set $S0, $S1
     set $I99, 0
     ne_addr $S1, $S0, BAD4

Modified: branches/avl_string_cache/t/op/vivify.t
==============================================================================
--- branches/avl_string_cache/t/op/vivify.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/op/vivify.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -28,7 +28,6 @@
 .end
 
 .sub 'test_vivify_keyed_int'
-    diag( 'test_vivify_keyed_int' )
     $P0    = new [ 'Hash' ]
     $P1    = box 111
     $P0[1] = $P1
@@ -56,7 +55,6 @@
 .end
 
 .sub 'test_vivify_keyed_str'
-    diag( 'test_vivify_keyed_str' )
     $P0          = new [ 'Hash' ]
     $P1          = box 111
     $P0['one']   = $P1
@@ -84,7 +82,6 @@
 .end
 
 .sub 'test_vivify_keyed_pmc'
-    diag( 'test_vivify_keyed_pmc' )
     $P0          = new [ 'Hash' ]
     $P1          = box 111
 

Modified: branches/avl_string_cache/t/pmc/class.t
==============================================================================
--- branches/avl_string_cache/t/pmc/class.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/pmc/class.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -459,7 +459,7 @@
     is(result, 42, 'new() added method returns expected value')
 .end
 
-.sub add :method
+.sub add :method :nsentry('add')
     $P0 = getattribute self, "x"
     $P1 = getattribute self, "y"
     $P2 = new ['Integer']

Modified: branches/avl_string_cache/t/pmc/context.t
==============================================================================
--- branches/avl_string_cache/t/pmc/context.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/pmc/context.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -48,7 +48,7 @@
     $P0 = newclass 'Foo'
 .end
 
-.sub 'test_inspect' :method :outer('load')
+.sub 'test_inspect' :method :nsentry('test_inspect') :outer('load')
     .include 'test_more.pir'
 
     .local pmc ctx

Modified: branches/avl_string_cache/t/pmc/fixedpmcarray.t
==============================================================================
--- branches/avl_string_cache/t/pmc/fixedpmcarray.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/pmc/fixedpmcarray.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -19,7 +19,7 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(82)
+    plan(83)
     test_setting_array_size()
     test_assign_from_another()
     test_assign_self()
@@ -678,6 +678,11 @@
 
     $I0 = $P0
     is($I0, 10, "New style init creates the correct # of elements for a key constant")
+
+    $P1 = new 'Integer'
+    $P0[9] = $P1
+    $P2 = $P0[9]
+    is($P2, $P1, 'New style init creates the array')
 .end
 
 .sub test_invalid_init_tt1509

Modified: branches/avl_string_cache/t/pmc/freeze.t
==============================================================================
--- branches/avl_string_cache/t/pmc/freeze.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/pmc/freeze.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -52,9 +52,19 @@
     print " "
     print P10
     print "\n"
+
+    null S1
+    new P1, ['String']
+    set P1, S1
+    freeze S0, P1
+    thaw P10, S0
+    set S10, P10
+    isnull I0, S10
+    say I0
     end
 CODE
 String foo
+1
 OUTPUT
 
 pasm_output_is( <<'CODE', <<'OUTPUT', "freeze/thaw a Float" );

Modified: branches/avl_string_cache/t/pmc/namespace-old.t
==============================================================================
--- branches/avl_string_cache/t/pmc/namespace-old.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/pmc/namespace-old.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -284,7 +284,7 @@
 CODE
 /^a_foo
 b_foo
-Could not find non-existent sub b_foo/
+Could not find sub b_foo/
 OUTPUT
 
 
@@ -1248,7 +1248,7 @@
 CODE
 /
 ok 1
-Could not find non-existent sub nok/
+Could not find sub nok/
 OUT
 
 

Added: branches/avl_string_cache/t/pmc/namespace-subs.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/t/pmc/namespace-subs.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,166 @@
+#! parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/pmc/namepspace-subs.t - test NameSpace PMC
+
+=head1 SYNOPSIS
+
+    % prove t/pmc/namespace-subs.t
+
+=head1 DESCRIPTION
+
+Tests subroutines stored in the NameSpace PMC, specifically focusing on the
+specified behavior for :method, :vtable, :nsentry, and :anon.
+
+=cut
+
+.namespace []
+
+.sub 'main' :main
+    .include 'test_more.pir'
+    plan(17)
+    anon_sub_and_method()
+    anon_vtable()
+    store_method()
+    store_nsentry()
+    store_multisub()
+.end
+
+
+# Subs marked with :anon should not be stored in the namespace. Methods marked
+# with :anon should not be stored in the class.
+
+.sub 'anon_sub_and_method'
+    $P2 = get_hll_global ['AnonTest'], 'anonsub'
+    is_null($P2, "Anon sub not stored in namespace")
+
+    $P0 = newclass 'AnonTest'
+    $P1 = new 'AnonTest'
+
+    push_eh method_not_in_namespace
+    $I1 = $P1.'anonmethod'()
+    ok(0, "Anon method not stored in class")
+    pop_eh
+    goto failed
+  method_not_in_namespace:
+    ok(1, "Anon method not stored in class")
+  failed:
+
+    $P2 = get_hll_global ['AnonTest'], 'anonmethod'
+    is_null($P2, "Anon method not stored in namespace")
+
+.end
+
+# Vtable overrides marked with :anon should be stored in the class anyway. See
+# RT #44471
+.sub 'anon_vtable'
+    $P1 = new 'AnonTest'
+
+    $I0 = $P1
+    is($I0, 414, "Anon vtable override stored in class")
+.end
+
+
+# Methods should not be stored in the namespace. See TT #389.
+.sub 'store_method'
+    $P0 = newclass 'MethodTest'
+    $P1 = new 'MethodTest'
+
+    $I1 = $P1.'methodtest'()
+    is($I1, 75, "Invoked stored method")
+
+    $P2 = get_hll_global ['MethodTest'], 'methodtest'
+    is_null($P2, "Method not stored in namespace")
+.end
+
+.sub 'store_nsentry'
+    $P0 = newclass 'NsentryTest'
+    $P1 = new 'NsentryTest'
+
+    $I1 = $P1.'nsentrymethodtest'()
+    is($I1, 63, "Invoked nsentry method")
+
+    $P2 = get_hll_global ['NsentryTest'], 'renamedmethod'
+    isa_ok($P2, "Sub", "Nsentry method stored in namespace")
+
+    $I2 = $P1.$P2()
+    is($I2, 63, "Invoked nsentry method from namespace")
+
+    $P3 = get_hll_global ['NsentryTest'], 'renamedsub'
+    isa_ok($P3, "Sub", "Nsentry sub stored in namespace")
+
+    $I3 = $P3()
+    is($I3, 36, "Invoked nsentry sub from namespace")
+
+    $P4 = get_hll_global ['NsentryTest'], 'renamedvtable'
+    isa_ok($P4, "Sub", "Nsentry vtable stored in namespace")
+
+    $I4 = $P4()
+    is($I4, 363, "Invoked nsentry vtable from namespace")
+.end
+
+.sub 'store_multisub'
+    $P1 = get_hll_global ['MultiSubTest'], 'multisubtest'
+    isa_ok($P1, "MultiSub", "Multi sub stored in namespace")
+
+    $S1 = $P1(7)
+    is($S1, "called int variant", "Multi sub int stored in namespace")
+
+    $S2 = $P1('foo')
+    is($S2, "called string variant", "Multi sub string stored in namespace")
+
+    $S3 = $P1(5.5)
+    is($S3, "called num variant", "Anon multi sub num stored in namespace")
+
+.end
+
+.namespace ['AnonTest']
+.sub 'anonsub' :anon
+    .return(14)
+.end
+
+.sub 'anonmethod' :anon :method
+    .return(41)
+.end
+
+.sub 'get_integer' :anon :vtable
+    .return(414)
+.end
+
+
+.namespace ['MethodTest']
+.sub 'methodtest' :method
+    .return(75)
+.end
+
+.namespace ['NsentryTest']
+.sub 'nsentrymethodtest' :method :nsentry('renamedmethod')
+    .return(63)
+.end
+.sub 'nsentrysubtest' :nsentry('renamedsub')
+    .return(36)
+.end
+.sub 'nsentryvtabletest' :nsentry('renamedvtable')
+    .return(363)
+.end
+
+.namespace ['MultiSubTest']
+.sub 'multisubtest' :multi(int)
+   .return("called int variant")
+.end
+.sub 'multisubtest' :multi(string)
+   .return("called string variant")
+.end
+.sub 'multisubtest' :anon :multi(num)
+   .return("called num variant")
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/t/pmc/pmcproxy.t
==============================================================================
--- branches/avl_string_cache/t/pmc/pmcproxy.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/pmc/pmcproxy.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -190,7 +190,7 @@
     is($P3, 42, "the magic overriding sub was called")
     ok(1, 'Called non-overridden method, which called overridden vtable')
 .end
-.sub always42 :method
+.sub always42 :method :nsentry('always42')
     .param string what
     $P0 = new ['Integer']
     $P0 = 42

Deleted: branches/avl_string_cache/t/pmc/retcontinuation.t
==============================================================================
--- branches/avl_string_cache/t/pmc/retcontinuation.t	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,32 +0,0 @@
-#! parrot
-# Copyright (C) 2006-2008, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/pmc/retcontinuation.t - test the RetContinuation PMC
-
-=head1 SYNOPSIS
-
-    % prove t/pmc/retcontinuation.t
-
-=head1 DESCRIPTION
-
-Tests the RetContinuation PMC.
-
-=cut
-
-.sub main :main
-    .include 'test_more.pir'
-
-    plan(1)
-
-    new $P0, ['RetContinuation']
-    ok(1, 'Instantiated a RetContinuation PMC')
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/avl_string_cache/t/pmc/ro.t
==============================================================================
--- branches/avl_string_cache/t/pmc/ro.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/pmc/ro.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -39,7 +39,7 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(12)
+    plan(13)
 
     integer_set_read_only_is_not_writable() # 1 test
     integer_set_read_only_can_be_read()     # 6 tests
@@ -48,7 +48,7 @@
     complex_i_add()                         # 1 test
     resizablepmcarray_non_recursive_part()  # 1 test
     objects()                               # 1 test
-#    resizablepmcarray_recursive()           #
+    resizablepmcarray_recursive()           # 1 test
 .end
 
 .sub integer_set_read_only_is_not_writable
@@ -66,13 +66,14 @@
     foo = 43
     pop_eh
     ok( 0, "integer_set_read_only_is_not_writable" )
-    end
+    goto end
 
-eh_label:
+  eh_label:
     .local string message
     .get_results($P0)
     message = $P0['message']
     is( message, "set_integer_native() in read-only instance of 'Integer'", "integer_set_read_only_is_not_writable" )
+  end:
 .end
 
 .sub integer_set_read_only_can_be_read
@@ -127,12 +128,14 @@
     pop_eh
 
     ok(0, 'integer_add')
+    goto end
 
-eh_label:
+  eh_label:
     .local string message
     .get_results($P0)
     message = $P0['message']
     is( message, "i_add_int() in read-only instance of 'Integer'", 'integer_add' )
+  end:
 .end
 
 .sub complex_i_add
@@ -151,13 +154,14 @@
     add foo, 4
     pop_eh
     ok( 0, 'complex_i_add')
+    goto end
 
-eh_label:
+  eh_label:
     .local string message
     .get_results($P0)
     message = $P0['message']
     is( message, "i_add_int() in read-only instance of 'Complex'", 'complex_i_add' )
-
+  end:
 .end
 
 .sub resizablepmcarray_non_recursive_part
@@ -184,12 +188,14 @@
     pop_eh
 
     ok(0, 'resizablepmcarray_non_recursive_part')
+    goto end
 
-eh_label:
+  eh_label:
     .local string message
     .get_results($P0)
     message = $P0['message']
     is( message, "set_pmc_keyed_int() in read-only instance of 'ResizablePMCArray'", 'resizablepmcarray_non_recursive_part' )
+  end:
 .end
 
 .sub objects
@@ -202,7 +208,6 @@
     eh.'handle_types'(.EXCEPTION_WRITE_TO_CONSTCLASS)
     set_addr eh, eh_label
 
-
     fooclass = newclass 'Foo'
     addattribute fooclass, 'bar'
     foo = new ['Foo']
@@ -215,22 +220,20 @@
     pop_eh
 
     ok( 0, 'objects')
+    goto end
 
-eh_label:
+  eh_label:
     .local string message
     .get_results($P0)
     message = $P0['message']
     is( message, "set_attr_str() in read-only instance of 'Foo'", 'objects' )
+  end:
 .end
 
-=pod
-
-TT #1036: should this work?
-
 .sub resizablepmcarray_recursive
     .local pmc foo
     .local pmc three
-    .local pmc tmp
+    .local pmc four
 
     foo = new ['ResizablePMCArray']
     three = new ['Integer']
@@ -239,19 +242,14 @@
     foo = 1
     foo[0] = three
 
-    print "before make_readonly\n"
     make_readonly(foo)
-    print "after\n"
 
-    # three = 4 # should fail -- is that what we want
-    tmp = foo[0]
-    tmp = 4
-    print "NOT OKAY\n"
-    tmp = foo[0]
-    print tmp
+    four = foo[0]
+    four = 4
+    four = foo[0]
+    is(four, 4, 'TT #1036 - readonly should be shallow')
 .end
 
-=cut
 
 
 # Local Variables:

Modified: branches/avl_string_cache/t/pmc/string.t
==============================================================================
--- branches/avl_string_cache/t/pmc/string.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/pmc/string.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -27,7 +27,6 @@
     setting_numbers()
     ensure_that_concat_ppp_copies_strings()
     ensure_that_concat_pps_copies_strings()
-    setting_string_references()
     assigning_string_copies()
     test_repeat()
     test_repeat_without_creating_dest_pmc()
@@ -102,6 +101,12 @@
         set $P0, "0xFFFFFF"
         set $S0, $P0
         is( $S0, "0xFFFFFF", 'String obj set with literal hex string' )
+
+        null $S0
+        set $P0, $S0
+        set $S1, $P0
+        isnull $I0, $S1
+        ok( $I0, 'String obj is null-in null-out' )
 .end
 
 .sub setting_integers
@@ -197,16 +202,6 @@
     is( $P0, 'fnarghGrunties', 'concat success' )
 .end
 
-.sub setting_string_references
-    new $P0, ['String']
-    set $S0, "C2H5OH + 10H20"
-    set $P0, $S0
-    chopn $S0, 8
-
-    is( $S0, 'C2H5OH', 'removed last 8 from string' )
-    is( $P0, 'C2H5OH', '...and the PMC still reference $S0' )
-.end
-
 .sub assigning_string_copies
     new $P0, ['String']
     set $S0, "C2H5OH + 10H20"
@@ -1036,6 +1031,7 @@
 
     # Set
     s = new ['String']
+    s = ''
 
     $S0 = 'f'
     s[0] = $S0
@@ -1049,6 +1045,16 @@
     $P0 = 'o'
     s[2] = $P0
     is(s, 'foo', 'Set PMC keyed')
+
+    push_eh null_replace
+    s = new ['String']
+    s[0] = 'f'
+    nok('Replace on null string throws')
+    goto done_null_replace
+
+  null_replace:
+    ok(1, 'Replace on null string throws')
+  done_null_replace:
 .end
 
 # Local Variables:

Modified: branches/avl_string_cache/t/src/basic.t
==============================================================================
--- branches/avl_string_cache/t/src/basic.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/src/basic.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -27,7 +27,7 @@
     #include <stdlib.h>
 
     int
-    main(int argc, char* argv[])
+    main(int argc, const char* argv[])
     {
         printf("Hello, World!\n");
         exit(0);
@@ -41,7 +41,7 @@
     #include <parrot/exceptions.h>
 
     int
-    main(int argc, char* argv[])
+    main(int argc, const char* argv[])
     {
          exit_fatal(0, "Blow'd Up(tm)"); /* ' */
     }
@@ -59,7 +59,7 @@
 static opcode_t *the_test(Parrot_Interp, opcode_t *, opcode_t *);
 
 int
-main(int argc, char* argv[])
+main(int argc, const char* argv[])
 {
     Interp *interp;
 

Modified: branches/avl_string_cache/t/src/embed.t
==============================================================================
--- branches/avl_string_cache/t/src/embed.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/src/embed.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -39,7 +39,7 @@
     exit(EXIT_FAILURE);
 }
 
-int main(int argc, char **argv)
+int main(int argc, const char **argv)
 {
     Parrot_Interp interp;
     interp = Parrot_new(NULL);
@@ -308,20 +308,20 @@
 #include "parrot/embed.h"
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, cosnt char *argv[])
 {
     const char *c_src = ".sub main :main\n" "    print \"ok\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
     PMC *prog, *entry;
     opcode_t *dest;
-    STRING *error;
+    Parrot_String *error;
 
     /* get PIR compiler  - TODO API */
     PMC   *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir    = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir    = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp   = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -357,7 +357,7 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;
@@ -388,12 +388,12 @@
 #include "parrot/embed.h"
 
 static void
-compile_run(PARROT_INTERP, const char *src, STRING *type, int argc,
-            char *argv[])
+compile_run(PARROT_INTERP, const char *src, Parrot_String *type, int argc,
+            const char *argv[])
 {
-    STRING   *smain;
+    Parrot_String   *smain;
     PMC      *entry;
-    STRING   *error;
+    Parrot_String   *error;
     opcode_t *dest;
     PMC      *prog = Parrot_compile_string(interp, type, src, &error);
 
@@ -421,20 +421,20 @@
 }
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, const char *argv[])
 {
     const char *c_src  = ".sub main :main\n" "    print \"ok\\n\"\n" ".end\n";
 
     const char *c2_src =
         ".sub main :main\n" "    print \"hola\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
 
     /* get PIR compiler  - TODO API */
     PMC    *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir     = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir     = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp    = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -447,7 +447,7 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;
@@ -479,12 +479,12 @@
 #include "parrot/embed.h"
 
 static void
-compile_run(PARROT_INTERP, const char *src, STRING *type, int argc,
-            char *argv[])
+compile_run(PARROT_INTERP, const char *src, Parrot_String *type, int argc,
+            const char *argv[])
 {
-    STRING   *smain;
+    Parrot_String   *smain;
     PMC      *entry;
-    STRING   *error;
+    Parrot_String   *error;
     opcode_t *dest;
     PMC      *prog = Parrot_compile_string(interp, type, src, &error);
 
@@ -512,20 +512,20 @@
 }
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, const char *argv[])
 {
     const char *c_src  = ".sub main :main\n" "    print ok\\n\"\n" ".end\n";
 
     const char *c2_src =
         ".sub main :main\n" "    print \"hola\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
 
     /* get PIR compiler  - TODO API */
     PMC    *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir     = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir     = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp    = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -538,12 +538,12 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;
     int argc = 1;
-    char *argv[] = { "test", NULL };
+    const char *argv[] = { "test", NULL };
 
     PackFile_Segment *seg;
 
@@ -570,12 +570,12 @@
 #include "parrot/embed.h"
 
 static void
-compile_run(PARROT_INTERP, const char *src, STRING *type, int argc,
-            char *argv[])
+compile_run(PARROT_INTERP, const char *src, Parrot_String *type, int argc,
+            const char *argv[])
 {
-    STRING   *smain;
+    Parrot_String   *smain;
     PMC      *entry;
-    STRING   *error;
+    Parrot_String   *error;
     opcode_t *dest;
     PMC      *prog = Parrot_compile_string(interp, type, src, &error);
 
@@ -603,19 +603,19 @@
 }
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, const char *argv[])
 {
     const char *c_src  = ".sub main :main\n" "    print ok\\n\"\n" ".end\n";
 
     const char *c2_src =
         ".sub main :main\n" "    print \"hola\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
     /* get PIR compiler  - TODO API */
     PMC    *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir     = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir     = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp    = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -628,7 +628,7 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;
@@ -660,12 +660,12 @@
 #include "parrot/embed.h"
 
 static void
-compile_run(PARROT_INTERP, const char *src, STRING *type, int argc,
-            char *argv[])
+compile_run(PARROT_INTERP, const char *src, Parrot_String *type, int argc,
+            const char *argv[])
 {
-    STRING   *smain;
+    Parrot_String   *smain;
     PMC      *entry;
-    STRING   *error;
+    Parrot_String   *error;
     opcode_t *dest;
     PMC      *prog = Parrot_compile_string(interp, type, src, &error);
 
@@ -693,18 +693,18 @@
 }
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, const char *argv[])
 {
     const char *c_src  = ".sub main :main\n" "    print ok\\n\"\n" ".end\n";
 
     const char *c2_src = ".sub main :main\n" "    print hola\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
     /* get PIR compiler  - TODO API */
     PMC    *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir     = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir     = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp    = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -717,7 +717,7 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;

Modified: branches/avl_string_cache/t/src/extend.t
==============================================================================
--- branches/avl_string_cache/t/src/extend.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/src/extend.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 #!perl
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -35,7 +35,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp  = Parrot_new(NULL);
     Parrot_Int    parrot_reg = 0;
     Parrot_Int    value      = 42;
@@ -65,7 +66,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp     = Parrot_new(NULL);
     Parrot_Int    parrot_reg = 1;
     Parrot_Float  value       = 2.5;
@@ -95,7 +97,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp = Parrot_new(NULL);
     Parrot_String output;
 
@@ -121,7 +124,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp     = Parrot_new(NULL);
     Parrot_Int    parrot_reg = 2;
     Parrot_String value, new_value;
@@ -151,7 +155,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp = Parrot_new(NULL);
     Parrot_Int    value  = 101010;
     Parrot_PMC    testpmc;
@@ -201,7 +206,8 @@
 }
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp = Parrot_new(NULL);
 
     /* Interpreter set-up */
@@ -223,7 +229,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp     = Parrot_new(NULL);
     Parrot_Int    value      = -123;
     Parrot_Int    parrot_reg =  31;
@@ -261,7 +268,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp = Parrot_new(NULL);
     Parrot_Float  value  = 3.1415927;
     Parrot_Int    type;
@@ -294,7 +302,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp = Parrot_new(NULL);
     Parrot_Int    type;
     Parrot_String value, new_value;
@@ -327,7 +336,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp = Parrot_new(NULL);
     Parrot_Int    type;
     Parrot_PMC    testpmc;
@@ -361,7 +371,8 @@
 #include "parrot/extend.h"
 
 int
-main(int argc, char* argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp = Parrot_new(NULL);
     Parrot_Int    length = 6;
     Parrot_Int    type;
@@ -422,7 +433,7 @@
 static opcode_t *the_test(Parrot_Interp, opcode_t *, opcode_t *);
 
 int
-main(int argc, char *argv[])
+main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
     if (!interp)
@@ -440,9 +451,9 @@
 static opcode_t*
 the_test(PARROT_INTERP, opcode_t *cur_op, opcode_t *start)
 {
-    PackFile *pf = Parrot_pbc_read(interp, "$temp_pbc", 0);
-    STRING   *name = Parrot_str_new_constant(interp, "_sub1");
-    PMC      *sub, *arg;
+    PackFile      *pf   = Parrot_pbc_read(interp, "$temp_pbc", 0);
+    Parrot_String  name = Parrot_str_new_constant(interp, "_sub1");
+    PMC           *sub, *arg;
 
     Parrot_pbc_load(interp, pf);
     sub = Parrot_find_global_cur(interp, name);
@@ -480,7 +491,7 @@
 static opcode_t *the_test(Parrot_Interp, opcode_t *, opcode_t *);
 
 int
-main(int argc, char *argv[])
+main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
     if (!interp)
@@ -498,9 +509,9 @@
 static opcode_t*
 the_test(PARROT_INTERP, opcode_t *cur_op, opcode_t *start)
 {
-    PackFile *pf = Parrot_pbc_read(interp, "$temp_pbc", 0);
-    STRING   *name = Parrot_str_new_constant(interp, "_sub1");
-    PMC      *sub, *arg;
+    PackFile      *pf   = Parrot_pbc_read(interp, "$temp_pbc", 0);
+    Parrot_String  name = Parrot_str_new_constant(interp, "_sub1");
+    PMC           *sub, *arg;
 
     Parrot_pbc_load(interp, pf);
     sub = Parrot_find_global_cur(interp, name);
@@ -556,7 +567,7 @@
 static opcode_t *the_test(Parrot_Interp, opcode_t *, opcode_t *);
 
 int
-main(int argc, char *argv[])
+main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
     if (!interp)
@@ -574,10 +585,10 @@
 static opcode_t*
 the_test(PARROT_INTERP, opcode_t *cur_op, opcode_t *start)
 {
-    PackFile *pf = Parrot_pbc_read(interp, "$temp_pbc", 0);
-    STRING   *name = Parrot_str_new_constant(interp, "foo");
-    PMC      *sub, *arg;
-    Parrot_Int result;
+    PackFile      *pf   = Parrot_pbc_read(interp, "$temp_pbc", 0);
+    Parrot_String  name = Parrot_str_new_constant(interp, "foo");
+    PMC           *sub, *arg;
+    Parrot_Int     result;
 
     Parrot_pbc_load(interp, pf);
     sub  = Parrot_find_global_cur(interp, name);
@@ -623,7 +634,7 @@
 the_test(Parrot_Interp, opcode_t *, opcode_t *);
 
 int
-main(int argc, char *argv[])
+main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
     if (!interp)
@@ -641,9 +652,9 @@
 static opcode_t*
 the_test(PARROT_INTERP, opcode_t *cur_op, opcode_t *start)
 {
-    PackFile         *pf   = Parrot_pbc_read(interp, "$temp_pbc", 0);
-    STRING           *name = Parrot_str_new_constant(interp, "_sub1");
-    PMC              *sub;
+    PackFile      *pf   = Parrot_pbc_read(interp, "$temp_pbc", 0);
+    Parrot_String  name = Parrot_str_new_constant(interp, "_sub1");
+    PMC           *sub;
     Parrot_runloop jump_point;
 
     Parrot_pbc_load(interp, pf);
@@ -718,10 +729,10 @@
 #include <parrot/embed.h>
 
 int
-main(int argc, char* argv[])
+main(int argc, const char *argv[])
 {
     Parrot_PackFile packfile;
-    char * code[] = { ".sub foo\\nsay \\"Hello from foo!\\"\\n.end\\n" };
+    const char * code[] = { ".sub foo\\nsay \\"Hello from foo!\\"\\n.end\\n" };
 
     Parrot_Interp interp = Parrot_new(NULL);
     if (!interp) {
@@ -755,15 +766,13 @@
 #include <parrot/extend.h>
 
 int
-main(int argc, char* argv[])
+main(int argc, const char *argv[])
 {
     Parrot_Interp   interp    = Parrot_new(NULL);
     const char      *code      = ".sub foo\nprint\"Hello from foo!\\n\"\n.end\n";
     Parrot_PMC      retval;
     Parrot_PMC      sub;
-    STRING         *code_type;
-    STRING         *error;
-    STRING         *foo_name;
+    Parrot_String   code_type, error, foo_name;
 
     if (!interp) {
         printf( "Hiss\n" );
@@ -796,7 +805,7 @@
 #include <parrot/extend.h>
 
 int
-main(int argc, char* argv[])
+main(int argc, const char *argv[])
 {
     Parrot_Int      result;
     Parrot_PMC      sub;
@@ -828,7 +837,7 @@
 #include <parrot/extend.h>
 
 int
-main(int argc, char* argv[])
+main(int argc, const char *argv[])
 {
     Parrot_Int      result;
     Parrot_PMC      sub;
@@ -881,7 +890,8 @@
 }
 
 int
-main(int argc, char *argv[]) {
+main(int argc, const char *argv[])
+{
     Parrot_Interp interp;
     int i, niter = 2;
 

Modified: branches/avl_string_cache/t/src/warnings.t
==============================================================================
--- branches/avl_string_cache/t/src/warnings.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/src/warnings.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,5 +1,5 @@
 #! perl
-# Copyright (C) 2001-2006, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -34,7 +34,7 @@
 #include <parrot/embed.h>
 
 int
-main(int argc, char* argv[])
+main(int argc, const char* argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
     int error_val;
@@ -57,7 +57,7 @@
 #include <parrot/embed.h>
 
 int
-main(int argc, char* argv[])
+main(int argc, const char* argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
     int error_val;

Modified: branches/avl_string_cache/t/steps/auto/arch-01.t
==============================================================================
--- branches/avl_string_cache/t/steps/auto/arch-01.t	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/t/steps/auto/arch-01.t	Thu Apr 22 09:55:26 2010	(r45889)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests =>  81;
+use Test::More tests =>  83;
 use Carp;
 use lib qw( lib t/configure/testlib );
 use_ok('config::auto::arch');
@@ -16,8 +16,6 @@
 );
 use IO::CaptureOutput qw| capture |;
 
-########## Darwin special case ##########
-
 my ($args, $step_list_ref) = process_options( {
     argv => [ ],
     mode => q{configure},
@@ -33,6 +31,9 @@
 $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" );
+is($step->result(), q{}, "Result was empty string as expected");
 
 $conf->replenish($serialized);
 
@@ -74,7 +75,7 @@
 $step = test_step_constructor_and_description($conf);
 my $pseudoarch = q{foobar};
 $conf->data->set('archname' => $pseudoarch);
-my $ret = $step->runstep($conf);
+$ret = $step->runstep($conf);
 ok( $ret, "runstep() returned true value: $pseudoarch" );
 is($step->result(), q{}, "Result was empty string as expected");
 is($conf->data->get('cpuarch'), q{},
@@ -94,21 +95,20 @@
 $conf->add_steps($pkg);
 $conf->options->set( %{$args} );
 $step = test_step_constructor_and_description($conf);
+$step->{unamep} = 'powerpc';
 $pseudoarch = q{darwin-thread-multi-2level};
 $conf->data->set('archname' => $pseudoarch);
-my $pseudobyteorder = 1234;
-$conf->data->set('byteorder' => $pseudobyteorder);
 $ret = $step->runstep($conf);
 ok( $ret, "runstep() returned true value: $pseudoarch" );
 is($step->result(), q{}, "Result was empty string as expected");
-is($conf->data->get('cpuarch'), q{i386},
+is($conf->data->get('cpuarch'), q{ppc},
     "'cpuarch' was set as expected");
 is($conf->data->get('osname'), q{darwin},
     "'osname' was set as expected");
 
 $conf->replenish($serialized);
 
-########## mock darwin ##########
+######### mock darwin ##########
 
 ($args, $step_list_ref) = process_options( {
     argv => [ ],
@@ -118,14 +118,13 @@
 $conf->add_steps($pkg);
 $conf->options->set( %{$args} );
 $step = test_step_constructor_and_description($conf);
+$step->{unamep} = 'i386';
 $pseudoarch = q{darwin-thread-multi-2level};
 $conf->data->set('archname' => $pseudoarch);
-$pseudobyteorder = 4321;
-$conf->data->set('byteorder' => $pseudobyteorder);
 $ret = $step->runstep($conf);
 ok( $ret, "runstep() returned true value: $pseudoarch" );
 is($step->result(), q{}, "Result was empty string as expected");
-is($conf->data->get('cpuarch'), q{ppc},
+is($conf->data->get('cpuarch'), q{i386},
     "'cpuarch' was set as expected");
 is($conf->data->get('osname'), q{darwin},
     "'osname' was set as expected");

Deleted: branches/avl_string_cache/t/steps/auto/crypto-01.t
==============================================================================
--- branches/avl_string_cache/t/steps/auto/crypto-01.t	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,176 +0,0 @@
-#! perl
-# Copyright (C) 2008, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use Test::More tests =>  24;
-use Carp;
-use lib qw( lib t/configure/testlib );
-use_ok('config::auto::crypto');
-use Parrot::Configure::Options qw( process_options );
-use Parrot::Configure::Step::Test;
-use Parrot::Configure::Test qw(
-    test_step_constructor_and_description
-);
-use IO::CaptureOutput qw( capture );
-
-########## --without-crypto ##########
-
-my ($args, $step_list_ref) = process_options(
-    {
-        argv => [ q{--without-crypto} ],
-        mode => q{configure},
-    }
-);
-
-my $conf = Parrot::Configure::Step::Test->new;
-$conf->include_config_results( $args );
-
-my $pkg = q{auto::crypto};
-
-$conf->add_steps($pkg);
-
-my $serialized = $conf->pcfreeze();
-
-$conf->options->set( %{$args} );
-my $step = test_step_constructor_and_description($conf);
-my $ret = $step->runstep($conf);
-ok( $ret, "runstep() returned true value" );
-is($conf->data->get('has_crypto'), 0,
-    "Got expected value for 'has_crypto'");
-is($step->result(), q{no}, "Expected result was set");
-
-$conf->replenish($serialized);
-
-########## _select_lib() ##########
-
-($args, $step_list_ref) = process_options( {
-    argv => [ ],
-    mode => q{configure},
-} );
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-# Mock different OS/compiler combinations.
-my ($osname, $cc, $initial_libs);
-$initial_libs = $conf->data->get('libs');
-$osname = 'mswin32';
-$cc = 'gcc';
-is($step->_select_lib( {
-    conf            => $conf,
-    osname          => $osname,
-    cc              => $cc,
-    win32_nongcc    => 'libcrypto.lib',
-    default         => '-lcrypto',
-} ),
-   '-lcrypto',
-   "_select_lib() returned expected value");
-
-$osname = 'mswin32';
-$cc = 'cc';
-is($step->_select_lib( {
-    conf            => $conf,
-    osname          => $osname,
-    cc              => $cc,
-    win32_nongcc    => 'libcrypto.lib',
-    default         => '-lcrypto',
-} ),
-   'libcrypto.lib',
-   "_select_lib() returned expected value");
-
-$osname = 'foobar';
-$cc = 'cc';
-is($step->_select_lib( {
-    conf            => $conf,
-    osname          => $osname,
-    cc              => $cc,
-    win32_nongcc    => 'libcrypto.lib',
-    default         => '-lcrypto',
-} ),
-   '-lcrypto',
-   "_select_lib() returned expected value");
-
-my $verbose = undef;
-
-$conf->replenish($serialized);
-
-########## --without-crypto; _evaluate_cc_run() ##########
-
-($args, $step_list_ref) = process_options( {
-    argv => [ q{--without-crypto} ],
-    mode => q{configure},
-} );
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my ($test, $has_crypto);
-$test = qq{OpenSSL 0.9.9z\n};
-$has_crypto = 0;
-$verbose = undef;
-$has_crypto = $step->_evaluate_cc_run($conf, $test, $has_crypto, $verbose);
-is($has_crypto, 1, "'has_crypto' set as expected");
-is($step->result(), 'yes, 0.9.9z', "Expected result was set");
-# Prepare for next test
-$step->set_result(undef);
-
-$test = qq{foobar};
-$has_crypto = 0;
-$verbose = undef;
-$has_crypto = $step->_evaluate_cc_run($conf, $test, $has_crypto, $verbose);
-is($has_crypto, 0, "'has_crypto' set as expected");
-ok(! defined $step->result(), "Result is undefined, as expected");
-
-{
-    my $stdout;
-    $test = qq{OpenSSL 0.9.9z\n};
-    $has_crypto = 0;
-    $verbose = 1;
-    capture(
-        sub { $has_crypto =
-            $step->_evaluate_cc_run($conf, $test, $has_crypto, $verbose); },
-        \$stdout,
-    );
-    is($has_crypto, 1, "'has_crypto' set as expected");
-    is($step->result(), 'yes, 0.9.9z', "Expected result was set");
-    like($stdout, qr/\(yes\)/, "Got expected verbose output");
-    # Prepare for next test
-    $step->set_result(undef);
-}
-
-pass("Completed all tests in $0");
-
-################### DOCUMENTATION ###################
-
-=head1 NAME
-
-auto/crypto-01.t - test auto::crypto
-
-=head1 SYNOPSIS
-
-    % prove t/steps/auto/crypto-01.t
-
-=head1 DESCRIPTION
-
-The files in this directory test functionality used by F<Configure.pl>.
-
-The tests in this file test auto::crypto.
-
-=head1 HISTORY
-
-Mostly taken from F<t/steps/auto/gdbm-01.t>.
-
-=head1 AUTHOR
-
-Francois Perrad
-
-=head1 SEE ALSO
-
-config::auto::crypto, F<Configure.pl>.
-
-=cut
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/avl_string_cache/t/steps/auto/gdbm-01.t
==============================================================================
--- branches/avl_string_cache/t/steps/auto/gdbm-01.t	Thu Apr 22 09:55:26 2010	(r45888)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,175 +0,0 @@
-#! perl
-# Copyright (C) 2007, Parrot Foundation.
-# $Id$
-# auto/gdbm-01.t
-
-use strict;
-use warnings;
-use Test::More tests =>  29;
-use Carp;
-use Cwd;
-use File::Spec;
-use File::Temp qw( tempdir );
-use lib qw( lib t/configure/testlib );
-use_ok('config::auto::gdbm');
-use Parrot::Configure::Options qw( process_options );
-use Parrot::Configure::Step::Test;
-use Parrot::Configure::Test qw(
-    test_step_constructor_and_description
-);
-use IO::CaptureOutput qw| capture |;
-
-=for hints_for_testing The documentation for this package is skimpy;
-please try to improve it, e.g., by providing a short description of what
-the 'gdbm' is.  Some branches are compiler- or OS-specific.  As noted in
-a comment in the module, please consider the issues raised in
-http://rt.perl.org/rt3/Ticket/Display.html?id=43134.
-
-=cut
-
-########## --without-gdbm  ##########
-
-my ($args, $step_list_ref) = process_options( {
-    argv => [ q{--without-gdbm} ],
-    mode => q{configure},
-} );
-
-my $conf = Parrot::Configure::Step::Test->new;
-$conf->include_config_results( $args );
-
-my $serialized = $conf->pcfreeze();
-
-my $pkg = q{auto::gdbm};
-
-$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" );
-is($conf->data->get('has_gdbm'), 0,
-    "Got expected value for 'has_gdbm'");
-is($step->result(), q{no}, "Expected result was set");
-
-$conf->replenish($serialized);
-
-########## --without-gdbm ##########
-
-($args, $step_list_ref) = process_options( {
-    argv => [ q{--without-gdbm} ],
-    mode => q{configure},
-} );
-$conf->add_steps($pkg);
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my $osname;
-my ($flagsbefore, $flagsafter);
-$osname = 'foobar';
-my $cwd = cwd();
-{
-    my $tdir = tempdir( CLEANUP => 1 );
-    ok(chdir $tdir, "Able to change to temporary directory");
-    ok( (mkdir 'lib'), "Able to make lib directory");
-    ok( (mkdir 'include'), "Able to make include directory");
-    my $libdir = File::Spec->catdir( $tdir, 'lib' );
-    my $includedir = File::Spec->catdir( $tdir, 'include' );
-    $conf->data->set('fink_lib_dir' => $libdir);
-    $conf->data->set('fink_include_dir' => $includedir);
-
-    ok(chdir $cwd, "Able to change back to original directory after testing");
-}
-{
-    my $tdir2 = tempdir( CLEANUP => 1 );
-    ok(chdir $tdir2, "Able to change to temporary directory");
-    ok( (mkdir 'lib'), "Able to make lib directory");
-    ok( (mkdir 'include'), "Able to make include directory");
-    my $libdir = File::Spec->catdir( $tdir2, 'lib' );
-    my $includedir = File::Spec->catdir( $tdir2, 'include' );
-    $conf->data->set('fink_lib_dir' => $libdir);
-    $conf->data->set('fink_include_dir' => $includedir);
-    my $foo = File::Spec->catfile( $includedir, 'gdbm.h' );
-    open my $FH, ">", $foo or croak "Could not open for writing";
-    print $FH "Hello world\n";
-    close $FH or croak "Could not close after writing";
-
-    ok(chdir $cwd, "Able to change back to original directory after testing");
-}
-
-$conf->replenish($serialized);
-
-########## --without-gdbm; _evaluate_cc_run() ##########
-
-($args, $step_list_ref) = process_options( {
-    argv => [ q{--without-gdbm} ],
-    mode => q{configure},
-} );
-$conf->add_steps($pkg);
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my ($test, $has_gdbm, $verbose);
-$test = qq{gdbm is working.\n};
-$has_gdbm = 0;
-$verbose = undef;
-$has_gdbm = $step->_evaluate_cc_run($test, $has_gdbm, $verbose);
-is($has_gdbm, 1, "'has_gdbm' set as expected");
-is($step->result(), 'yes', "Expected result was set");
-# Prepare for next test
-$step->set_result(undef);
-$test = qq{foobar};
-$has_gdbm = 0;
-$verbose = undef;
-$has_gdbm = $step->_evaluate_cc_run($test, $has_gdbm, $verbose);
-is($has_gdbm, 0, "'has_gdbm' set as expected");
-ok(! defined $step->result(), "Result is undefined, as expected");
-{
-    my $stdout;
-    $test = qq{gdbm is working.\n};
-    $has_gdbm = 0;
-    $verbose = 1;
-    capture(
-        sub { $has_gdbm =
-            $step->_evaluate_cc_run($test, $has_gdbm, $verbose); },
-        \$stdout,
-    );
-    is($has_gdbm, 1, "'has_gdbm' set as expected");
-    is($step->result(), 'yes', "Expected result was set");
-    like($stdout, qr/\(yes\)/, "Got expected verbose output");
-    # Prepare for next test
-    $step->set_result(undef);
-}
-
-$conf->replenish($serialized);
-
-pass("Completed all tests in $0");
-
-################### DOCUMENTATION ###################
-
-=head1 NAME
-
-auto/gdbm-01.t - test auto::gdbm
-
-=head1 SYNOPSIS
-
-    % prove t/steps/auto/gdbm-01.t
-
-=head1 DESCRIPTION
-
-The files in this directory test functionality used by F<Configure.pl>.
-
-The tests in this file test auto::gdbm.
-
-=head1 AUTHOR
-
-James E Keenan
-
-=head1 SEE ALSO
-
-config::auto::gdbm, F<Configure.pl>.
-
-=cut
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/avl_string_cache/tools/build/headerizer.pl
==============================================================================
--- branches/avl_string_cache/tools/build/headerizer.pl	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/tools/build/headerizer.pl	Thu Apr 22 09:55:26 2010	(r45889)
@@ -2,11 +2,6 @@
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
-use strict;
-use warnings;
-use Carp qw( confess );
-
-
 =head1 NAME
 
 tools/build/headerizer.pl - Generates the function header parts of .h
@@ -59,6 +54,9 @@
 
 =cut
 
+use strict;
+use warnings;
+
 use Getopt::Long;
 use lib qw( lib );
 use Parrot::Config;
@@ -66,96 +64,10 @@
 
 my $headerizer = Parrot::Headerizer->new;
 
-my %warnings;
-my %opt;
-
-my %valid_macros = map { ( $_, 1 ) } qw(
-    PARROT_EXPORT
-    PARROT_INLINE
-    PARROT_CAN_RETURN_NULL
-    PARROT_CANNOT_RETURN_NULL
-    PARROT_IGNORABLE_RESULT
-    PARROT_WARN_UNUSED_RESULT
-    PARROT_PURE_FUNCTION
-    PARROT_CONST_FUNCTION
-    PARROT_DOES_NOT_RETURN
-    PARROT_DOES_NOT_RETURN_WHEN_FALSE
-    PARROT_MALLOC
-    PARROT_OBSERVER
-);
-
 main();
 
 =head1 FUNCTIONS
 
-=head2 extract_function_declarations( $sourcefile_text )
-
-Rips apart a C file to get the function declarations.
-
-=cut
-
-sub extract_function_declarations {
-    my $text = shift;
-
-    # Only check the YACC C code if we find what looks like YACC file
-    $text =~ s[%\{(.*)%\}.*][$1]sm;
-
-    # Drop all text after HEADERIZER STOP
-    $text =~ s[/\*\s*HEADERIZER STOP.+][]s;
-
-    # Strip blocks of comments
-    $text =~ s[^/\*.*?\*/][]mxsg;
-
-    # Strip # compiler directives (Thanks, Audrey!)
-    $text =~ s[^#(\\\n|.)*][]mg;
-
-    # Strip code blocks
-    $text =~ s[^{.+?^}][]msg;
-
-    # Split on paragraphs
-    my @funcs = split /\n{2,}/, $text;
-
-    # If it doesn't start in the left column, it's not a func
-    @funcs = grep /^\S/, @funcs;
-
-    # Typedefs, enums and externs are no good
-    @funcs = grep { !/^(typedef|enum|extern)\b/ } @funcs;
-
-    # Structs are OK if they're not alone on the line
-    @funcs = grep { !/^struct.+;\n/ } @funcs;
-
-    # Structs are OK if they're not being defined
-    @funcs = grep { !/^(static\s+)?struct.+{\n/ } @funcs;
-
-    # Ignore magic function name YY_DECL
-    @funcs = grep { !/YY_DECL/ } @funcs;
-
-    # Ignore anything with magic words HEADERIZER SKIP
-    @funcs = grep { !m{/\*\s*HEADERIZER SKIP\s*\*/} } @funcs;
-
-    # pmclass declarations in PMC files are no good
-    @funcs = grep { !m{^pmclass } } @funcs;
-
-    # Variables are of no use to us
-    @funcs = grep !/=/, @funcs;
-
-    # Get rid of any blocks at the end
-    s/\s*{.*//s for @funcs;
-
-    # Toast anything non-whitespace
-    @funcs = grep /\S/, @funcs;
-
-    # If it's got a semicolon, it's not a function header
-    @funcs = grep !/;/, @funcs;
-
-    # remove any remaining }'s
-    @funcs = grep {! /^}/} @funcs;
-
-    chomp @funcs;
-
-    return @funcs;
-}
-
 =head2 extract_function_declaration_and_update_source( $cfile_name )
 
 Extract all the function declarations from the C file specified by
@@ -170,9 +82,9 @@
     my $text = join( '', <$fhin> );
     close $fhin;
 
-    my @func_declarations = extract_function_declarations( $text );
+    my @func_declarations = $headerizer->extract_function_declarations( $text );
     for my $decl ( @func_declarations ) {
-        my $specs = function_components_from_declaration( $cfile_name, $decl );
+        my $specs = $headerizer->function_components_from_declaration( $cfile_name, $decl );
         my $name = $specs->{name};
 
         my $heading = $headerizer->generate_documentation_signature($decl);
@@ -187,96 +99,6 @@
     return @func_declarations;
 }
 
-=head2 function_components_from_declaration( $file, $proto )
-
-Takes a declaration of a function and returns an ad-hoc hashref of
-properties for use elsewhere.
-
-=cut
-
-sub function_components_from_declaration {
-    my $file  = shift;
-    my $proto = shift;
-
-    my @lines = split( /\n/, $proto );
-    chomp @lines;
-
-    my @macros;
-    my $parrot_api;
-    my $parrot_inline;
-
-    while ( @lines && ( $lines[0] =~ /^PARROT_/ ) ) {
-        my $macro = shift @lines;
-        if ( $macro eq 'PARROT_EXPORT' ) {
-            $parrot_api = 1;
-        }
-        elsif ( $macro eq 'PARROT_INLINE' ) {
-            $parrot_inline = 1;
-        }
-        push( @macros, $macro );
-    }
-
-    my $return_type = shift @lines;
-    my $args = join( ' ', @lines );
-
-    $args =~ s/\s+/ /g;
-
-    $args =~ s{([^(]+)\s*\((.+)\);?}{$2}
-        or die qq{Couldn't handle "$proto" in $file\n};
-
-    my $name = $1;
-    $args = $2;
-
-    die "Can't have both PARROT_EXPORT and PARROT_INLINE on $name\n" if $parrot_inline && $parrot_api;
-
-    my @args = split( /\s*,\s*/, $args );
-    for (@args) {
-        /\S+\s+\S+/
-            || ( $_ eq '...' )
-            || ( $_ eq 'void' )
-            || ( $_ =~ /(PARROT|NULLOK|SHIM)_INTERP/ )
-            or die "Bad args in $proto";
-    }
-
-    my $is_ignorable = 0;
-    my $is_static = 0;
-    $is_static = $2 if $return_type =~ s/^((static)\s+)?//i;
-
-    die "$file $name: Impossible to have both static and PARROT_EXPORT" if $parrot_api && $is_static;
-
-    my %macros;
-    for my $macro (@macros) {
-        $macros{$macro} = 1;
-        if ( not $valid_macros{$macro} ) {
-            squawk( $file, $name, "Invalid macro $macro" );
-        }
-        if ( $macro eq 'PARROT_IGNORABLE_RESULT' ) {
-            $is_ignorable = 1;
-        }
-    }
-    if ( $return_type =~ /\*/ ) {
-        if ( !$macros{PARROT_CAN_RETURN_NULL} && !$macros{PARROT_CANNOT_RETURN_NULL} ) {
-            squawk( $file, $name,
-                "Returns a pointer, but no PARROT_CAN(NOT)_RETURN_NULL macro found." );
-        }
-        elsif ( $macros{PARROT_CAN_RETURN_NULL} && $macros{PARROT_CANNOT_RETURN_NULL} ) {
-            squawk( $file, $name,
-                "Can't have both PARROT_CAN_RETURN_NULL and PARROT_CANNOT_RETURN_NULL together." );
-        }
-    }
-
-    return {
-        file         => $file,
-        name         => $name,
-        args         => \@args,
-        macros       => \@macros,
-        is_static    => $is_static,
-        is_inline    => $parrot_inline,
-        is_api       => $parrot_api,
-        is_ignorable => $is_ignorable,
-        return_type  => $return_type,
-    };
-}
 
 sub attrs_from_args {
     my $func = shift;
@@ -300,14 +122,14 @@
             }
             push( @mods, "FUNC_MODIFIES($modified)" );
         }
-        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|NOTNULL)\(} || $arg eq 'PARROT_INTERP' ) {
+        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)\b/ ) ) {
-            squawk( $file, $name, qq{"$arg" isn't protected with an ARGIN, ARGOUT or ARGMOD (or a _NULLOK variant), or ARGFREE} );
+        if ( ( $arg =~ m{\*} ) && ( $arg !~ /\b(SHIM|((ARGIN|ARGOUT|ARGMOD)(_NULLOK)?)|ARGFREE(_NOTNULL)?)\b/ ) ) {
+            $headerizer->squawk( $file, $name, qq{"$arg" isn't protected with an ARGIN, ARGOUT or ARGMOD (or a _NULLOK variant), or ARGFREE} );
         }
         if ( ($arg =~ /\bconst\b/) && ($arg =~ /\*/) && ($arg !~ /\*\*/) && ($arg =~ /\b(ARG(MOD|OUT))\b/) ) {
-            squawk( $file, $name, qq{"$arg" is const, but that $1 conflicts with const} );
+            $headerizer->squawk( $file, $name, qq{"$arg" is const, but that $1 conflicts with const} );
         }
     }
 
@@ -319,7 +141,7 @@
     my @asserts;
 
     for my $arg (@args) {
-        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|NOTNULL)\((.+)\)} ) {
+        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
@@ -351,7 +173,11 @@
 
         my $return = $func->{return_type};
         my $alt_void = ' ';
-        if ( $func->{is_ignorable} && ($return ne 'void') && ($return !~ /\*/) ) {
+
+        # 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";
         }
 
@@ -424,14 +250,6 @@
     return @decls;
 }
 
-sub squawk {
-    my $file  = shift;
-    my $func  = shift;
-    my $error = shift;
-
-    push( @{ $warnings{$file}->{$func} }, $error );
-}
-
 sub read_file {
     my $filename = shift;
 
@@ -537,14 +355,14 @@
 
         my @decls;
         if ( $macro_match ) {
-            @decls = extract_function_declarations( $source_code );
+            @decls = $headerizer->extract_function_declarations( $source_code );
         }
         else {
             @decls = extract_function_declarations_and_update_source( $sourcefile );
         }
 
         for my $decl (@decls) {
-            my $components = function_components_from_declaration( $sourcefile, $decl );
+            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 ) {
@@ -598,6 +416,7 @@
         print "Headerization complete.\n";
     }
 
+    my %warnings = %{$headerizer->{warnings}};
     if ( keys %warnings ) {
         my $nwarnings     = 0;
         my $nwarningfuncs = 0;

Modified: branches/avl_string_cache/tools/dev/mk_inno.pl
==============================================================================
--- branches/avl_string_cache/tools/dev/mk_inno.pl	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/tools/dev/mk_inno.pl	Thu Apr 22 09:55:26 2010	(r45889)
@@ -34,7 +34,6 @@
 } if ($PConfig{has_icu});
 
 my %dll = (
-    has_gdbm     => [ 'gdbm3.dll' ],
     HAS_GETTEXT  => [ 'libintl3.dll', 'libiconv2.dll' ],
     HAS_PCRE     => [ 'pcre3.dll' ],
     HAS_READLINE => [ 'readline5.dll' ],

Modified: branches/avl_string_cache/tools/dev/mk_manifest_and_skip.pl
==============================================================================
--- branches/avl_string_cache/tools/dev/mk_manifest_and_skip.pl	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/tools/dev/mk_manifest_and_skip.pl	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,6 +1,6 @@
-##! perl
+#! perl
 # $Id$
-# Copyright (C) 2006-2009, Parrot Foundation.
+# Copyright (C) 2006-2010, Parrot Foundation.
 
 use strict;
 use warnings;
@@ -40,8 +40,7 @@
 
 Recreates MANIFEST and MANIFEST.SKIP from the subversion properties
 and the output of C<svn status>. .
-So far tested with svn 1.2.0 and svn 1.4.2.  This also worked with svk 1.08,
-but to keep our tasks manageable, we only guarantee support for Subversion.
+So far tested with svn 1.2.0 and svn 1.4.2.
 
 This won't work for git-svn.
 

Modified: branches/avl_string_cache/tools/dev/nci_thunk_gen.pir
==============================================================================
--- branches/avl_string_cache/tools/dev/nci_thunk_gen.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/tools/dev/nci_thunk_gen.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -381,8 +381,7 @@
 
     $S0 = 'get_loader_decl'(sigs)
     $S1 = 'get_loader_body'(sigs)
-    $S2 = 'sprintf'(<<'LOADER', $S0, $S0, $S1)
-%s;
+    $S2 = 'sprintf'(<<'LOADER', $S0, $S1)
 %s {
 %s
 }
@@ -406,8 +405,7 @@
 
     $S0 = 'get_dynext_loader_decl'(sigs)
     $S1 = 'get_loader_body'(sigs)
-    $S2 = 'sprintf'(<<'LOADER', $S0, $S0, $S1)
-%s;
+    $S2 = 'sprintf'(<<'LOADER', $S0, $S1)
 %s {
 %s
 }
@@ -431,15 +429,13 @@
     .param pmc sigs
     .local string code
     code = 'sprintf'(<<'HEADER', $S0, $S1)
-    PMC *iglobals;
+    PMC * const iglobals = interp->iglobals;
     PMC *nci_funcs;
     PMC *temp_pmc;
 
-    iglobals = interp->iglobals;
     PARROT_ASSERT(!(PMC_IS_NULL(iglobals)));
 
-    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals,
-            IGLOBALS_NCI_FUNCS);
+    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FUNCS);
     PARROT_ASSERT(!(PMC_IS_NULL(nci_funcs)));
 
 HEADER
@@ -640,10 +636,12 @@
     typedef %s(* func_t)(%s);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     %s
     %s;
+    UNUSED(return_data); /* Potentially unused, at least */
 TEMPLATE
 
     .return (var_decls)
@@ -835,7 +833,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_build_call_from_c_args(interp, call_object, \"P\", final_destination);" },
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"P\", final_destination);" },
     "i": { "as_proto": "int", "sig_char": "I",
            "return_type": "INTVAL" },
     "l": { "as_proto": "long",   "sig_char": "I", "return_type": "INTVAL" },
@@ -846,7 +844,7 @@
     "t": { "as_proto": "char *",
            "final_dest": "STRING *final_destination;",
            "ret_assign": "final_destination = Parrot_str_new(interp, return_data, 0);
-           Parrot_pcc_build_call_from_c_args(interp, call_object, \"S\", final_destination);",
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"S\", final_destination);",
            "sig_char": "S",
            "temp_tmpl": "char *t_%i; STRING *ts_%i",
            "fill_params_tmpl": ", &ts_%i",
@@ -884,7 +882,7 @@
     "2": { "as_proto": "short *",
            "sig_char": "P",
            "return_type": "short",
-           "ret_assign": "Parrot_pcc_build_call_from_c_args(interp, call_object, \"I\", return_data);",
+           "ret_assign": "ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"I\", return_data);",
            "temp_tmpl": "PMC *t_%i; short i_%i",
            "preamble_tmpl": "i_%i = VTABLE_get_integer(interp, t_%i);",
            "call_param_tmpl": "&i_%i",
@@ -892,7 +890,7 @@
     "3": { "as_proto": "int *",
            "sig_char": "P",
            "return_type": "int",
-           "ret_assign": "Parrot_pcc_build_call_from_c_args(interp, call_object, \"I\", return_data);",
+           "ret_assign": "ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"I\", return_data);",
            "temp_tmpl": "PMC *t_%i; int i_%i",
            "preamble_tmpl": "i_%i = VTABLE_get_integer(interp, t_%i);",
            "call_param_tmpl": "&i_%i",
@@ -900,7 +898,7 @@
     "4": { "as_proto": "long *",
            "sig_char": "P",
            "return_type": "long",
-           "ret_assign": "Parrot_pcc_build_call_from_c_args(interp, call_object, \"I\", return_data);",
+           "ret_assign": "ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"I\", return_data);",
            "temp_tmpl": "PMC *t_%i; long i_%i",
            "preamble_tmpl": "i_%i = VTABLE_get_integer(interp, t_%i);",
            "call_param_tmpl": "&i_%i",
@@ -960,7 +958,7 @@
     $I1 = !$I1
     $I0 = $I0 || $I1 # not (not exists v[ret_assign] and exists v[sig_char])
     if $I0 goto has_ret_assign
-        $S0 = 'Parrot_pcc_build_call_from_c_args(interp, call_object, "'
+        $S0 = 'ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "'
         $S1 = v['sig_char']
         $S0 = concat $S0, $S1
         $S0 = concat $S0, '", return_data);'

Modified: branches/avl_string_cache/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/avl_string_cache/tools/dev/pbc_to_exe.pir	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/tools/dev/pbc_to_exe.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -66,7 +66,7 @@
     print outfh, codestring
 
     print outfh, <<'MAIN'
-        int main(int argc, char *argv[])
+        int main(int argc, const char *argv[])
         {
             PackFile     *pf;
             Parrot_Interp interp;
@@ -217,9 +217,12 @@
     .local pmc ifh
     ifh = open infile, 'r'
     unless ifh goto err_infile
-    .local string codestring
+
+    .local pmc codestring
     .local int size
-    codestring = "const Parrot_UInt1 program_code[] = {"
+
+    codestring = new [ 'ResizableStringArray' ]
+    push codestring, "const Parrot_UInt1 program_code[] = {"
     size = 0
 
   read_loop:
@@ -236,13 +239,13 @@
     unless pos < pbclength goto code_done
     $I0 = ord pbcstring, pos
     $S0 = $I0
-    codestring .= $S0
-    codestring .= ','
+    push codestring, $S0
+    push codestring, ','
     inc pos
     inc size
     $I0 = size % 32
     unless $I0 == 0 goto code_loop
-    codestring .= "\n"
+    push codestring, "\n"
     goto code_loop
   code_done:
     goto read_loop
@@ -250,19 +253,19 @@
   read_done:
     close ifh
 
-    codestring .= "\n};\n\n"
-    codestring .= "const int bytecode_size = "
+    push codestring, "\n};\n\nconst int bytecode_size = "
     $S0 = size
-    codestring .= $S0
-    codestring .= ";\n"
-    codestring .= <<'END_OF_FUNCTION'
+    push codestring, $S0
+    push codestring, ";\n"
+    push codestring, <<'END_OF_FUNCTION'
         const void * get_program_code(void)
         {
             return program_code;
         }
 END_OF_FUNCTION
 
-    .return (codestring)
+    $S0 = join '', codestring
+    .return ($S0)
 
   err_infile:
     die "cannot open infile"
@@ -307,10 +310,13 @@
     .local pmc encoding_table
     encoding_table = 'generate_encoding_table'()
 
-    .local string codestring
+    .local pmc codestring
     .local int size
-    codestring = "const char * program_code =\n"
-    codestring .= '"'
+
+    codestring = new ['ResizableStringArray']
+
+    push codestring, "const char * program_code =\n"
+    push codestring, '"'
     size = 0
 
   read_loop:
@@ -327,14 +333,14 @@
     unless pos < pbclength goto code_done
     $I0 = ord pbcstring, pos
     $S0 = encoding_table[$I0]
-    codestring .= $S0
+    push codestring, $S0
     inc pos
     inc size
     $I0 = size % 32
     unless $I0 == 0 goto code_loop
-    codestring .= '"'
-    codestring .= "\n"
-    codestring .= '"'
+    push codestring, '"'
+    push codestring, "\n"
+    push codestring, '"'
     goto code_loop
   code_done:
     goto read_loop
@@ -342,21 +348,22 @@
   read_done:
     close ifh
 
-    codestring .= '"'
-    codestring .= "\n;\n\n"
-    codestring .= "const int bytecode_size = "
+    push codestring, '"'
+    push codestring, "\n;\n\n"
+    push codestring, "const int bytecode_size = "
     $S0 = size
-    codestring .= $S0
-    codestring .= ";\n"
+    push codestring, $S0
+    push codestring, ";\n"
 
-    codestring .= <<'END_OF_FUNCTION'
+    push codestring, <<'END_OF_FUNCTION'
         const void * get_program_code(void)
         {
             return program_code;
         }
 END_OF_FUNCTION
 
-    .return (codestring)
+    $S0 = join '', codestring
+    .return ($S0)
 
   err_infile:
     die "cannot open infile"
@@ -437,17 +444,16 @@
     pbc_size = $P2[7]
 
 
-    .local string codestring
-    codestring  = ''
-    codestring .= '#include <windows.h>'
-    codestring .= "\n"
-    codestring .= rc_constant_defines
-    codestring .= "const unsigned int bytecode_size = "
+    .local pmc codestring
+    codestring  = new [ 'ResizableStringArray' ]
+    push codestring, "#include <windows.h>\n"
+    push codestring, rc_constant_defines
+    push codestring, "const unsigned int bytecode_size = "
     $S0 = pbc_size
-    codestring .= $S0
-    codestring .= ";\n"
+    push codestring, $S0
+    push codestring, ";\n"
 
-    codestring .= <<'END_OF_FUNCTION'
+    push codestring, <<'END_OF_FUNCTION'
         const void * get_program_code(void)
         {
             HRSRC   hResource;
@@ -489,9 +495,10 @@
     unless status goto rc_ok
 
     die "RC command failed"
-  rc_ok:
 
-    .return (codestring)
+  rc_ok:
+    $S0 = join '', codestring
+    .return ($S0)
 
   err_h_open:
     die "cannot open .h file"
@@ -687,19 +694,14 @@
 .sub 'prepend_installable'
     .param string file
 
-    $P0   = '_config'()
-
-    .local string slash
-    slash = $P0['slash']
-
     .local pmc path
-    path = split slash, file
+    path     = split '/', file
 
     file     = path[-1]
     file     = concat 'installable_', file
     path[-1] = file
 
-    file     = join slash, path
+    file     = join '/', path
 
     .return( file )
 .end

Added: branches/avl_string_cache/tools/dev/tapir.pir
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/tools/dev/tapir.pir	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,236 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+Tapir
+
+=head1 DESCRIPTION
+
+Tapir is a PIR-based TAP (Test Anything Protocol) Harness
+
+It eats test output (i.e. is a TAP consumer) and tells humans if the
+test suite passed, and if not, which kind of pretty colors of smoke
+came out. It is mostly equivalent to 'prove' from Perl 5.
+
+=head1 SYNOPSIS
+
+  ./tapir t/*.t
+
+=head2 OPTIONS
+
+Usage:
+
+  tapir [OPTIONS] <files>
+
+=head3 Boolean options
+
+ -v,  --verbose         Print all test lines.
+ -s,  --shuffle         Run the tests in random order.
+ -f,  --failures        Show failed tests.
+ -o,  --comments        Show comments.
+      --ignore-exit     Ignore exit status from test scripts.
+ -m,  --merge           Merge test scripts' STDERR with their STDOUT.
+      --reverse         Run the tests in reverse order.
+ -q,  --quiet           Suppress some test output while running tests.
+ -Q,  --QUIET           Only print summary results.
+      --directives      Only show results with TODO or SKIP directives.
+      --normalize       Normalize TAP output in verbose output
+ -h,  --help            Display this help
+ -V,  --version         Display the version
+
+=head3 Options that take arguments
+
+ -e,  --exec            Interpreter to run the tests ('' for compiled
+                        tests.)
+ -a,  --archive         Store the resulting TAP in an archive file.
+
+=cut
+
+
+.sub 'main' :main
+    .param pmc argv
+    $S0  = shift argv
+    .local int argc
+    argc = elements argv
+    if argc > 0 goto L1
+    help()
+    end
+  L1:
+    .local pmc opts
+    opts = _parse_opts(argv)
+    $S0 = opts['help']
+    unless $S0 goto L2
+    help()
+    end
+  L2:
+    $S0 = opts['version']
+    unless $S0 goto L3
+    version()
+    end
+  L3:
+    .tailcall do(opts, argv)
+.end
+
+.sub 'version' :anon
+    say "Tapir 0.1.0"
+.end
+
+.sub 'help' :anon
+    say <<"HELP"
+
+ tapir [options] [files]
+
+Boolean options:
+
+ -v,  --verbose         Print all test lines.
+ -s,  --shuffle         Run the tests in random order.
+ -f,  --failures        Show failed tests.
+ -o,  --comments        Show comments.
+      --ignore-exit     Ignore exit status from test scripts.
+ -m,  --merge           Merge test scripts' STDERR with their STDOUT.
+      --reverse         Run the tests in reverse order.
+ -q,  --quiet           Suppress some test output while running tests.
+ -Q,  --QUIET           Only print summary results.
+      --directives      Only show results with TODO or SKIP directives.
+      --normalize       Normalize TAP output in verbose output
+ -h,  --help            Display this help
+ -V,  --version         Display the version
+
+Options that take arguments:
+
+ -e,  --exec            Interpreter to run the tests ('' for compiled
+                        tests.)
+ -a,  --archive         Store the resulting TAP in an archive file.
+HELP
+.end
+
+.sub '_parse_opts' :anon
+    .param pmc argv
+    load_bytecode 'Getopt/Obj.pbc'
+    $P0 = new ['Getopt';'Obj']
+    $P0.'notOptStop'(1)
+    push $P0, 'exec|e:s'
+    push $P0, 'archive|a:s'
+    push $P0, 'verbose|v'
+    push $P0, 'quiet|q'
+    push $P0, 'QUIET|Q'
+    push $P0, 'normalize'
+    push $P0, 'failures|f'
+    push $P0, 'comments|o'
+    push $P0, 'directives'
+    push $P0, 'ignore-exit'
+    push $P0, 'reverse'
+    push $P0, 'merge|m'
+    push $P0, 'shuffle|s'
+    push $P0, 'version|V'
+    push $P0, 'help|h'
+    $P1 = $P0.'get_options'(argv)
+    .return ($P1)
+.end
+
+.sub 'do' :anon
+    .param pmc opts
+    .param pmc files
+    load_bytecode 'TAP/Harness.pbc'
+    .local pmc harness, aggregate
+    $I0 = exists opts['archive']
+    if $I0 goto L1
+    harness = new ['TAP';'Harness']
+    goto L2
+  L1:
+    harness = new ['TAP';'Harness';'Archive']
+    $S0 = opts['archive']
+    harness.'archive'($S0)
+  L2:
+    harness.'process_args'(opts)
+    $P0 = _get_tests(opts, files)
+    aggregate = harness.'runtests'($P0)
+    $I0 = aggregate.'has_errors'()
+    exit $I0
+.end
+
+.sub '_get_tests' :anon
+    .param pmc opts
+    .param pmc files
+    .local int nb
+    nb = elements files
+    # currently, FixedStringArray hasn't the method sort.
+    # see TT #1356
+    $P0 = new 'FixedPMCArray'
+    set $P0, nb
+    $I0 = 0
+    $P1 = iter files
+  L1:
+    unless $P1 goto L2
+    $S0 = shift $P1
+    $P2 = split "\\", $S0
+    $S0 = join "/", $P2
+    $P2 = box $S0
+    $P0[$I0] = $P2
+    inc $I0
+    goto L1
+  L2:
+    $I0 = exists opts['shuffle']
+    unless $I0 goto L3
+    $P0 = _shuffle($P0)
+    goto L4
+  L3:
+    $P0.'sort'()
+    $I0 = exists opts['reverse']
+    unless $I0 goto L4
+    $P0 = _reverse($P0)
+  L4:
+    .return ($P0)
+.end
+
+.sub '_reverse' :anon
+    .param pmc array
+    .local int nb
+    nb = elements array
+    $P0 = new 'FixedPMCArray'
+    set $P0, nb
+    $I0 = 0
+    $I1 = nb - 1
+  L1:
+    unless $I0 < nb goto L2
+    $P1 = array[$I0]
+    $P0[$I1] = $P1
+    inc $I0
+    dec $I1
+    goto L1
+  L2:
+    .return ($P0)
+.end
+
+.sub '_shuffle' :anon
+    .param pmc array
+    load_bytecode 'Math/Rand.pbc'
+    .local pmc rand
+    rand = get_global [ 'Math'; 'Rand' ], 'rand'
+    .local pmc srand
+    srand = get_global [ 'Math'; 'Rand' ], 'srand'
+    $I0 = time
+    srand($I0)
+    .local int i, j
+    i = elements array
+  L1:
+    unless i > 0 goto L2
+    $I0 = rand()
+    j = $I0 % i
+    dec i
+    $P1 = array[i]
+    $P2 = array[j]
+    array[i] = $P2
+    array[j] = $P1
+    goto L1
+  L2:
+    .return (array)
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Added: branches/avl_string_cache/tools/docs/book-to-latex.pl
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/tools/docs/book-to-latex.pl	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,34 @@
+#! perl
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+use Pod::PseudoPod::LaTeX;
+
+print <<'HEADER';
+\documentclass[11pt,a4paper,oneside]{report}
+\usepackage{graphics,graphicx}
+\usepackage{colortbl}
+
+\begin{document}
+\tableofcontents
+HEADER
+
+for (@ARGV) {
+    my $parser = Pod::PseudoPod::LaTeX->new();
+    $parser->output_fh( *STDOUT );
+    $parser->parse_file( $_ );
+}
+
+print <<'FOOTER';
+\end{document}
+FOOTER
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Added: branches/avl_string_cache/tools/docs/filename_and_chapter.pl
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/avl_string_cache/tools/docs/filename_and_chapter.pl	Thu Apr 22 09:55:26 2010	(r45889)
@@ -0,0 +1,49 @@
+#! perl
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+#
+# perl script that deliver all filenames and the associated chapters
+#
+
+use strict;
+use warnings;
+
+use Getopt::Long ();
+
+my $item_list_ref = [ ['intro.pod', 'Introduction to Parrot'],
+                      ['overview.pod', 'Overview'],
+                      ['submissions.pod', 'Submitting bug reports and patches'],
+                    ];
+
+my $lang = @$item_list_ref;
+
+my ( $result, $give_out, $b_out);
+
+$result = Getopt::Long::GetOptions (
+    "print" => \$give_out,
+    "b_out" => \$b_out,
+);
+
+if ($give_out)  {
+    for ( my $i=0; $i<$lang; $i++ )
+        { print $$item_list_ref[$i][0], ' ' }
+    exit;
+};
+
+if ($b_out) {
+    for ( my $i=0; $i<$lang; $i++ )
+        { print 'build/modified_pod/', $$item_list_ref[$i][0], ' ' }
+    exit;
+};
+
+
+for (my $i=0; $i<$lang; $i++)
+    { `sed -e '4,6c\=head0 $$item_list_ref[$i][1]' $$item_list_ref[$i][0] > build/modified_pod/$$item_list_ref[$i][0]` }
+
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/avl_string_cache/tools/util/release.json
==============================================================================
--- branches/avl_string_cache/tools/util/release.json	Thu Apr 22 09:44:56 2010	(r45888)
+++ branches/avl_string_cache/tools/util/release.json	Thu Apr 22 09:55:26 2010	(r45889)
@@ -1,9 +1,9 @@
 {
-    "release.version"  : "2.2.0",
-    "release.name"     : "Like Clockwork",
+    "release.version"  : "2.3.0",
+    "release.name"     : "Samoan Lory",
     "release.day"      : "Tuesday",
-    "release.date"     : "16 March 2010",
-    "release.nextdate" : "20 April 2010",
+    "release.date"     : "20 April 2010",
+    "release.nextdate" : "18 May 2010",
 
     "web.root"         : "http://parrot.org/",
     "web.source"       : "download",
@@ -11,13 +11,13 @@
     "web.repository"   : "https://svn.parrot.org/parrot/trunk/",
 
     "bugday.day"       : "Saturday",
-    "bugday.date"      : "13 March 2010",
+    "bugday.date"      : "17 April 2010",
 
     "wiki.root"        : "https://trac.parrot.org/parrot/wiki/",
-    "wiki.bugday"      : "bug_day_2010_03_13",
+    "wiki.bugday"      : "bug_day_2010_04_17",
 
     "cpan.search"      : "http://search.cpan.org/dist/parrot",
-    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/devel/2.2.0/",
-    "subversion.root"  : "http://subversion.tigris.org/",
+    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/stable/2.3.0/",
+    "subversion.root"  : "http://subversion.apache.org/",
     "svk.root"         : "http://svk.bestpractical.com/"
 }


More information about the parrot-commits mailing list